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

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

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

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

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

寫在前面 Ⅰ

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

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

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

為什么要改變代碼存儲地址 Ⅱ

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

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

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

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

改變代碼存儲地址的方法 Ⅲ

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

1.Keil配置方法

打開工程目標選項:Project -> Options for Target -> Target。修改目標ROM起始地址。如下圖:

2.IAR配置方法

配置步驟分如下幾步:

A.進入配置界面:Pooject -> Options -> Linker -> Config;

B.勾選上“Override default”;

C.點擊“Edit”,修改ROM起始地址為;

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

具體如下圖:

驗證代碼存儲地址 Ⅳ

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

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

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

    關(guān)注

    10

    文章

    1638

    瀏覽量

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

    關(guān)注

    1

    文章

    1635

    瀏覽量

    49171
  • STM32F0
    +關(guān)注

    關(guān)注

    0

    文章

    61

    瀏覽量

    17106
收藏 人收藏

    評論

    相關(guān)推薦

    使用SD Flash為TMS320C28x器件編程外部非易失性存儲

    電子發(fā)燒友網(wǎng)站提供《使用SD Flash為TMS320C28x器件編程外部非易失性存儲器.pdf》資料免費下載
    發(fā)表于 10-15 11:48 ?0次下載
    使用SD <b class='flag-5'>Flash</b>為TMS320C28x器件<b class='flag-5'>編程</b>外部非易失性<b class='flag-5'>存儲</b>器

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

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

    EEPROM的地址怎么確定

    關(guān)于EEPROM(Electrically Erasable Programmable Read-Only Memory,電可擦可編程只讀存儲器)的地址確定,涉及多個方面,包括設(shè)備地址、存儲
    的頭像 發(fā)表于 09-05 10:53 ?1763次閱讀

    編程的只讀存儲器是否可以改寫

    不可更改。這與可擦寫可編程只讀存儲器(Erasable Programmable Read-Only Memory,簡稱EPROM)和閃存(Flash Memory)等其他類型的非易失性存儲器不同,后者可以
    的頭像 發(fā)表于 08-06 09:25 ?763次閱讀

    ESP32C3通過QSPI flash來片外運行代碼,如果頻繁地存儲錄音音頻數(shù)據(jù),會影響程序運行嗎?

    ESP32C3通過QSPI flash 來片外運行代碼,如果頻繁地存儲錄音音頻數(shù)據(jù),會影響程序運行嗎?有這個風險嗎?
    發(fā)表于 06-20 08:28

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

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

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

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

    stm32g030f6p6 flash快速編程總是失敗的原因?

    _INDEX_SIZE; if(end_addr > g_my_flash.flash_end_addr || init==FLASH_ERASER)/*如果如果地址大于存儲
    發(fā)表于 04-07 07:32

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

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

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

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

    什么是NAND 型 Flash 存儲器?

    前言 NAND Flash 和 NOR Flash是現(xiàn)在市場上兩種主要的閃存技術(shù)。Intel于1988年首先開發(fā)出 NOR Flash 技術(shù),徹底改變了原先由 EPROM 和 EEPR
    的頭像 發(fā)表于 03-01 17:08 ?713次閱讀
    什么是NAND 型 <b class='flag-5'>Flash</b> <b class='flag-5'>存儲</b>器?

    CW32L052 FLASH存儲

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

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

    電子發(fā)燒友網(wǎng)站提供《瑞薩Flash示例程序01型SC版本(代碼Flash)應(yīng)用說明.pdf》資料免費下載
    發(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ù)怎么存儲

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

    能否不使用ITCM就對Flash進行編程呢?

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