打印
[N32G45x]

低功耗模式(STOP2)堆栈数据保持方法

[复制链接]
509|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Afanx|  楼主 | 2022-11-3 18:37 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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")));

使用特权

评论回复
沙发
zhouchen605768| | 2022-12-5 20:40 | 只看该作者
我直接借用你这个配置,在N32G457RE上面编译通不过.你知道还有什么地方需要配置的?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

51

帖子

1

粉丝