【BES2500x系列 -- RTX5操作系统】深入探索CMSIS-RTOS RTX -- 配置篇 -- flash的使用 --(八)

请添加图片描述

  • 💌 所属专栏:【BES2500x系列】

  • 😀 作  者:我是夜阑的狗🐶

  • 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询!

  • 💖 欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信 😘 😘 😘

您的点赞、关注、收藏、评论,是对我最大的激励和支持!!!🤩 🤩 🤩

请添加图片描述


前言

  大家好,又见面了,我是夜阑的狗🐶,本文是专栏【BES2500x系列】专栏的第8篇文章;
  今天开始学习BES2500x系列的一天💖💖💖,开启新的征程,记录最美好的时刻🎉,每天进步一点点。
  专栏地址:【BES2500x系列】, 此专栏是我是夜阑的狗对BES2500x系列开发过程的总结,希望能够加深自己的印象,以及帮助到其他的小伙伴😉😉。
  如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。


<<【系列文章索引】>>

1 什么是Flash

  前面已经介绍了GPIO配置之后。接下来就来讲解一下flash的使用吧。话不多说,让我们原文再续,书接上回吧。

请添加图片描述

  在嵌入式系统中,Flash存储器是一种非易失性存储器,它能够在断电后保留数据,常用于存储固件、操作系统(OS)、配置信息和其他关键数据。在实时操作系统(RTOS)如Keil RTX中,Flash参数涉及到启动加载程序、分区管理、以及系统更新等方面,对系统的正常运行至关重要。

2 获取Flash参数

  获取Flash参数通常涉及到以下几个步骤:

  Step 1、只能获取到结构体 nvrecord_env_t 中包含的参数,如果需要获取新的参数,需要添加到结构体中
  Step 2、查阅芯片数据手册:首先,你需要查看目标MCU的数据手册,了解其Flash存储器的特性,如存储容量、页大小、擦除和编程时间、地址空间等。
  Step 3、检查固件配置:如果系统已经存在固件,你可以查找相关的配置文件或源代码,这些文件可能包含了关于Flash分区、地址映射和访问方式的信息。
  Step 4、使用工具链:某些开发环境,如 Keil MDK ,提供了工具来查看和分析已烧录的固件,如μVision调试器的 Memory ViewSystem Viewer
  Step 5、RTOS配置:在RTX中,Flash参数可能包含在RTOS配置文件中,如rtx_config.hrtos_config.h 。这些配置文件可能定义了启动地址、堆栈位置、系统区域等。

  • 代码
/**
 * 获取当前环境的nvrecord_env实例。
 * 
 * @param nvrecord_env 指向nvrecord_env_t指针的双指针,用于接收环境实例的地址。
 * @return 函数成功返回0,如果参数错误或环境实例未初始化则返回-1。
 */
int nv_record_env_get(struct nvrecord_env_t **nvrecord_env)
{
    // 检查传入的nvrecord_env指针是否为NULL
    if (!nvrecord_env)
        return -1;

    // 检查全局nvrecord_env_p指针是否已初始化
    if (!nvrecord_env_p)
        return -1;

    // 将全局nvrecord_env_p指针的值赋给传入的指针变量
    *nvrecord_env = nvrecord_env_p;

    return 0;
}
  • 参数/函数讲解
序号参数/函数说明
1nv_record_env_get获取 Flash 中的环境参数

3 修改Flash参数

  修改Flash参数通常是为了适应不同的固件布局或优化系统性能:

序号功能说明
1调整分区根据应用程序的需求,可能需要重新分配Flash分区,比如增加或减少存储用户数据的空间,或为新的固件更新区域分配空间。
2调整启动配置可能需要更改启动地址,特别是当使用不同版本的RTOS或固件时。
3优化访问速度根据MCU的特性和应用需求,可能需要调整Flash访问参数以提高读写速度。
4修改固件更新机制如果系统支持固件更新,需要确保更新过程的安全性和可靠性,可能需要调整擦除和编程的参数。

  修改参数通常在源代码级别完成,涉及修改配置文件、初始化函数或链接脚本。确保修改后的参数符合硬件限制并经过充分测试。

  • 代码
/**
 * 设置环境参数
 * 
 * 本函数用于设置nvrecord_env结构体中的环境参数。在执行设置之前,会检查传入的环境结构体指针和
 * nvrecord_env_p指针是否为空,如果任一为空,则不进行设置操作并返回错误码-1。成功执行设置操作后,
 * 会更新运行时的用户数据。
 * 
 * @param nvrecord_env 指向nvrecord_env_t结构体的指针,包含了需要设置的环境参数。
 * @return 函数执行成功返回0,失败返回-1。
 */
int nv_record_env_set(struct nvrecord_env_t *nvrecord_env)
{
    // 检查传入的环境参数指针是否为空
    if (!nvrecord_env)
        return -1;

    // 检查全局环境参数指针是否为空
    if (!nvrecord_env_p)
        return -1;

    // 更新运行时的用户数据
    nv_record_update_runtime_userdata();
    return 0;
}

  本函数用于设置 nvrecord_env 结构体中的环境参数。在执行设置之前,会检查传入的环境结构体指针和 nvrecord_env_p 指针是否为空,如果任一为空,则不进行设置操作并返回错误码 -1 。成功执行设置操作后,

  • 参数/函数讲解
序号参数/函数说明
1nv_record_update_runtime_userdata更新运行时的用户数据

  只能修改结构体 nvrecord_env_t 中的参数,如果需要修改其他参数,需要在结构体中添加新的参数

  • 代码
/**
 * @struct nvrecord_env_t
 * 定义了一个包含多种环境配置信息的结构体。
 */
struct nvrecord_env_t
{	
	/**< 媒体语言配置 */
    struct media_language_t media_language; 
	......
	/**< IBBR模式配置 */
    struct ibrt_mode_t ibrt_mode; 
    /**< 工厂测试仪状态配置 */
    struct factory_tester_status_t factory_tester_status; 
	......
	/**< 人工智能管理器信息 */
    AI_MANAGER_INFO_T   aiManagerInfo; 
};
  • 参数/函数讲解
序号参数/函数说明
1nvrecord_env_t定义了一个包含多种环境配置信息的结构体

4 注意事项

  在处理Flash参数时,务必遵循以下几点:

  • 备份原始数据:在修改参数前,确保有备份,以防意外导致数据丢失。
  • 遵循硬件限制:不要超过Flash的物理限制,如最大擦除次数、最小编程单位等。
  • 验证兼容性:修改后,检查新的参数是否与RTOS、编译器和调试工具兼容。
  • 测试与验证:每次修改后,都需要通过完整的测试套件来验证系统行为,确保所有功能正常工作。
  • 安全考虑:在固件更新过程中,确保有适当的错误恢复机制,防止系统因更新失败而无法启动。

  理解和正确操作Flash参数对于RTX系统来说是至关重要的,它直接影响到系统的稳定性和可扩展性。确保在修改参数时遵循最佳实践,以确保系统的可靠运行。

<<【系列文章索引】>>

请添加图片描述


总结

  感谢观看,这里就是 boot loader 引导程序的讲解,如果觉得有帮助,请给文章点个赞吧,让更多的人看到。🌹 🌹 🌹

在这里插入图片描述

  也欢迎你,关注我。👍 👍 👍

  原创不易,还希望各位大佬支持一下,你们的点赞、收藏和留言对我真的很重要!!!💕 💕 💕 最后,本文仍有许多不足之处,欢迎各位认真读完文章的小伙伴们随时私信交流、批评指正!下期再见。🎉

更多专栏订阅:



订阅更多,你们将会看到更多的优质内容!!

  • 15
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是夜阑的狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值