STM32中stm32f0xx_flash.icf文件的作用详解!
每個(gè)芯片開發(fā)商都會針對每款芯片來編寫一個(gè).icf文件就是傳說中的鏈接文件。對于基本的應(yīng)用,這個(gè).icf文件足以滿足你的工程需要。但有時(shí)也會需要改動,比如當(dāng)你的項(xiàng)目要添加外部RAM時(shí)就要修改一下icf。
1、Icf到底干了啥呢?
?
當(dāng)然這些都是最基本的,你也可以設(shè)置以下的東西來匹配你的具體項(xiàng)目。
?
2、下面我簡單介紹幾個(gè)功能,詳細(xì)請參考?EWARM_DevelopmentGuide
2.1 ?添加額外的region
???比如我要添加另一個(gè)名為ROM2的ROM區(qū)域,大小是256bytes,起始地址是0x80000.
? ??? ?define?region?ROM?=?Mem:[from?0x80000 size?0x100];
2.2 教你怎樣放置SECTION
如果你要把你的只讀常量放置在你指定的域而不是編譯器默認(rèn)的位置,你就得按如下操作了:
define region CONST_region = Mem:[from 0x100 size 0x100];
place in CONST_region{readonly section .rodata}
2.3 把一個(gè)段放置在指定位置
? ? place?at?address?Mem:[0] ?{readonly?section?.intvec}?//--將向量表放置在地址0處。
?
?
Note:之前在看啟動代碼時(shí),老在想這個(gè)向量表示怎么放到地址0處的呢,查了一下reference
? ??__vector_table是編譯器專有字符,表示出處開始放置向量表。
?在代碼開始處就聲明了此段為.intvec。鏈接的時(shí)候在依據(jù)icf把它放到地址0處。
?
?
2.4 將需要從RAM中運(yùn)行的代碼搬到RAM中
???Initialize?by?copy?{section?.textrw}
?
二、下面是我對generic_cortex.icf的注解
?
?
三、總結(jié)
?
咋看一下,這些東西對我們實(shí)際編程沒有太大作用,有的同學(xué)可能學(xué)了許久的單片機(jī)了也沒接觸到這個(gè)icf(我就是),但是個(gè)人覺得,這對于我們理解單片機(jī)有很大的幫助。不然的話,對于單片機(jī)的理解就簡單停留在外設(shè)操作了。
總結(jié)
以上是生活随笔為你收集整理的STM32中stm32f0xx_flash.icf文件的作用详解!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计printf调试宏
- 下一篇: 用宏定义代替printf函数