💌 所属专栏:【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 View
或 System Viewer
。
Step 5、RTOS配置:在RTX中,Flash参数可能包含在RTOS配置文件中,如rtx_config.h
或 rtos_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;
}
- 参数/函数讲解
序号 | 参数/函数 | 说明 |
---|---|---|
1 | nv_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 。成功执行设置操作后,
- 参数/函数讲解
序号 | 参数/函数 | 说明 |
---|---|---|
1 | nv_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;
};
- 参数/函数讲解
序号 | 参数/函数 | 说明 |
---|---|---|
1 | nvrecord_env_t | 定义了一个包含多种环境配置信息的结构体 |
4 注意事项
在处理Flash参数时,务必遵循以下几点:
- 备份原始数据:在修改参数前,确保有备份,以防意外导致数据丢失。
- 遵循硬件限制:不要超过Flash的物理限制,如最大擦除次数、最小编程单位等。
- 验证兼容性:修改后,检查新的参数是否与RTOS、编译器和调试工具兼容。
- 测试与验证:每次修改后,都需要通过完整的测试套件来验证系统行为,确保所有功能正常工作。
- 安全考虑:在固件更新过程中,确保有适当的错误恢复机制,防止系统因更新失败而无法启动。
理解和正确操作Flash参数对于RTX系统来说是至关重要的,它直接影响到系统的稳定性和可扩展性。确保在修改参数时遵循最佳实践,以确保系统的可靠运行。
总结
感谢观看,这里就是 boot loader 引导程序的讲解,如果觉得有帮助,请给文章点个赞吧,让更多的人看到。🌹 🌹 🌹
也欢迎你,关注我。👍 👍 👍
原创不易,还希望各位大佬支持一下,你们的点赞、收藏和留言对我真的很重要!!!💕 💕 💕 最后,本文仍有许多不足之处,欢迎各位认真读完文章的小伙伴们随时私信交流、批评指正!下期再见。🎉
更多专栏订阅:
😀 【LeetCode题解(持续更新中)】
🥇 【恒玄BES】
🌼 【鸿蒙系统】
💎 【蓝牙协议栈】
🎃 【死机分析】
👑 【Python脚本笔记】
🚝 【Java Web项目构建过程】
💛 【微信小程序开发教程】
⚽ 【JavaScript随手笔记】
🤩 【大数据学习笔记(华为云)】
🦄 【程序错误解决方法(建议收藏)】
🔐 【Git 学习笔记】
🚀 【软件安装教程】
订阅更多,你们将会看到更多的优质内容!!