日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

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

01

前言


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

02

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


stm32的flash地址起始于0x08000000,結(jié)束地址是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ù)封裝成一個結(jié)構(gòu)體,方便讀存。注意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結(jié)構(gòu)體中

void ReadData(void){ u32 address; u32 *pd; u16 i;
address = PARA_START_ADDR; pd = (u32 *)(
本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉