CH584 CH585 CH592 指定ram区域以实现变量的复位保持

RISC-V内核的CH5Xx系列蓝牙MCU,设计时带有R8_GLOB_RESET_KEEP,可以在MCU复位(上电复位/看门狗复位除外)后保持寄存器中的内容。
复位保持寄存器的使用优势是更方便,在CH5Xx系列MCU之间的可移植性更高。

不过面临需要保存更多数据的场景时,必须说需要保存一个结构体变量,那1字节的寄存器实在是不够用。

解决思路是压缩工程对ram的操作范围,余出一定量的ram来通过绝对地址的方式操作。

 

注意:

①尽量4字节对齐。

②当出现多个工程时,需要将所有工程的配置保持一致,以防有工程默认初始化到了指定区域。

③在使用BLE固定库的OTA工程中,不要使用最后1K区域的ram,该区域在.s文件中被初始化;这种情况下尽量从0x20000000地址开始分配指定ram。

④ram掉电丢失的特性还是存在的,故需要上电后判断复位原因,若为上电复位,则需要重新初始化特定区域。

⑤不要通过配置section的方式来分配ram空间,会导致MRS编译器的编译结果flash开销过大导致无法烧录,不适用。

 

具体操作两步即可:

1.配置.ld文件,预留出期望的ram大小。这里以4字节为例,预留出头部的4字节ram。

    RAM (xrw) : ORIGIN = (0x20000000+4), LENGTH = (26K-4)

2.直接按绝对地址进行赋值:*((uint32 *)(0x20000000)) = 0x12345678

posted @ 2025-06-23 14:30  debugdabiaoge  阅读(125)  评论(0)    收藏  举报