日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STM32中stm32f0xx_flash.icf文件的作用详解!

發布時間:2025/6/15 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32中stm32f0xx_flash.icf文件的作用详解! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

每個芯片開發商都會針對每款芯片來編寫一個.icf文件就是傳說中的鏈接文件。對于基本的應用,這個.icf文件足以滿足你的工程需要。但有時也會需要改動,比如當你的項目要添加外部RAM時就要修改一下icf。

1、Icf到底干了啥呢?

  • 定義了芯片存儲空間的大小。
  • 定義ROM的大小和起始、結束地址。
  • 定義RAM的大小和起始、結束地址。
  • ?

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

  • 鏈接時是否保存位塊與符號
  • 設置你的啟動過程
  • 設置你的堆與棧的大小和對齊方式
  • 修改編譯器默認的初始化過程。
  • 關于默認庫的處理等。。。
  • ?

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

    2.1 ?添加額外的region

    ???比如我要添加另一個名為ROM2的ROM區域,大小是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(我就是),但是個人覺得,這對于我們理解單片機有很大的幫助。不然的話,對于單片機的理解就簡單停留在外設操作了。

    總結

    以上是生活随笔為你收集整理的STM32中stm32f0xx_flash.icf文件的作用详解!的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。