将数据存储在RAM中

本文介绍了单片机启动过程及如何根据不同启动方式保存数据。包括冷启动与热启动的区别,以及如何选择合适的存储方式(如EEPROM、Flash或RAM)。特别强调了使用keil时如何设置特定RAM区域不被初始化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在一些应用场景下,需要在单片机复位后保存一些数据 。在实现这一目标之前,需要对单片机的启动过程有一个粗略的了解。

1.    单片机启动方式

1.1    冷启动

    单片机的冷启动指的是单片机的上电启动,即单片机在掉电状态下的上电启动。此时单片机RAM中的数据是随机的,可能是0x00或是0xFF,具体与芯片特性有关。

1.2热启动

    单片机的热启动指的是单片机在上电状态下,由于看门狗复位、外部复位电路复位等硬件复位,或是软件复位等原因导致的单片机重新启动。热启动时,RAM区的数据是可以被保留的。

2.    数据存储方式

2.1    存储到非易失存储区域中

    如果需要在冷启动时获取前次存储的数据,那么这个数据只能被存储在EEPROM、Flash等非易失存储介质中。如果需要存储在内部flash中,需要对flash区域的分配有一个充分的了解,避免覆盖掉其他内容。

2.2    存储在RAM中

    由于写flash或是EEPROM时存在的读写速度慢、扇区读写寿命有限等问题,在仅仅需要在热启动场景下保存的数据,就可以存储在RAM中。

    需要将数据存储在RAM中时,需要保证启动时RAM区不被重新初始化。如果使用keil,keil会为每款CPU提供一个startup.s的汇编启动代码,用户可以修改其启动过程或是通过如下设置,使指定RAM区域不被初始化:


    指定某一RAM区No Init后,还需要利用__attribute__将要存储的变量指定存储在这一区域:

static uint32_t m_magic_code  __attribute__( ( at( 0x20003FF0), zero_init) );

    这时候查看.map可以看到以下字样:


    下次上电,直接读取该值即可。

    这里需要注意的是,凡是存储在no init区域的数据,需要保证其在使用前都是确认过其有效性的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值