CH58x、CH59x、CH57x复位保持RAM数据不丢失修改示例

一、确认需要保存多少字节RAM数据,本篇演示只保留4字节数据

二、定义所需要保存的数据,例如:R32_RAM_RECOVER_FLAG;定义需要保存到的RAM地址:例如:&R32_RAM_SAVE_FLAG

#define R32_RAM_RECOVER_FLAG      0x1234ABCD
#define R32_RAM_SAVE_FLAG   (*((PUINT32V)0x20000000))


void RAM_RECOVER()
{
    if(R32_RAM_SAVE_FLAG == R32_RAM_RECOVER_FLAG)
    {
        PRINT("RECOVER\n");
    }
}


void RAM_SAVE()
{
    R32_RAM_SAVE_FLAG = R32_RAM_RECOVER_FLAG;
}

三、修改Link.ld文件,指定代码RAM起始地址跳过所使用的RAM段,总长度减去所使用的数据量

image

 

四、测试

/*********************************************************************
 * @fn      main
 *
 * @brief   主函数
 *
 * @return  none
 */
int main()
{
    HSECFG_Capacitance(HSECap_18p);
    SetSysClock(SYSCLK_FREQ);

    /* 配置串口调试 */
    DebugInit();
    PRINT("Start @ChipID=%02X\n", R8_CHIP_ID);
    RAM_RECOVER();//判断复位后数据有没有丢失,是否与目标数据一致,上电第一次一定不成立
    RAM_SAVE();//数据存储至RAM中,复位不丢失
    DelayMs(2000);
    SYS_ResetExecute();//2s后执行软复位
    while(1);
}

 

image

 

 

 

posted @ 2026-05-19 16:38  oTvTo  阅读(41)  评论(0)    收藏  举报