两种情况:
1. 堆栈放在内部片上RAM,即0x2000,0000开始的地方 全局变量放在外部SRAM 这样的配置对应以下的linker文件
-Z(DATA)DATA_I,DATA_Z,DATA_N=EXTSRAMSTART-EXTSRAMEND -Z(DATA)CSTACK+_CSTACK_SIZE=RAMSTART-RAMEND
代码中main()函数中的局部数组test_array[20]是处于堆栈的 --> 0x2000,**** 全局数组Tab[20]是作为全局变量放置的 --> 0x6800,****
2. 全局变量放在内部片上RAM,即0x2000,0000开始的地方 堆栈放在外部SRAM 这样的配置对应以下的linker文件
-Z(DATA)DATA_I,DATA_Z,DATA_N=RAMSTART-RAMEND -Z(DATA)CSTACK+_CSTACK_SIZE=EXTSRAMSTART-EXTSRAMEND
代码中main()函数中的局部数组test_array[20]是处于堆栈的 --> 0x6800,**** 全局数组Tab[20]是作为全局变量放置的 --> 0x2000,****
对于IAR的环境来说,需要注意的是<stm32f10x_vector.c>中#define DATA_IN_ExtSRAM,使得在跳到main之前做low_level_init时使能对FSMC的bank1的region3的操作。(当然这是针对于ST的官方评估板,即外部SRAM挂在FSMC的bank1的region3上)
在此不过说明外部SRAM可以作为堆栈使用,并不会有什么hardfault异常。该异常的产生肯定是和用户自己的代码有关,或者环境设置不当造成的。 相关链接:https://bbs.21ic.com/upfiles/img/200712/20071213112742926.zip
|