當前位置:首頁 > 公眾號精選 > 嵌入式大雜燴
[導讀]點擊上方藍字關注我哦~ 01 前言 嵌入式軟件中經(jīng)常要存儲一些非易失參數(shù),例如用戶設置、校準參數(shù)、設備運行參數(shù)等,通常情況下我們都會選擇存儲在EEPROM或者SPI-FLASH中。在削減成本考量的情況下,我們可以把存儲器省下來,參數(shù)存儲在內(nèi)部flash中,畢竟就算


01

前言


嵌入式軟件中經(jīng)常要存儲一些非易失參數(shù),例如用戶設置、校準參數(shù)、設備運行參數(shù)等,通常情況下我們都會選擇存儲在EEPROM或者SPI-FLASH中。在削減成本考量的情況下,我們可以把存儲器省下來,參數(shù)存儲在內(nèi)部flash中,畢竟就算每片減少一塊錢,量大后還是非??捎^的。

02

選擇參數(shù)存儲位置


stm32的flash地址起始于0x08000000,結束地址是0x08000000加上芯片實際的flash大小,不同的芯片flash大小不同。我們可以在KEIL項目工程的Target也看到ROM的起始地址和大小,前提是Device頁要選對正在使用的芯片規(guī)型號。


因為stm32擦除flash的時候是以扇區(qū)(sector)為單位的,我們存儲參數(shù)也是選擇以扇區(qū)為單位,從扇區(qū)頭開始擦、讀、寫,這樣邏輯簡單。LD、MD型產(chǎn)品的扇區(qū)大小是1K,HD、CL型產(chǎn)品的扇區(qū)大小是2K。一般將參數(shù)存儲在flash的尾部最后幾個扇區(qū)比較穩(wěn)妥,我們只要確保程序固件(編譯出的燒錄bin文件)的大小不進入尾部的這幾個扇區(qū)就可以。

以stm32f103cbt6為例,flash起始地址為0x8000000,大小是0x20000。一個Sector的大小是1K。那么定義參數(shù)位置如下:

#define PARA_START_ADDR ((u32)0x0801fc00)#define PARA_PAGE_SIZE ((u16)0x400)

03

參數(shù)形式


將參數(shù)封裝成一個結構體,方便讀存。注意flash存儲時會自動做4字節(jié)對齊,所有盡量保證PARASAVED_T的大小是4的整數(shù)倍,避免存入讀取后數(shù)據(jù)錯位的麻煩。

#define PARA_FLAG 0x1000 //參數(shù)標記typedef struct{ u8 para[64]; u32 flag;}PARASAVED_T;PARASAVED_T para_t;

04

參數(shù)存取


讀參數(shù),將flash內(nèi)的數(shù)據(jù),讀入到para_t結構體中

void ReadData(void){ u32 address; u32 *pd; u16 i;  address = PARA_START_ADDR;  pd = (u32 *)(?_t); for(i=0; i { *pd = *((u32 *) address); address += 4; pd ++; }}

寫參數(shù),將para_t的數(shù)據(jù)寫入到flash中


void SaveData(void){ u16 i; u8 writeTimes; u32 address; u8 isRight; u32 * pd;  FLASH_Unlock(); FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);  writeTimes = MAX_FLASH_WRITE_TIMES;  while(writeTimes--) { FLASH_ErasePage(PARA_START_ADDR); address = PARA_START_ADDR;  pd = (u32 *)(?_t); for(i=0; i { FLASH_ProgramWord(address, *pd); address += 4; pd ++; }  isRight = 1; address = PARA_START_ADDR;  pd = (u32 *)(?_t);  for(i=0; i { if((*(__IO u32*) address) != *pd) { isRight = 0; } address += 4; pd ++; } if (isRight) { break; } }}


05

讀寫調(diào)用邏輯


開機調(diào)用read函數(shù),將參數(shù)讀取到全局變量para_t中,后面在整個生命周期中都操作para_t。當para_t的內(nèi)容被改動后,調(diào)用save函數(shù),將改動值保存。

結構體中的flag的作用,是做為一個全部參數(shù)的存儲標記,當開機讀到它是全ff時,就是參數(shù)全空的初始狀態(tài),此時可以做初始化參數(shù)的操作,將一些默認值寫入到flash中。當開機讀到flag非全ff,但是與define PARA_FLAG不同時,就初始化參數(shù)或者參數(shù)中的一部分。這個作用是當我們需要改變某些默認參數(shù)值,并希望他在升級后生效時,可以修改define值,來觸發(fā)參數(shù)初始化。

06

優(yōu)勢與缺點

把參數(shù)存儲在內(nèi)部flash,好處是可以cost down,但是也要壞處,就是一旦全刷芯片的固件,所有的參數(shù)就會消失。但是一般的應用場合,這參數(shù)消失后觸發(fā)參數(shù)初始化,也沒有什么大問題。但是如果參數(shù)中存儲了一些非常困難才得到的校準參數(shù)、運行數(shù)據(jù)等,要慎用。

猜你喜歡:

C語言、嵌入式重點知識:回調(diào)函數(shù)

C語言、嵌入式位操作精華技巧大匯總

【Linux筆記】設備樹實例分析

【Linux筆記】通俗易懂的Linux驅(qū)動基礎

【Linux筆記】pc機_開發(fā)板_ubuntu互ping實驗

學習STM32的一些經(jīng)驗分享

基于LiteOS的智慧農(nóng)業(yè)案例實驗分享

從單片機工程師的角度看嵌入式Linux

應屆生求職的那些事

基于GUILite的簡易萬年歷

后臺回復:加群。添加ZhengN微信,加入交流群

免責聲明:本文內(nèi)容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉