STM32H7-IAR将局部变量放入“保留的内存”(0x1FF20000-0x1FFFFFFF)

时间:2019-01-13 03:27:54

标签: stm32 iar

我使用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有点满意。

1 个答案:

答案 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),一切都很好...