关于ch32v203在standby模式下保存数据到ram的问题
RCC_APB1PeriphClockCmd, ;

TestDataWrite1;
PWR_WakeUpPinCmd;
PWR_EnterSTANDBYMode_RAM;
myAddr=+*;alarm_cb.= ;
    **myAddr+<<= alarm_cb.;
    **myAddr+<<= alarm_cb.;
    **myAddr+<<= alarm_cb.;
    **myAddr+<<= alarm_cb.;
    **myAddr+<<= alarm_cb.;
    **myAddr+<<= alarm_cb.;
    **myAddr+<<= alarm_cb.;
    **myAddr+<<= alarm_cb.;
    **myAddr+<<= alarm_cb.;
    **myAddr+<<= alarm_cb.;
    **myAddr+<<= alarm_cb.;
    **myAddr+<<= alarm_cb.;
    **myAddr+<<= alarm_cb.;
    **myAddr+<<= alarm_cb.;
    **myAddr+<<= alarm_cb.;
    **myAddr+<<= alarm_cb.;
    **myAddr+<<= alarm_cb.;
    **myAddr+<<= alarm_cb.;
    **myAddr+<<= alarm_cb.;
    **myAddr+<<= alarm_cb.;
    **myAddr+<<= alarm_cb.;
    **myAddr+<<= alarm_cb.;
    **myAddr+<<= alarm_cb.;
    ,,**myAddr+<<;
    ,;

唤醒读取的时候我是直接读

*(uint32_t volatile *)(myAddr+(0<<2))

地址的数据,但是读取到的数据是随机值,不是我写进去的,这个是什么原因

1725352810213967.png

1725352811217452.png

1725352811189541.png

我发的是乱码,这个是截图


有没有可能10K位置的RAM被你自己的程序用了,Standby唤醒之后会把Data段重新更新一下的会


那怎么能在ram里能找到一块空的地方放数据呢,是看那个.map文件么


可以吧...看map文件data段超30K没有,没有的话放在这个地址往后。这一块是堆。你用malloc之类也会把他更新掉也不能保证,最好就在ld文件里改一下,把你用到的这一块ram区域保留下来屏幕截图 2024-09-04 094315.png


您好,根据你的截图信息,你的程序应该是在EVT例程基础上改的。我这边用EVT例程测试了一下,写入数据与读出的数据都是没问题的。注意第一次执行读操作,由于还没开始写,读出的值都是随机的,执行完写流程后再读就是正常的写入的值。注意该过程保持供电的稳定,若有掉电会导致RAM数据的丢失。关于5楼用户提到的你也可以看一下,看一下该区域是否被占用。若方便可将你的工程发至我的邮箱(lzs@wch.cn),这边具体看一下。


只有登录才能回复,可以选择微信账号登录