当前位置: 首页 > news >正文

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

请添加图片描述

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

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

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

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

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

请添加图片描述

文章目录

  • 前言
  • 1 什么是Flash
  • 2 获取Flash参数
  • 3 修改Flash参数
  • 4 注意事项
  • 总结


前言

  大家好,又见面了,我是夜阑的狗🐶,本文是专栏【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指针是否为NULLif (!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 引导程序的讲解,如果觉得有帮助,请给文章点个赞吧,让更多的人看到。🌹 🌹 🌹

在这里插入图片描述

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

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

更多专栏订阅:

  • 😀 【LeetCode题解(持续更新中)】

  • 🥇 【恒玄BES】

  • 🌼 【鸿蒙系统】

  • 💎 【蓝牙协议栈】

  • 🎃 【死机分析】

  • 👑 【Python脚本笔记】

  • 🚝 【Java Web项目构建过程】

  • 💛 【微信小程序开发教程】

  • 【JavaScript随手笔记】

  • 🤩 【大数据学习笔记(华为云)】

  • 🦄 【程序错误解决方法(建议收藏)】

  • 🔐 【Git 学习笔记】

  • 🚀 【软件安装教程】



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

http://www.lryc.cn/news/401944.html

相关文章:

  • vue视频、图片自动轮播并伴随进度条
  • Android Studio环境安装指南
  • CentOS 7 初始化环境配置详细
  • 数据结构(双向链表)
  • 关于Kafka的17个问题
  • Redis 散列
  • ip地址错误无法上网怎么修复
  • 数据库管理的艺术(MySQL):DDL、DML、DQL、DCL及TPL的实战应用(上:数据定义与控制)
  • 成为CMake砖家(5): VSCode CMake Tools 插件基本使用
  • 【简洁明了】调节大模型的prompt的方法【带案例】
  • 【操作系统】文件管理——文件存储空间管理(个人笔记)
  • 微软GraphRAG +本地模型+Gradio 简单测试笔记
  • 数学建模-Topsis(优劣解距离法)
  • 嵌入式linux相机 转换模块
  • 【自学安全防御】二、防火墙NAT智能选路综合实验
  • 【Android】传给后端的Url地址被转码问题处理
  • 1.厦门面试
  • 设计模式使用场景实现示例及优缺点(行为型模式——状态模式)
  • 抖音短视频seo矩阵系统源码(搭建技术开发分享)
  • 基于 asp.net家庭财务管理系统设计与实现
  • allure_pytest:AttributeError: ‘str‘ object has no attribute ‘iter_parents‘
  • C语言 反转链表
  • MFC CRectTracker 类用法详解
  • 好玩的调度技术-场景编辑器
  • 提高自动化测试脚本编写效率 5大关键注意事项
  • 护眼落地灯哪个更护眼?2024年度最值得入手的5款护眼大路灯推荐
  • DP讨论——适配器、桥接、代理、装饰器模式通用理解
  • Apache AGE的MATCH子句
  • Netty Websocket
  • 用户注册业务逻辑、接口设计和实现、前端逻辑