本帖最后由 Afanx 于 2022-11-3 18:37 编辑
N32G45x系列根据SRAM容量大小有下面2个规格:
其中,在 Stop2 和 Standby 模式只有R-SRAM区可以保持数据,SRAM区数据全部丢失。因此要想唤醒后程序正常运行,就需要把(全局变量、栈等)放入 R-SRAM中。
把栈放到R-SRAM区:
只需要把栈顶定义到R-SRAM区最后即可:__initial_sp EQU 0x20024000
栈是由上向下生长,因此如果定义栈空间位0x1000(4kB)大小,那么实际栈地址为0x20023000~0x20024000,位于R-SRAM区。
把堆放到R-SRAM区:
如果使用了malloc()函数,便会启用堆区,否则忽略。如果需要保持malloc()声明空间的变量,则可以如下定义:
__heap_base EQU 0x20022000
__heap_limit EQU 0x20023000
堆为由下向上生长,如果指定地址需要定义首尾地址,比如按上面定义实际堆地址空间为0x20022000~0x20023000,位于R-SRAM区。
把全局变量放到R-SRAM区:
使用__attribute__关键字将变量定位到R-SRAM区。
uint32_t globle_R_SRAM_Dat[256] __attribute__((section(".ARM.__at_0x20020000")));
|