stm32f103 外扩SDRAM后栈空间划分的问题
由于内部sram大小只有64kb,为了跑函数,所以扩展了外部1mb的sdram进行使用,起始地址为0x68000000 大小为0x100000。这样用外部SRAM就跟用内部SRAM一样,不用自己去申请内存,也不用考虑什么内存地址,一切让编译器自己去解决。
根据库函数例程fsmc来实现扩展外部sdram。在库函数的system_stm32f10x.c这个初始化文件当中其实就已经有外部SRAM的初始化,我们只要增加“#define DATA_IN_ExtSRAM 1”这句宏定义
#if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)
/* #define DATA_IN_ExtSRAM */
#define DATA_IN_ExtSRAM 1
#endif
再编译的时候就会把外部SRAM的初始化编译进去,初始化的代码大家可以去看文件中的void SystemInit_ExtMemCtl(void) 这个函数。
有一个问题就是,调用函数的内部数组被分配在外部sdram空间中没有问题,但是sp指针(自动分配的栈区并不是很大),在函数调用过程中,出现栈空间sp值小于0x68000000的情况发生。所以问一下,外部sdram中,栈区间大小在哪里进行设置?还是说是有系统自动分配的,要是自动分配的不应该在函数调用的过程中出现栈空间不够的情况啊。。。