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段,总长度减去所使用的数据量

四、测试
/*********************************************************************
* @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);
}


浙公网安备 33010602011771号