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

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

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

FLASH編程與改變程序(代碼) 存儲(chǔ)地址的問題

黃工的嵌入式技術(shù)圈 ? 來源:黃工的嵌入式技術(shù)圈 ? 2020-03-20 14:07 ? 次閱讀

寫在前面 Ⅰ

對(duì)于在STM32F2或F4開發(fā)的朋友而言,有部分?jǐn)?shù)據(jù)需要在內(nèi)部FLASH編程,程序(代碼)又比較大,資源空間又有限的情況下,代碼默認(rèn)的存儲(chǔ)地址就可能需要搬移。

為什么是F2或F4系列的芯片呢?因?yàn)镸ain memory扇區(qū)(或塊)分布不均勻,看下面FLASH模塊構(gòu)成:

當(dāng)然,像STM32F0、F1它們的FLASH數(shù)據(jù)塊分布均勻,這類芯片就沒必要改變程序存儲(chǔ)地址。

為什么要改變代碼存儲(chǔ)地址 Ⅱ

假如芯片的FALSH大小為512KB,RAM大小為128KB。而代碼大小為400KB(甚至更大),又需要在內(nèi)部FLASH編程,那么代碼的存儲(chǔ)地址就不能從默認(rèn)的起始地址(Sector 0)開始存儲(chǔ)。

原因很簡單:最后一扇區(qū)有代碼,不能被用戶編程。

還有一種原因:用戶RAM大小有限(假如只剩15K未用,RAM用于緩存FLASH數(shù)據(jù)),而用戶編程FLASH的數(shù)據(jù)有20K,這樣就需要分多塊(扇區(qū))來操作,這樣就需要將小的扇區(qū)拿出來給用戶編程(即前面16K大小的扇區(qū))。

上面舉例的總結(jié)就是:需要將代碼的存儲(chǔ)起始地址從Sector 0搬移至Sector 3或者Sector 4,把前面小扇區(qū)(Sector 1 --- 3)用于數(shù)據(jù)編程。(注意:Sector 0扇區(qū)存儲(chǔ)啟動(dòng)的部分代碼,不能用于編程)。

改變代碼存儲(chǔ)地址的方法 Ⅲ

代碼存儲(chǔ)的地址是由編譯器決定的,因此這里簡單講述一下Keil和IAR如何配置改變代碼存儲(chǔ)起始地址。下面以起始地址從0x08010000 (Sector 4)舉例說明。

1.Keil配置方法

打開工程目標(biāo)選項(xiàng):Project -> Options for Target -> Target。修改目標(biāo)ROM起始地址。如下圖:

2.IAR配置方法

配置步驟分如下幾步:

A.進(jìn)入配置界面:Pooject -> Options -> Linker -> Config;

B.勾選上“Override default”;

C.點(diǎn)擊“Edit”,修改ROM起始地址為;

D.點(diǎn)擊“Save”保存(第一次修改后,xxx.icf文件名和路徑都選擇默認(rèn))。

具體如下圖:

驗(yàn)證代碼存儲(chǔ)地址 Ⅳ

對(duì)于STM32芯片來說,可以直接使用STM32 ST-LINK Utility工具讀取FLASH數(shù)據(jù)驗(yàn)證代碼是否存儲(chǔ)在相應(yīng)地址位置,其他芯片也可以使用對(duì)應(yīng)可以讀取FLASH數(shù)據(jù)的工具來驗(yàn)證。如下圖:

從上圖可以看見,代碼是從0x08010000 (Sector 4)起始存儲(chǔ)的。查看Sector 1-3扇區(qū),可以發(fā)現(xiàn)數(shù)據(jù)全是0xFFFF,也就是說沒有被代碼占用這些扇區(qū)。

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

    關(guān)注

    10

    文章

    1598

    瀏覽量

    147346
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1602

    瀏覽量

    48898
  • STM32F0
    +關(guān)注

    關(guān)注

    0

    文章

    61

    瀏覽量

    17047
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    物聯(lián)網(wǎng)行業(yè)存儲(chǔ)方案詳解_SPI NOR Flash

    SPI NOR FLASH存儲(chǔ)器在初始響應(yīng)和啟動(dòng)時(shí)提供高可靠性,并具有低時(shí)延。這一特性對(duì)于物聯(lián)網(wǎng)設(shè)備至關(guān)重要,因?yàn)槲锫?lián)網(wǎng)設(shè)備通常需要快速啟動(dòng)并穩(wěn)定運(yùn)行,以確保數(shù)據(jù)的實(shí)時(shí)傳輸和處理。 2、直接執(zhí)行代碼的能力 SPI NOR
    的頭像 發(fā)表于 09-24 14:39 ?44次閱讀
    物聯(lián)網(wǎng)行業(yè)<b class='flag-5'>存儲(chǔ)</b>方案詳解_SPI NOR <b class='flag-5'>Flash</b>

    EEPROM與Flash存儲(chǔ)器的區(qū)別

    編程只讀存儲(chǔ)器)和Flash存儲(chǔ)器是兩種常見的非易失性存儲(chǔ)器,它們具有各自的特點(diǎn)和應(yīng)用場(chǎng)景。本文將深入分析和比較EEPROM與Flash
    的頭像 發(fā)表于 05-23 16:35 ?3733次閱讀

    求助,關(guān)于SPC560D單片機(jī)flash代碼分段存儲(chǔ)問題求解

    flash區(qū)域,把程序內(nèi)一些模塊放在不能跳轉(zhuǎn)的flash區(qū)域,但這樣做導(dǎo)致了用戶程序不能運(yùn)行,請(qǐng)問這樣做為什么不可行?代碼必須連續(xù)
    發(fā)表于 04-07 08:13

    Flash存儲(chǔ)芯片:NOR Flash、NAND Flash、UFS和eMMC的比較與解析

      NOR Flash是可編程存儲(chǔ)器的一種,因其具有直接運(yùn)行應(yīng)用程序的能力而廣受歡迎,由于存儲(chǔ)容量較小,一般只有幾MB~幾十MB,因此適合
    發(fā)表于 04-03 12:05

    Flash存儲(chǔ)芯片:NOR Flash、NAND Flash、UFS和eMMC的比較與解析

    博客將詳細(xì)介紹Flash存儲(chǔ)芯片中的NOR Flash、NAND Flash、UFS和eMMC,分析它們的用途、優(yōu)缺點(diǎn),并對(duì)其進(jìn)行比較。 1.Nor
    的頭像 發(fā)表于 04-03 12:02 ?3584次閱讀
    <b class='flag-5'>Flash</b><b class='flag-5'>存儲(chǔ)</b>芯片:NOR <b class='flag-5'>Flash</b>、NAND <b class='flag-5'>Flash</b>、UFS和eMMC的比較與解析

    CW32L052 FLASH存儲(chǔ)

    CW32L052內(nèi)部集成了64KB嵌入式FLASH供用戶使用,可用來存儲(chǔ)應(yīng)用程序和用戶數(shù)據(jù)。芯片支持對(duì) FLASH 存儲(chǔ)器的讀、擦除和寫操作
    的頭像 發(fā)表于 02-28 17:43 ?618次閱讀
    CW32L052 <b class='flag-5'>FLASH</b><b class='flag-5'>存儲(chǔ)</b>器

    瑞薩Flash示例程序01型SC版本(代碼Flash)應(yīng)用說明

    電子發(fā)燒友網(wǎng)站提供《瑞薩Flash示例程序01型SC版本(代碼Flash)應(yīng)用說明.pdf》資料免費(fèi)下載
    發(fā)表于 02-19 13:48 ?0次下載
    瑞薩<b class='flag-5'>Flash</b>示例<b class='flag-5'>程序</b>01型SC版本(<b class='flag-5'>代碼</b><b class='flag-5'>Flash</b>)應(yīng)用說明

    stm32 flash寫數(shù)據(jù)怎么存儲(chǔ)

    stm32 flash寫數(shù)據(jù)怎么存儲(chǔ)的? STM32是一款廣泛應(yīng)用于嵌入式系統(tǒng)開發(fā)的微控制器,它的Flash存儲(chǔ)器是其中一個(gè)重要的組成部分。在本文中,我將詳細(xì)介紹STM32
    的頭像 發(fā)表于 01-31 15:46 ?1999次閱讀

    能否不使用ITCM就對(duì)Flash進(jìn)行編程呢?

    到0x8000_0000的地址,執(zhí)行搬移到ITCM當(dāng)中的指令,指令會(huì)通過sw指令將程序固化到外部Flash上,對(duì)應(yīng)的QSPI0的地址為0x10014060(TX_FIFO寄存器),執(zhí)行
    發(fā)表于 01-10 07:28

    Nor Flash編程和擦除操作的詳細(xì)流程

    Nor Flash 中的編程和擦除操作涉及寫入數(shù)據(jù)和擦除存儲(chǔ)單元的特定步驟。
    的頭像 發(fā)表于 12-05 15:19 ?988次閱讀

    Nor Flash編程和擦除操作實(shí)踐與指南

    閃存編程也不涉及將數(shù)據(jù)寫入存儲(chǔ)單元,為確保準(zhǔn)確編程,Nor Flash 支持字節(jié)級(jí)編程,允許寫入或修改單個(gè)字節(jié),而無需擦除整個(gè)塊。
    的頭像 發(fā)表于 12-05 14:03 ?1494次閱讀

    實(shí)戰(zhàn)經(jīng)驗(yàn) | 一個(gè) Flash 編程錯(cuò)誤標(biāo)志的探析

    關(guān)鍵詞:Flash, 編程錯(cuò)誤 目錄預(yù)覽 1、問題現(xiàn)象與分析 2、小結(jié) 3、后記 01 問題現(xiàn)象與分析 客戶項(xiàng)目中使用的 MCU 型號(hào)是 STM32G0B1, 他們反饋在代碼中嘗試擦除并編程
    的頭像 發(fā)表于 11-10 17:45 ?782次閱讀

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

    嵌入式開發(fā)中,如何將Flash中的程序轉(zhuǎn)移到RAM中運(yùn)行? Flash存儲(chǔ)器是嵌入式設(shè)備中常用的一種非易失性存儲(chǔ)器,它通常用來
    的頭像 發(fā)表于 10-29 16:23 ?2895次閱讀

    RA Flash地址絕對(duì)定位

    RA Flash地址絕對(duì)定位
    的頭像 發(fā)表于 10-26 18:24 ?580次閱讀
    RA <b class='flag-5'>Flash</b><b class='flag-5'>地址</b>絕對(duì)定位

    為什么STM32的Flash地址要設(shè)置到0x08000000?

    為什么STM32的Flash地址要設(shè)置到0x08000000?
    的頭像 發(fā)表于 10-26 15:50 ?1407次閱讀
    為什么STM32的<b class='flag-5'>Flash</b><b class='flag-5'>地址</b>要設(shè)置到0x08000000?