色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

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

3天內不再提示

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

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

掃碼添加小助手

加入工程師交流群

01

前言

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

02

選擇參數存儲位置

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

圖片

因為stm32擦除flash的時候是以扇區(sector)為單位的,我們存儲參數也是選擇以扇區為單位,從扇區頭開始擦、讀、寫,這樣邏輯簡單。LD、MD型產品的扇區大小是1K,HD、CL型產品的扇區大小是2K。

一般將參數存儲在flash的尾部最后幾個扇區比較穩妥,我們只要確保程序固件(編譯出的燒錄bin文件)的大小不進入尾部的這幾個扇區就可以。

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

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

03

參數形式

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

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

04

參數存取

讀參數,將flash內的數據,讀入到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 ++;
  }
}

寫參數,將para_t的數據寫入到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函數,將參數讀取到全局變量para_t中,后面在整個生命周期中都操作para_t。當para_t的內容被改動后,調用save函數,將改動值保存。

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

06

優勢與缺點

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

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

    關注

    38

    文章

    7644

    瀏覽量

    166952
  • EEPROM
    +關注

    關注

    9

    文章

    1085

    瀏覽量

    83576
  • 嵌入式軟件
    +關注

    關注

    4

    文章

    245

    瀏覽量

    27259
  • STM32F103
    +關注

    關注

    33

    文章

    483

    瀏覽量

    65349
  • Flash存儲
    +關注

    關注

    0

    文章

    39

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    嵌入式參數存儲處理

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

    嵌入式軟件如何利用內部flash存儲參數

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

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

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

    嵌入式系統Flash文件系統

    介紹嵌入式系統Flash文件系統。對 FFS需求,Flash存儲器特性,FFS要求和實現作了描述,并介紹幾種免費和商用的 FFS。
    發表于 04-07 09:40 ?15次下載

    嵌入式系統Flash 存儲管理

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

    基于虛擬存儲嵌入式存儲系統的設計方法

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

    基于FLASH嵌入式存儲系統設計

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

    嵌入式參數存儲的一種方式

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

    嵌入式參數存儲訣竅分享

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

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

    FLASH(閃速存儲器)作為一種安全、快速的存儲體,具有體積小、容量大、成本低、掉電數據不丟失等一系列優點,已成為嵌入式系統數據和程序最主
    發表于 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存儲參數的方法

    01前言嵌入式軟件中經常要存儲一些非易失參數,例如用戶設置、校準參數、設備運行參數等,通常情況下
    發表于 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'>參數</b>的方法

    嵌入式開發嵌入式硬件和軟件有什么區別?

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

    如何讀取、修改嵌入式產品Flash內容?

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

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

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

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

    什么才是嵌入式Flash的邊界? 嵌入式Flash是一種非易失性存儲器,常用于嵌入式電子設備
    的頭像 發表于 10-29 17:29 ?757次閱讀
    主站蜘蛛池模板: 午夜婷婷精品午夜无码A片影院 | 久久亚洲精品中文字幕 | 久久精品黄AA片一区二区三区 | 亚洲免费国产在线日韩 | 亚洲视频在线观看 | 精品午夜国产福利观看 | 99热最新在线 | 男女床上黄色 | 欧美一区二区视频在线观看 | 国产AV精品久久久免费看 | 广东95后小情侣酒店自拍流出 | 日本高清在线一区二区三区 | 亚洲色图在线观看视频 | 国产白浆视频在线播放 | 久久久精品久久久久特色影视 | 暖暖视频免费高清在线观看 视频 | 被高跟鞋调教丨vk | 最新国自产拍天天更新 | 久久99AV无色码人妻蜜 | 欧美videosgratis杂交| 亚洲伊人精品综合在合线 | 美女也烦恼主题曲 | 国产亚洲综合视频 | 国模精品一区二区三区视频 | 亚洲国产精品嫩草影院久久 | 日韩人妻精品久久日 | 国产日韩欧美综合久久 | 午夜伦伦电影理论片大片 | 2019在秋霞理论 | 嘟嘟嘟在线视频免费观看高清中文 | 2017必看无码作品 | 失禁h啪肉尿出来高h | 青青草偷拍国产亚洲欧洲 | 99久久精品费精品国产 | 野花韩国高清完整版在线 | 国产香蕉九九久久精品免费 | 国内精品久久久久久久试看 | 桃花在线观看播放 | 99久久精品免费看国产一区二区三区 | 亚洲国产综合久久精品 | 国产三级多多影院 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品