在一個(gè)實(shí)際的項(xiàng)目中,F(xiàn)lash的使用會(huì)進(jìn)行專門的安排,分成不同的區(qū)域供不同的目的使用。最常見的是分成bootloader區(qū)和主程序區(qū)。對(duì)于有些需要在掉電后保存數(shù)據(jù)的,還會(huì)分配一段區(qū)域保存這些重要的數(shù)據(jù),這一塊兒我們就叫它eeprom吧。
通常bootloader會(huì)放在flash最開始的地方,eeprom放在flash最后,具體大小需要根據(jù)實(shí)際的項(xiàng)目需要分配。
這種情況下需要對(duì)鏈接文件進(jìn)行修改,主要是改一下main app的起始地址,否則默認(rèn)情況下都是存放在flash最開始的地方,main app就會(huì)把bootloader覆蓋掉。
在linux下,后綴為ld的就是鏈接文件,它里邊有這么一段內(nèi)容:
MEMORY就是用來給系統(tǒng)分配存儲(chǔ)空間的,包括RAM、FLASH、外部存儲(chǔ)等等。上圖中是main app的分配情況。這個(gè)示例中,flash的起始地址是0x08000000,給bootloader留了4k(0x1000)的空間,所以main app的起始地址ORIGIN就是0x08001000,長(zhǎng)度的話32k減去4k剩下27k。這樣在鏈接的時(shí)候就以0x08001000為基準(zhǔn)往后安排。
另外還有一種情況需要在鏈接文件中修改。我們?cè)陂_發(fā)的時(shí)候有時(shí)候想要某些特定的數(shù)據(jù)或代碼保存在特定的flash地址處,這個(gè)時(shí)候就可以通過在鏈接文件中添加這個(gè)特定的段空間來搞定。比如下面的例子
它在main app的最開始存放向量表,之后存放軟件版本信息,接下來才是代碼段。
分配好空間后,需要給自定義的段起一個(gè)名字,以便在程序中調(diào)用。
關(guān)鍵字SECTIONS下就是各個(gè)數(shù)據(jù)段的具體分配情況,段名.isr_vector指定的內(nèi)容放在FLASH_VECTAB下,.firmware_info指定的內(nèi)容放在FLASH_VERSION下。在KEEP后括號(hào)內(nèi)的名稱就是代碼中用來指定的段名。具體使用方法如下:
匯編:
這個(gè)很少用到,除非你用匯編寫代碼。
C:
通過上面的操作,就可以把指定的數(shù)據(jù)放到flash特定的地方。
!?。。翰煌木幾g器實(shí)現(xiàn)的細(xì)節(jié)和用到的關(guān)鍵字不一樣,需要查看其具體的幫助手冊(cè)。
-
處理器
+關(guān)注
關(guān)注
68文章
19409瀏覽量
231198 -
FlaSh
+關(guān)注
關(guān)注
10文章
1642瀏覽量
148683 -
Linux
+關(guān)注
關(guān)注
87文章
11345瀏覽量
210406 -
編譯器
+關(guān)注
關(guān)注
1文章
1642瀏覽量
49289 -
bootloader
+關(guān)注
關(guān)注
2文章
235瀏覽量
45737
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
S3C2410處理器與Nand flash 的問題
Intel SkyLake處理器平臺(tái)的功率調(diào)節(jié)、分配和定序方案
兩核程序空間分配問題如何解決
單片機(jī)程序在內(nèi)存和FLASH中的空間分配
如何對(duì)RAM空間分配操作
對(duì)微處理器的flash以及ram的內(nèi)存分配進(jìn)行講解
ARM程序在Flash和SRAM空間中是怎樣進(jìn)行分配的
多寄存器組網(wǎng)絡(luò)處理器上的寄存器分配技術(shù)
![多寄存<b class='flag-5'>器</b>組網(wǎng)絡(luò)<b class='flag-5'>處理器</b>上的寄存<b class='flag-5'>器</b><b class='flag-5'>分配</b>技術(shù)](https://file.elecfans.com/web2/M00/49/01/pYYBAGKhtDKAHXjFAAAJ5tsk_-Q992.jpg)
STM32處理器存儲(chǔ)空間布局結(jié)構(gòu)說明
![STM32<b class='flag-5'>處理器</b>存儲(chǔ)<b class='flag-5'>空間</b>布局結(jié)構(gòu)說明](https://file1.elecfans.com//web2/M00/A6/FB/wKgZomUMQZ-AN8IHAAAvzoTeaM0975.png)
單片機(jī)的程序在內(nèi)存和FLASH中應(yīng)該如何進(jìn)行空間分配
![單片機(jī)的程序在內(nèi)存和<b class='flag-5'>FLASH</b>中應(yīng)該如何進(jìn)行<b class='flag-5'>空間</b><b class='flag-5'>分配</b>](https://file.elecfans.com/web1/M00/A6/DE/o4YBAF2B9piARmY_AAGZdcK5cfE051.png)
EE-311:適用于Blackfin?處理器的VisualDSP++?Flash編程器API
![EE-311:適用于Blackfin?<b class='flag-5'>處理器</b>的VisualDSP++?<b class='flag-5'>Flash</b>編程<b class='flag-5'>器</b>API](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
負(fù)載均衡處理器的運(yùn)算資源分配策略
微處理器flash及ram內(nèi)容詳解
![微<b class='flag-5'>處理器</b><b class='flag-5'>flash</b>及ram內(nèi)容詳解](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
對(duì)稱多處理器系統(tǒng)中的進(jìn)程分配包括
EE-231:帶SHARC處理器的SPI Flash在線編程
![EE-231:帶SHARC<b class='flag-5'>處理器</b>的SPI <b class='flag-5'>Flash</b>在線編程](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評(píng)論