1. 程式人生 > >STM32中stm32f0xx_flash.icf檔案的作用詳解!(不錯的!)

STM32中stm32f0xx_flash.icf檔案的作用詳解!(不錯的!)

每個晶片開發商都會針對每款晶片來編寫一個.icf檔案就是傳說中的連結檔案。對於基本的應用,這個.icf檔案足以滿足你的工程需要。但有時也會需要改動,比如當你的專案要新增外部RAM時就要修改一下icf

1Icf到底幹了啥呢?

  1. 定義了晶片儲存空間的大小。
  2. 定義ROM的大小和起始、結束地址。
  3. 定義RAM的大小和起始、結束地址。

當然這些都是最基本的,你也可以設定以下的東西來匹配你的具體專案。

  1. 連結時是否儲存位塊與符號
  2. 設定你的啟動過程
  3. 設定你的堆與棧的大小和對齊方式
  4. 修改編譯器預設的初始化過程。

  5. 關於預設庫的處理等。。。

2、下面我簡單介紹幾個功能,詳細請參考 EWARM_DevelopmentGuide

2.1  新增額外的region

   比如我要新增另一個名為ROM2ROM區域,大小是256bytes,起始地址是0x80000.

       define region ROM = Mem:[from 0x80000 size 0x100];

2.2 教你怎樣放置SECTION

如果你要把你的只讀常量放置在你指定的域而不是編譯器預設的位置,你就得按如下操作了:

define region CONST_region = Mem:[from 0x100 size 0x100];

place in CONST_region{readonly section .rodata}

2.3 把一個段放置在指定位置

    place at address Mem:[0]  {readonly section .intvec} //--將向量表放置在地址0處。



Note:之前在看啟動程式碼時,老在想這個向量表示怎麼放到地址0處的呢,查了一下reference

    __vector_table是編譯器專有字元,表示出處開始放置向量表。

 在程式碼開始處就聲明瞭此段為.intvec。連結的時候在依據icf把它放到地址0處。


2.4 將需要從RAM中執行的程式碼搬到RAM

   Initialize by copy {section .textrw}


二、下面是我對generic_cortex.icf的註解


三、總結

咋看一下,這些東西對我們實際程式設計沒有太大作用,有的同學可能學了許久的微控制器了也沒接觸到這個icf(我就是),但是個人覺得,這對於我們理解微控制器有很大的幫助。不然的話,對於微控制器的理解就簡單停留在外設操作了。

每個晶片開發商都會針對每款晶片來編寫一個.icf檔案就是傳說中的連結檔案。對於基本的應用,這個.icf檔案足以滿足你的工程需要。但有時也會需要改動,比如當你的專案要新增外部RAM時就要修改一下icf

1Icf到底幹了啥呢?

  1. 定義了晶片儲存空間的大小。
  2. 定義ROM的大小和起始、結束地址。
  3. 定義RAM的大小和起始、結束地址。

當然這些都是最基本的,你也可以設定以下的東西來匹配你的具體專案。

  1. 連結時是否儲存位塊與符號
  2. 設定你的啟動過程
  3. 設定你的堆與棧的大小和對齊方式
  4. 修改編譯器預設的初始化過程。
  5. 關於預設庫的處理等。。。

2、下面我簡單介紹幾個功能,詳細請參考 EWARM_DevelopmentGuide

2.1  新增額外的region

   比如我要新增另一個名為ROM2ROM區域,大小是256bytes,起始地址是0x80000.

       define region ROM = Mem:[from 0x80000 size 0x100];

2.2 教你怎樣放置SECTION

如果你要把你的只讀常量放置在你指定的域而不是編譯器預設的位置,你就得按如下操作了:

define region CONST_region = Mem:[from 0x100 size 0x100];

place in CONST_region{readonly section .rodata}

2.3 把一個段放置在指定位置

    place at address Mem:[0]  {readonly section .intvec} //--將向量表放置在地址0處。



Note:之前在看啟動程式碼時,老在想這個向量表示怎麼放到地址0處的呢,查了一下reference

    __vector_table是編譯器專有字元,表示出處開始放置向量表。

 在程式碼開始處就聲明瞭此段為.intvec。連結的時候在依據icf把它放到地址0處。


2.4 將需要從RAM中執行的程式碼搬到RAM

   Initialize by copy {section .textrw}


二、下面是我對generic_cortex.icf的註解


三、總結

咋看一下,這些東西對我們實際程式設計沒有太大作用,有的同學可能學了許久的微控制器了也沒接觸到這個icf(我就是),但是個人覺得,這對於我們理解微控制器有很大的幫助。不然的話,對於微控制器的理解就簡單停留在外設操作了。