我使用STM32H7开始了一个新项目,当前使用的是IAR EWARM V8,使用STM32CUBEMX生成了配置代码,并开始了一个初始项目。
我完成了两个CUBEMX评估项目,以验证一些硬件并使其正常工作,并且能够逐步完成代码。
但是有些奇怪的事情发生了,特别是在将变量分配为函数内的局部变量的情况下,对于IAR,IAR会将它们放入“系统保留”的内存范围中。
即在0x1FF20000
-0x1FFFFFFF
内
例如... STM提供的项目示例“ FMC_NOR”是用于测试NOR闪存等的测试代码。
他们在main.c
文件的顶部创建了这两个小数组作为全局变量。
(buffer_size
是0x1000)
uint16_t aTxBuffer[BUFFER_SIZE] = {0};
uint16_t aRxBuffer[BUFFER_SIZE] = {0};
在全局空间中,它们被分配在DTCM区域(0x2000:0000)
当作为本地变量移动时,它们随后被分配到“保留空间” ...
发生的事情是,当IAR遇到任何这样的阵列时,处理器就会发生故障,并出现“不精确的数据访问”硬件故障。
初始化JPEG模块的代码也会发生相同的错误,因为它试图加载霍夫曼表的数组,等等。
使用TrueStudio时不会发生此问题... CubeMX自动为您使用的任何编译器生成链接器文件。
我没有在链接器文件中看到指向保留内存地址的任何内容。
所以不确定会发生什么?我是使用此处理器的新手,所以我才刚刚开始了解它的内存映射。
感谢您的帮助或建议,我想弄清楚IAR,到目前为止,我对TrueStudio有点满意。
答案 0 :(得分:1)
我解决了自己的问题...因此不再需要帮助...
这在STM CUBEMX为STM32H7生成的'stm32h743xx_flash.icf'中...
/*-Sizes-*/
define symbol __ICFEDIT_size_cstack__ = 0x400;
define symbol __ICFEDIT_size_heap__ = 0x200;
/**** End of ICF editor section. ###ICF###*/
将'size_cstack'碰撞到2k(0x800),一切都很好...