做曖網(wǎng)站seo排名優(yōu)化教學(xué)
💌 所屬專欄:【BES2500x系列】
😀 作??者:我是夜闌的狗🐶
🚀 個(gè)人簡(jiǎn)介:一個(gè)正在努力學(xué)技術(shù)的CV工程師,專注基礎(chǔ)和實(shí)戰(zhàn)分享 ,歡迎咨詢!
💖 歡迎大家:這里是CSDN,我總結(jié)知識(shí)的地方,喜歡的話請(qǐng)三連,有問(wèn)題請(qǐng)私信 😘 😘 😘
您的點(diǎn)贊、關(guān)注、收藏、評(píng)論,是對(duì)我最大的激勵(lì)和支持!!!🤩 🤩 🤩
文章目錄
- 前言
- 1 什么是Flash
- 2 獲取Flash參數(shù)
- 3 修改Flash參數(shù)
- 4 注意事項(xiàng)
- 總結(jié)
前言
??大家好,又見(jiàn)面了,我是夜闌的狗🐶,本文是專欄【BES2500x系列】專欄的第8篇文章;
??今天開(kāi)始學(xué)習(xí)BES2500x系列的一天💖💖💖,開(kāi)啟新的征程,記錄最美好的時(shí)刻🎉,每天進(jìn)步一點(diǎn)點(diǎn)。
??專欄地址:【BES2500x系列】, 此專欄是我是夜闌的狗對(duì)BES2500x系列開(kāi)發(fā)過(guò)程的總結(jié),希望能夠加深自己的印象,以及幫助到其他的小伙伴😉😉。
??如果文章有什么需要改進(jìn)的地方還請(qǐng)大佬不吝賜教👏👏。
1 什么是Flash
??前面已經(jīng)介紹了GPIO配置之后。接下來(lái)就來(lái)講解一下flash的使用吧。話不多說(shuō),讓我們?cè)脑倮m(xù),書(shū)接上回吧。
??在嵌入式系統(tǒng)中,Flash存儲(chǔ)器是一種非易失性存儲(chǔ)器,它能夠在斷電后保留數(shù)據(jù),常用于存儲(chǔ)固件、操作系統(tǒng)(OS)、配置信息和其他關(guān)鍵數(shù)據(jù)。在實(shí)時(shí)操作系統(tǒng)(RTOS)如Keil RTX中,Flash參數(shù)涉及到啟動(dòng)加載程序、分區(qū)管理、以及系統(tǒng)更新等方面,對(duì)系統(tǒng)的正常運(yùn)行至關(guān)重要。
2 獲取Flash參數(shù)
??獲取Flash參數(shù)通常涉及到以下幾個(gè)步驟:
??Step 1、只能獲取到結(jié)構(gòu)體 nvrecord_env_t
中包含的參數(shù),如果需要獲取新的參數(shù),需要添加到結(jié)構(gòu)體中
??Step 2、查閱芯片數(shù)據(jù)手冊(cè):首先,你需要查看目標(biāo)MCU的數(shù)據(jù)手冊(cè),了解其Flash存儲(chǔ)器的特性,如存儲(chǔ)容量、頁(yè)大小、擦除和編程時(shí)間、地址空間等。
??Step 3、檢查固件配置:如果系統(tǒng)已經(jīng)存在固件,你可以查找相關(guān)的配置文件或源代碼,這些文件可能包含了關(guān)于Flash分區(qū)、地址映射和訪問(wèn)方式的信息。
??Step 4、使用工具鏈:某些開(kāi)發(fā)環(huán)境,如 Keil MDK
,提供了工具來(lái)查看和分析已燒錄的固件,如μVision調(diào)試器的 Memory View
或 System Viewer
。
??Step 5、RTOS配置:在RTX中,Flash參數(shù)可能包含在RTOS配置文件中,如rtx_config.h
或 rtos_config.h
。這些配置文件可能定義了啟動(dòng)地址、堆棧位置、系統(tǒng)區(qū)域等。
- 代碼
/*** 獲取當(dāng)前環(huán)境的nvrecord_env實(shí)例。* * @param nvrecord_env 指向nvrecord_env_t指針的雙指針,用于接收環(huán)境實(shí)例的地址。* @return 函數(shù)成功返回0,如果參數(shù)錯(cuò)誤或環(huán)境實(shí)例未初始化則返回-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;
}
- 參數(shù)/函數(shù)講解
序號(hào) | 參數(shù)/函數(shù) | 說(shuō)明 |
---|---|---|
1 | nv_record_env_get | 獲取 Flash 中的環(huán)境參數(shù) |
3 修改Flash參數(shù)
??修改Flash參數(shù)通常是為了適應(yīng)不同的固件布局或優(yōu)化系統(tǒng)性能:
序號(hào) | 功能 | 說(shuō)明 |
---|---|---|
1 | 調(diào)整分區(qū) | 根據(jù)應(yīng)用程序的需求,可能需要重新分配Flash分區(qū),比如增加或減少存儲(chǔ)用戶數(shù)據(jù)的空間,或?yàn)樾碌墓碳聟^(qū)域分配空間。 |
2 | 調(diào)整啟動(dòng)配置 | 可能需要更改啟動(dòng)地址,特別是當(dāng)使用不同版本的RTOS或固件時(shí)。 |
3 | 優(yōu)化訪問(wèn)速度 | 根據(jù)MCU的特性和應(yīng)用需求,可能需要調(diào)整Flash訪問(wèn)參數(shù)以提高讀寫(xiě)速度。 |
4 | 修改固件更新機(jī)制 | 如果系統(tǒng)支持固件更新,需要確保更新過(guò)程的安全性和可靠性,可能需要調(diào)整擦除和編程的參數(shù)。 |
??修改參數(shù)通常在源代碼級(jí)別完成,涉及修改配置文件、初始化函數(shù)或鏈接腳本。確保修改后的參數(shù)符合硬件限制并經(jīng)過(guò)充分測(cè)試。
- 代碼
/*** 設(shè)置環(huán)境參數(shù)* * 本函數(shù)用于設(shè)置nvrecord_env結(jié)構(gòu)體中的環(huán)境參數(shù)。在執(zhí)行設(shè)置之前,會(huì)檢查傳入的環(huán)境結(jié)構(gòu)體指針和* nvrecord_env_p指針是否為空,如果任一為空,則不進(jìn)行設(shè)置操作并返回錯(cuò)誤碼-1。成功執(zhí)行設(shè)置操作后,* 會(huì)更新運(yùn)行時(shí)的用戶數(shù)據(jù)。* * @param nvrecord_env 指向nvrecord_env_t結(jié)構(gòu)體的指針,包含了需要設(shè)置的環(huán)境參數(shù)。* @return 函數(shù)執(zhí)行成功返回0,失敗返回-1。*/
int nv_record_env_set(struct nvrecord_env_t *nvrecord_env)
{// 檢查傳入的環(huán)境參數(shù)指針是否為空if (!nvrecord_env)return -1;// 檢查全局環(huán)境參數(shù)指針是否為空if (!nvrecord_env_p)return -1;// 更新運(yùn)行時(shí)的用戶數(shù)據(jù)nv_record_update_runtime_userdata();return 0;
}
??本函數(shù)用于設(shè)置 nvrecord_env
結(jié)構(gòu)體中的環(huán)境參數(shù)。在執(zhí)行設(shè)置之前,會(huì)檢查傳入的環(huán)境結(jié)構(gòu)體指針和 nvrecord_env_p
指針是否為空,如果任一為空,則不進(jìn)行設(shè)置操作并返回錯(cuò)誤碼 -1 。成功執(zhí)行設(shè)置操作后,
- 參數(shù)/函數(shù)講解
序號(hào) | 參數(shù)/函數(shù) | 說(shuō)明 |
---|---|---|
1 | nv_record_update_runtime_userdata | 更新運(yùn)行時(shí)的用戶數(shù)據(jù) |
??只能修改結(jié)構(gòu)體 nvrecord_env_t
中的參數(shù),如果需要修改其他參數(shù),需要在結(jié)構(gòu)體中添加新的參數(shù)
- 代碼
/*** @struct nvrecord_env_t* 定義了一個(gè)包含多種環(huán)境配置信息的結(jié)構(gòu)體。*/
struct nvrecord_env_t
{ /**< 媒體語(yǔ)言配置 */struct media_language_t media_language; ....../**< IBBR模式配置 */struct ibrt_mode_t ibrt_mode; /**< 工廠測(cè)試儀狀態(tài)配置 */struct factory_tester_status_t factory_tester_status; ....../**< 人工智能管理器信息 */AI_MANAGER_INFO_T aiManagerInfo;
};
- 參數(shù)/函數(shù)講解
序號(hào) | 參數(shù)/函數(shù) | 說(shuō)明 |
---|---|---|
1 | nvrecord_env_t | 定義了一個(gè)包含多種環(huán)境配置信息的結(jié)構(gòu)體 |
4 注意事項(xiàng)
??在處理Flash參數(shù)時(shí),務(wù)必遵循以下幾點(diǎn):
- 備份原始數(shù)據(jù):在修改參數(shù)前,確保有備份,以防意外導(dǎo)致數(shù)據(jù)丟失。
- 遵循硬件限制:不要超過(guò)Flash的物理限制,如最大擦除次數(shù)、最小編程單位等。
- 驗(yàn)證兼容性:修改后,檢查新的參數(shù)是否與RTOS、編譯器和調(diào)試工具兼容。
- 測(cè)試與驗(yàn)證:每次修改后,都需要通過(guò)完整的測(cè)試套件來(lái)驗(yàn)證系統(tǒng)行為,確保所有功能正常工作。
- 安全考慮:在固件更新過(guò)程中,確保有適當(dāng)?shù)腻e(cuò)誤恢復(fù)機(jī)制,防止系統(tǒng)因更新失敗而無(wú)法啟動(dòng)。
??理解和正確操作Flash參數(shù)對(duì)于RTX系統(tǒng)來(lái)說(shuō)是至關(guān)重要的,它直接影響到系統(tǒng)的穩(wěn)定性和可擴(kuò)展性。確保在修改參數(shù)時(shí)遵循最佳實(shí)踐,以確保系統(tǒng)的可靠運(yùn)行。
總結(jié)
??感謝觀看,這里就是 boot loader 引導(dǎo)程序的講解,如果覺(jué)得有幫助,請(qǐng)給文章點(diǎn)個(gè)贊吧,讓更多的人看到。🌹 🌹 🌹
??也歡迎你,關(guān)注我。👍 👍 👍
??原創(chuàng)不易,還希望各位大佬支持一下,你們的點(diǎn)贊、收藏和留言對(duì)我真的很重要!!!💕 💕 💕 最后,本文仍有許多不足之處,歡迎各位認(rèn)真讀完文章的小伙伴們隨時(shí)私信交流、批評(píng)指正!下期再見(jiàn)。🎉
更多專欄訂閱:
😀 【LeetCode題解(持續(xù)更新中)】
🥇 【恒玄BES】
🌼 【鴻蒙系統(tǒng)】
💎 【藍(lán)牙協(xié)議?!?/font>
🎃 【死機(jī)分析】
👑 【Python腳本筆記】
🚝 【Java Web項(xiàng)目構(gòu)建過(guò)程】
💛 【微信小程序開(kāi)發(fā)教程】
? 【JavaScript隨手筆記】
🤩 【大數(shù)據(jù)學(xué)習(xí)筆記(華為云)】
🦄 【程序錯(cuò)誤解決方法(建議收藏)】
🔐 【Git 學(xué)習(xí)筆記】
🚀 【軟件安裝教程】
訂閱更多,你們將會(huì)看到更多的優(yōu)質(zhì)內(nèi)容!!