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

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

冬至子 ? 來(lái)源:嵌入式案例Show ? 作者:潛言 ? 2023-10-27 14:12 ? 次閱讀

01

前言

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

02

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

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

圖片

因?yàn)閟tm32擦除flash的時(shí)候是以扇區(qū)(sector)為單位的,我們存儲(chǔ)參數(shù)也是選擇以扇區(qū)為單位,從扇區(qū)頭開(kāi)始擦、讀、寫(xiě),這樣邏輯簡(jiǎn)單。LD、MD型產(chǎn)品的扇區(qū)大小是1K,HD、CL型產(chǎn)品的扇區(qū)大小是2K。

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

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

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

03

參數(shù)形式

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

#define PARA_FLAG 0x1000 //參數(shù)標(biāo)記
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 *)(&para_t);
  for(i=0; i< sizeof(para_t)/4; i++)
  {
    *pd = *((u32 *) address);
    address += 4;
    pd ++;
  }
}

寫(xiě)參數(shù),將para_t的數(shù)據(jù)寫(xiě)入到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

讀寫(xiě)調(diào)用邏輯

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

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

06

優(yōu)勢(shì)與缺點(diǎn)

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

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

    關(guān)注

    38

    文章

    7484

    瀏覽量

    163763
  • EEPROM
    +關(guān)注

    關(guān)注

    9

    文章

    1019

    瀏覽量

    81560
  • 嵌入式軟件
    +關(guān)注

    關(guān)注

    4

    文章

    240

    瀏覽量

    26641
  • STM32F103
    +關(guān)注

    關(guān)注

    33

    文章

    477

    瀏覽量

    63600
  • Flash存儲(chǔ)
    +關(guān)注

    關(guān)注

    0

    文章

    38

    瀏覽量

    8288
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

    嵌入式軟件如何利用內(nèi)部flash存儲(chǔ)參數(shù)

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

    嵌入式平臺(tái)中參數(shù)的思考與設(shè)計(jì)相關(guān)資料下載

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

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

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

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

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

    基于虛擬存儲(chǔ)嵌入式存儲(chǔ)系統(tǒng)的設(shè)計(jì)方法

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

    基于FLASH嵌入式存儲(chǔ)系統(tǒng)設(shè)計(jì)

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

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

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

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

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

    FLASH的特點(diǎn)和結(jié)構(gòu)與基于FLASH介質(zhì)嵌入式存儲(chǔ)的設(shè)計(jì)

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

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

    01前言嵌入式軟件中經(jīng)常要存儲(chǔ)一些非易失參數(shù),例如用戶(hù)設(shè)置、校準(zhǔn)參數(shù)、設(shè)備運(yùn)行參數(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'>內(nèi)部</b><b class='flag-5'>flash</b><b class='flag-5'>存儲(chǔ)</b><b class='flag-5'>參數(shù)</b>的方法

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

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

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

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

    嵌入式開(kāi)發(fā),如何將Flash的程序轉(zhuǎn)移到RAM運(yùn)行?

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

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

    什么才是嵌入式Flash的邊界? 嵌入式Flash是一種非易失性存儲(chǔ)器,常用于嵌入式電子設(shè)備
    的頭像 發(fā)表于 10-29 17:29 ?507次閱讀
    主站蜘蛛池模板: 野花韩国在线观看| 男生射女生| 久久香蕉国产免费天天| 久久这里只有是精品23| 绿巨人www在线观看| 奇米网一区二区三区在线观看| 青草在线观看视频| 天天久久狠狠色综合| 亚洲国产精品自在自线观看 | 日韩高清特级特黄毛片| 三级黄.色| 亚洲成片在线看| 中文字幕99香蕉在线| HEYZO精品无码一区二区三区| 动漫美女的禁| 国模沟沟一区二区三区| 老妇高潮潮喷到猛进猛出| 欧洲最大无人区免费高清完整版| 忘忧草研究院一二三| 亚洲熟女片嫩草影院| 99re8热视频这在线视频| 国产成人小视频在线观看| 黄色天堂在线| 欧美性爱 先锋影音| 小伙无套内射老女人| 2020年国产理论| 古代荡女丫鬟高H辣文纯肉| 极品少妇高潮啪啪无码吴梦| 色色色999| 暖暖视频中国在线观看免费韩国 | 日本久久久免费高清| 亚洲精品久久久久中文字幕二区 | 在线观看免费av网| yellow片高清视频免费看| 好大好爽CAO死我了BL| 暖暖视频免费观看视频| 午夜国产精品视频| 18禁无遮遮挡羞漫画免费阅读 | 国产色精品久久人妻无码| 美女脱光app| 翁熄性放纵交换01|