如何在软件复位后保留指定RAM区域的数据

文章目录

    • 配置介绍
      • 启动文件
      • 链接文件
      • 主程序
    • 例程测试
      • 环境搭建
      • 功能描述
      • 测试现象
    • 注意事项
      • 1. 另一种实现RAM retention功能的方式
      • 2. 自定义RAM区域的地址问题
      • 3. bool类型变量使用RAM retention功能
      • 4. 不使用调试模式进行测试
    • 参考资料
    • 例程分享

配置介绍

下面从启动文件,链接文件以及主程序中的设置三方面介绍实现RAM retention的方法。

启动文件

如果对S32K144的启动过程不是很清楚,建议看一下胡工的这篇文章:

《浅谈嵌入式MCU软件开发之S32K1xx系列MCU启动过程及重映射代码到RAM中运行方法详解 》

首先,需要关闭SRAM的ECC初始化操作,因为该操作会修改SRAM数据。同时,关闭SRAM的ECC初始化的操作需要在软件复位后执行,如下红框是修改部分:

然后在主函数中判断一下变量的值是否为期望值,如果不是,就亮一段时间的红灯,同时对变量赋值,然后进行软件复位,然后再次判断变量的值是否为期望值,如果是,就一直亮绿灯。主要代码如下:

退出调试模式,重新上电,LED先亮几秒红灯,然后亮绿灯,且一直保持。重复几次,现象一样,符合预期。

注意事项

笔者在调试RAM retention功能时,总结了一些注意事项,分享给大家。

1. 另一种实现RAM retention功能的方式

想要使用RAM retention功能,不一定需要修改ld文件,也可以按如下方式进行:

  • 定义变量如下:
  • 主函数的实现方式如下:

image-20220206161504693

4. 不使用调试模式进行测试

在测试该例程时,发现重新上电进入debug模式时,自定义区域的变量已经变成了期望值(上电之后并未进行软件复位),和预期结果不符合。但是脱离调试模式,进行的测试结果又是符合预期的。建议读者测试RAM retention功能时离线测试,debug模式下会出现意料之外的情况。

参考资料

  1. Example S32K144 RAM Retention S32DS.R1 – NXP Community
  2. S32K1xxRM Rev12.1, 02/2020,官 已是最新的Rev14
  3. 老王的朋友圈截图

例程分享

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年1月4日
下一篇 2022年1月4日

相关推荐