0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

程序换个IDE就不运行了?

茶话MCU 来源:茶话MCU 2023-07-24 15:30 次阅读

有人使用STM32H743芯片做应用开发,遇到个比较奇怪的事情。事情是这样的,他使用ST公司的图形化配置工具STM32CubeMx进行基本配置后,如果基于ARM MDK IDE创建工程并组织代码,编译除错后运行一切正常。但如果他基于IAR IDE创建工程并使用相同的用户代码时,发现程序没法正常运行,同时还没有任何报错。颇为奇怪。

经进一步了解。他的代码要实现的一个主要功能就是ADC,并利用通用DMAADC结果搬运到内存。现在最明显的问题就是,当把IDE从MDK切换到IAR后,ADC的结果没有被搬运到内存。借助调试可以确认,ADC外设确实启动了、DMA配置也没有问题,那到底怎么回事呢?两个环境下的外设配置及用户应用代码是完全一样的。

借助调试,在调试过程中无意发现了一点点差异。那就是两个IDE分别为存放ADC结果的内存安排的地址不一样。下面两幅截图来自ARM MDK和IAR环境下存放ADC结果的内存地址。

8547dcbc-29f3-11ee-a368-dac502259ad0.png

855a604e-29f3-11ee-a368-dac502259ad0.png

不难看到,在MDK环境下,内存地址安排在0x2400008c开始的地方,而在IAR环境下内存地址被安排在0x20000084开始的地方。难道问题就出在这个地方?

------正是!

我们先查看STMH7参考手册,看看上面2个地址位于哪些内存区。

85bfcbf0-29f3-11ee-a368-dac502259ad0.png

也就是说,IAR默认将存放ADC结果的内存安排在DTCM区,而MDK将其安排在AXI SRAM区。我们可以查看手册得知,H7系列的通用DMA1或DMA2是没法访问DTCM的。DTCM只能被内核或MDMA访问。

85eabd2e-29f3-11ee-a368-dac502259ad0.png

861d1f94-29f3-11ee-a368-dac502259ad0.png

上图中的短横杠表示不可访问。原来是这样,难怪编译过程中没有任何报错提示,只是所选DMA硬件上不支持对DTCM的访问而已。

既然知道了原因,问题就好解决了。我们可以在IAR环境里直接给定存储地址,能让DMA访问到就行。或者在IAR调试环境下修改内存使用的默认地址于AXI SRAM区【参考下面截图示意操作】。

86690580-29f3-11ee-a368-dac502259ad0.png

OK,今天的话题就分享到这里。这里多分享一点,愿君少跳一次坑。下次再聊。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • adc
    adc
    +关注

    关注

    95

    文章

    5651

    浏览量

    539481
  • IDE
    IDE
    +关注

    关注

    0

    文章

    326

    浏览量

    46338
  • 程序
    +关注

    关注

    114

    文章

    3631

    浏览量

    79544
  • dma
    dma
    +关注

    关注

    3

    文章

    535

    浏览量

    99025
  • STM32H743
    +关注

    关注

    0

    文章

    24

    浏览量

    1353

原文标题:程序换个IDE就不运行了?

文章出处:【微信号:stmcu832,微信公众号:茶话MCU】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM8程序脱机后就不运行的原因?

    Delay_T = 1000; while(Delay_T); 上面这部分程序在Main()中的初始化程序后,仿真可正常执行。但脱机后,就不运行了。 改为 Delay_T = 100
    发表于 04-19 08:05

    STM32F401 AHB时钟大于30MHz就不运行了是怎么回事?

    STM32F401 AHB时钟大于30MHz 就不运行了,手册数据是84MHz,是什么问题?
    发表于 04-24 08:28

    添加移位寄存器后就不能正常运行了,该怎么破?

    之前的程序运行很正常,但是添加一个移位寄存器来记录事件的发生次数后,程序就不能正常运行了,请高手指点,附图两张。
    发表于 03-03 23:13

    第一次使用软件仿真,我写了个调试程序,在开发板上可以运行,但在PROTEUS上就不行了,为什么呢

    ` 本帖最后由 wcm014 于 2015-11-21 15:01 编辑 如题,我用PIC12F675写了个调试程序,第一次用软件仿真,在开发板上可以运行,但在PROTEUS上就不行了,是不是我
    发表于 11-21 14:31

    cc2540 程序隔断时间后就不运行了怎么回事?

    cc2540下载程序后,过一段时间(几十个小时)程序就不运行了,重启也不行,必须要重新烧录程序才能运行
    发表于 03-11 15:25

    cc2530为什么跑了几天后程序就不正常运行了

    cc2530为什么跑了几天后程序就不正常运行了?cc2530程序刚开始都能正常的运行,可是当跑了几天左右
    发表于 04-05 16:16

    请问一下,STM32 boot0和boot1两个都悬空的话程序是不是就不运行了

    请问一下,STM32 boot0和boot1两个都悬空的话程序是不是就不运行了运行程序的话boot0必须要接地吗?求大神解答一下,本人新手。多谢!!
    发表于 06-05 18:45

    ucos延时运行到OSTimeDlyHMSM(0, 0, 0, 100);时不再运行了

    软仿运行到OSTimeDlyHMSM(0, 0, 0, 100);时就不再运行了 ,是不是我滴答定时没弄明白?ceshi1.rar (3.67 MB )
    发表于 01-11 10:31

    STC同样的程序换个芯片就不运行

    如题,坛友们有没遇到这样的问题呢我在STC12LE5A60S2-LQFP44上面可以运行程序,移植到STC12C5616AD-LQFP32上就不运行,郁闷了两个晚上。。。头文件由S
    发表于 04-08 22:49

    遥控器和LCD放在F103C8板子上怎么就不行了

    各位,问个问题,我在ALIENTEK ,运行遥控器程序和LCD程序是OK的,然后我把它放在公司的F103C8板子上怎么就不行了???编译的时候重新选择了F103C8这个芯片的不都是10
    发表于 08-05 02:25

    为什么程序运行到OSStatInit()时就不在运行了

    程序运行到OSStatInit()时就不在运行了,将OSStatInit()注释掉后每个任务都只运行一次后就不再运行了,但是这两种情况下,卡
    发表于 10-15 21:37

    CH573的中断一旦接低电平程序就不运行了怎么解决?

    看了一下好像没有中断的例程,在pm里面看到一个,然后我就改了我用的PA12引脚,虽然配了上拉,但是量了下只有1.5V左右,而且一旦接低电平程序好像就不运行了。我有一个串口1s输出一次的,这里接低电平
    发表于 09-01 07:11

    为什么单片机断电重启以后程序就不运行了?怎么解决?

    单片机最小系统是我自己焊的,我认为不是程序和芯片的问题,芯片和程序在其它的插座上运行的好好的。但我焊的这个插座却不行。是晶振,复位还是什么电路出问题了吗
    发表于 10-26 07:00

    使用VISUALDSP++5.0,为什么一选择指令和数据cache程序就不运行了

    我使用VISUALDSP++5.0,不选择指令和数据cache,程序就能运行,为什么一选择指令和数据cache,程序就不运行了,不能仿真
    发表于 12-20 08:27

    为什么说程序员过了35岁就只能转行了

    程序员干到35就不行了!”这是IT行业普遍存在的一种说法。
    的头像 发表于 12-10 13:52 7076次阅读
    为什么说<b class='flag-5'>程序</b>员过了35岁就只能转<b class='flag-5'>行了</b>