程序换个IDE就不运行了?

有人使用stm32h743芯片做应用开发,遇到个比较奇怪的事情。事情是这样的,他使用st公司的图形化配置工具stm32cubemx进行基本配置后,如果基于arm mdk ide创建工程并组织代码,编译除错后运行一切正常。但如果他基于iar ide创建工程并使用相同的用户代码时,发现程序没法正常运行,同时还没有任何报错。颇为奇怪。
经进一步了解。他的代码要实现的一个主要功能就是adc,并利用通用dma将adc结果搬运到内存。现在最明显的问题就是,当把ide从mdk切换到iar后,adc的结果没有被搬运到内存。借助调试可以确认,adc外设确实启动了、dma配置也没有问题,那到底怎么回事呢?两个环境下的外设配置及用户应用代码是完全一样的。
借助调试,在调试过程中无意发现了一点点差异。那就是两个ide分别为存放adc结果的内存安排的地址不一样。下面两幅截图来自arm mdk和iar环境下存放adc结果的内存地址。
不难看到,在mdk环境下,内存地址安排在0x2400008c开始的地方,而在iar环境下内存地址被安排在0x20000084开始的地方。难道问题就出在这个地方?
------正是!
我们先查看stmh7参考手册,看看上面2个地址位于哪些内存区。
也就是说,iar默认将存放adc结果的内存安排在dtcm区,而mdk将其安排在axi sram区。我们可以查看手册得知,h7系列的通用dma1或dma2是没法访问dtcm的。dtcm只能被内核或mdma访问。
上图中的短横杠表示不可访问。原来是这样,难怪编译过程中没有任何报错提示,只是所选dma硬件上不支持对dtcm的访问而已。
既然知道了原因,问题就好解决了。我们可以在iar环境里直接给定存储地址,能让dma访问到就行。或者在iar调试环境下修改内存使用的默认地址于axi sram区【参考下面截图示意操作】。
ok,今天的话题就分享到这里。这里多分享一点,愿君少跳一次坑。下次再聊。


freebsd是什么系统_freebsd12安装教程
为何台积电与韩企对华出口禁令豁免期不同?
如何获得你的第一个代币
NB-IOT的粮库挡粮门异动监测装置原理
RFID电子档案信息化如何管理
程序换个IDE就不运行了?
比特币DeFi生态的发展情况分析
自动化造纸系统可搭配我们PLC
AMD与晶圆厂商GLOBALFOUNDRIES修正供应协议
第四大电信运营商——中国广电将在5G中担当什么角色?
金其利三防加固平板:安全无忧,高性能驱动
为什么汽车 OTA 更新标准至关重要
ntc热敏电阻阻值与温度的关系
时间是检验真理的唯一标准,石墨烯在汽车上的应用渐行渐近
防水透气膜与防水透气阀在汽车制造中的解决方案
基于SPCA563B芯片的图象识别系统电路模块设计
技术预测:2040年晶圆厂工艺
高频开关电源的干扰问题及解决方法
苹果收购了AI创业公司 专注于构建设备上的机器学习软件
林美玉:加强工业互联网安全体系建设,守护新型工业化高质量发展