日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

嵌入式軟件中如何利用內部flash存儲參數(shù)呢?

冬至子 ? 來源:嵌入式案例Show ? 作者:潛言 ? 2023-10-27 14:12 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

01

前言

嵌入式軟件中經(jīng)常要存儲一些非易失參數(shù),例如用戶設置、校準參數(shù)、設備運行參數(shù)等,通常情況下我們都會選擇存儲在EEPROM或者SPI-FLASH中。在削減成本考量的情況下,我們可以把存儲器省下來,參數(shù)存儲在內部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內的數(shù)據(jù),讀入到para_t結構體中

void ReadData(void)
{
  u32 address;
  u32 *pd;
  u16 i;


  address = PARA_START_ADDR;   
  pd = (u32 *)(&para_t);
  for(i=0; i< sizeof(para_t)/4; 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 *)(&para_t);
    for(i=0; i< sizeof(para_t)/4; i++)
    {
      FLASH_ProgramWord(address, *pd);
      address += 4;
      pd ++;
    }


    isRight = 1;
    address = PARA_START_ADDR;   
    pd = (u32 *)(&para_t);  
    for(i=0; i< sizeof(para_t)/4; i++)
    {
      if((*(__IO u32*) address) != *pd)
      {
        isRight = 0;
      }
      address += 4;
      pd ++;
    }
    if (isRight)
    {
      break;
    }
  }
}

05

讀寫調用邏輯

開機調用read函數(shù),將參數(shù)讀取到全局變量para_t中,后面在整個生命周期中都操作para_t。當para_t的內容被改動后,調用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ù)存儲在內部flash,好處是可以cost down,但是也要壞處,就是一旦全刷芯片的固件,所有的參數(shù)就會消失。但是一般的應用場合,這參數(shù)消失后觸發(fā)參數(shù)初始化,也沒有什么大問題。但是如果參數(shù)中存儲了一些非常困難才得到的校準參數(shù)、運行數(shù)據(jù)等,要慎用。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 存儲器
    +關注

    關注

    39

    文章

    7758

    瀏覽量

    172280
  • EEPROM
    +關注

    關注

    9

    文章

    1146

    瀏覽量

    86368
  • 嵌入式軟件
    +關注

    關注

    4

    文章

    252

    瀏覽量

    28179
  • STM32F103
    +關注

    關注

    34

    文章

    497

    瀏覽量

    68241
  • Flash存儲
    +關注

    關注

    0

    文章

    40

    瀏覽量

    8622
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    嵌入式參數(shù)存儲處理

    嵌入式參數(shù)存儲,你是怎么處理的?
    發(fā)表于 03-30 08:29

    嵌入式軟件如何利用內部flash存儲參數(shù)?

    01前言嵌入式軟件中經(jīng)常要存儲一些非易失參數(shù),例如用戶設置、校準參數(shù)、設備運行參數(shù)等,通常情況下
    發(fā)表于 11-25 08:52

    嵌入式平臺中參數(shù)的思考與設計相關資料下載

    嵌入式平臺中參數(shù)的思考與設計提筆有因存儲介質FLASH存儲設計數(shù)據(jù)類型設計參數(shù)歸類設計讀寫接口設
    發(fā)表于 12-23 06:05

    嵌入式系統(tǒng)Flash文件系統(tǒng)

    介紹嵌入式系統(tǒng)Flash文件系統(tǒng)。對 FFS需求,Flash存儲器特性,F(xiàn)FS要求和實現(xiàn)作了描述,并介紹幾種免費和商用的 FFS。
    發(fā)表于 04-07 09:40 ?16次下載

    嵌入式系統(tǒng)Flash 存儲管理

    以TRI 公司的基于NOR FlashFlash 管理軟件FMM 為例, 詳細介紹嵌入式系統(tǒng)如何根據(jù)
    發(fā)表于 05-15 13:21 ?15次下載

    基于虛擬存儲嵌入式存儲系統(tǒng)的設計方法

    基于虛擬存儲嵌入式存儲系統(tǒng)的設計方法   1、引言   嵌入式系統(tǒng)由嵌入式硬件和固化在硬件平臺中的
    發(fā)表于 11-05 16:10 ?1046次閱讀
    基于虛擬<b class='flag-5'>存儲</b>的<b class='flag-5'>嵌入式</b><b class='flag-5'>存儲</b>系統(tǒng)的設計方法

    基于FLASH嵌入式存儲系統(tǒng)設計

    1 引言 FLASH(閃速存儲器)作為一種安全、快速的存儲體,具有體積小、容量大、成本低、掉電數(shù)據(jù)不丟失等一系列優(yōu)點,已成為嵌入式系統(tǒng)數(shù)據(jù)
    發(fā)表于 09-24 09:51 ?1460次閱讀
    基于<b class='flag-5'>FLASH</b>的<b class='flag-5'>嵌入式</b><b class='flag-5'>存儲</b>系統(tǒng)設計

    嵌入式參數(shù)存儲的一種方式

    如果有幾個設置參數(shù)需要存儲Flash,我們一般會怎么存儲?將不同的
    發(fā)表于 04-20 09:57 ?956次閱讀

    嵌入式參數(shù)存儲訣竅分享

    分享到:標簽:嵌入式 工業(yè)4.0 如果有幾個設置參數(shù)需要存儲Flash,我們一般會怎么存儲
    發(fā)表于 10-13 20:24 ?0次下載
    <b class='flag-5'>嵌入式</b>的<b class='flag-5'>參數(shù)</b><b class='flag-5'>存儲</b>訣竅分享

    FLASH的特點和結構與基于FLASH介質嵌入式存儲的設計

    FLASH(閃速存儲器)作為一種安全、快速的存儲體,具有體積小、容量大、成本低、掉電數(shù)據(jù)不丟失等一系列優(yōu)點,已成為嵌入式系統(tǒng)數(shù)據(jù)和程序最主
    發(fā)表于 10-15 10:15 ?6次下載
    <b class='flag-5'>FLASH</b>的特點和結構與基于<b class='flag-5'>FLASH</b>介質<b class='flag-5'>嵌入式</b><b class='flag-5'>存儲</b>的設計

    嵌入式軟件利用內部flash存儲參數(shù)的方法

    01前言嵌入式軟件中經(jīng)常要存儲一些非易失參數(shù),例如用戶設置、校準參數(shù)、設備運行參數(shù)等,通常情況下
    發(fā)表于 11-16 18:21 ?18次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b><b class='flag-5'>中</b><b class='flag-5'>利用</b><b class='flag-5'>內部</b><b class='flag-5'>flash</b><b class='flag-5'>存儲</b><b class='flag-5'>參數(shù)</b>的方法

    嵌入式開發(fā),嵌入式硬件和軟件有什么區(qū)別?

    嵌入式指的是把軟件直接燒錄在硬件里,而不是安裝在外部存儲介質上,就像賦予機器人靈魂,從而方便人類操控。在嵌入式開發(fā),分為
    的頭像 發(fā)表于 07-18 18:11 ?5083次閱讀
    <b class='flag-5'>嵌入式</b>開發(fā)<b class='flag-5'>中</b>,<b class='flag-5'>嵌入式</b>硬件和<b class='flag-5'>軟件</b>有什么區(qū)別?

    如何讀取、修改嵌入式產(chǎn)品Flash內容?

    如何讀取、修改嵌入式產(chǎn)品Flash內容?
    的頭像 發(fā)表于 10-26 15:31 ?2390次閱讀
    如何讀取、修改<b class='flag-5'>嵌入式</b>產(chǎn)品<b class='flag-5'>Flash</b><b class='flag-5'>中</b>內容?

    嵌入式開發(fā),如何將Flash的程序轉移到RAM運行?

    嵌入式開發(fā),如何將Flash的程序轉移到RAM運行? Flash
    的頭像 發(fā)表于 10-29 16:23 ?5675次閱讀

    什么才是嵌入式Flash的邊界?

    什么才是嵌入式Flash的邊界? 嵌入式Flash是一種非易失性存儲器,常用于嵌入式電子設備
    的頭像 發(fā)表于 10-29 17:29 ?1341次閱讀
    唐海县| 文安县| 南阳市| 于田县| 松溪县| 陇南市| 叙永县| 大理市| 呈贡县| 浦东新区| 女性| 巩义市| 枞阳县| 常德市| 洛南县| 六安市| 咸宁市| 白玉县| 乳山市| 襄樊市| 新巴尔虎右旗| 潞西市| 乡城县| 喀什市| 温泉县| 河西区| 泽库县| 乃东县| 东莞市| 泗水县| 北宁市| 察哈| 汶川县| 乐平市| 高平市| 仲巴县| 松原市| 濮阳县| 韩城市| 张家口市| 同仁县|