在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

想要高度靈活的GCC鏈接文件模板?了解下FreeMarker機制

痞子衡嵌入式 ? 來源:痞子衡嵌入式 ? 作者: 痞子衡 ? 2022-12-16 10:28 ? 次閱讀

大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家分享的是MCUXpresso IDE下高度靈活的FreeMarker鏈接文件模板機制

痞子衡之前寫過一篇文章 《MCUXpresso IDE下工程鏈接文件配置管理與自動生成機制》,這篇文章介紹了 MCUXpresso IDE 在鏈接文件管理設(shè)計上跟其它 IDE(IAR/Keil)不一樣的地方,與 IAR/Keil 下用戶直接改寫鏈接文件去做個性化目標(biāo)鏈接(比如把某個源文件里全部代碼重定向鏈接到 RAM 里執(zhí)行)不同的是, MCUXpresso IDE 下用戶都是在圖形化配置界面里做對應(yīng)操作,然后 MCUXpresso IDE 會自動生成相應(yīng)的鏈接文件(.ld)。但是圖性化操作界面里有時候不能百分百滿足用戶的個性化鏈接需求,這時候除了回退到 IAR/Keil 下那種傳統(tǒng)方式外,還有沒有其它方式呢?答案是有的,這就是今天要聊的 MCUXpresso IDE 下 FreeMarker 鏈接文件模板機制。

一、準(zhǔn)備工作

首先需要準(zhǔn)備好環(huán)境,包含必要的軟件,痞子衡的環(huán)境如下:

集成開發(fā)環(huán)境:MCUXpresso IDE_11.6.0_8187,點此下載

軟件開發(fā)包:SDK_2.12.1_EVK-MIMXRT1170(Toolchain需包含MCUXpresso IDE),點此下載

然后按照 《MCUXpresso IDE下將關(guān)鍵函數(shù)重定向到RAM中執(zhí)行的幾種方法》 文章 一、準(zhǔn)備工作 小節(jié)里改造下 evkmimxrt1170_hello_world_demo_cm7 示例工程選項,并添加 critical_code.c 源文件。在這篇文章的 2.3 針對源文件中全部函數(shù) 小節(jié)里,痞子衡為了將 critical_code.c 里代碼全部鏈接到 DTCM,使用了回退到 IAR/Keil 那種傳統(tǒng)改寫鏈接文件的方式。今天我們就嘗試用 FreeMarker 鏈接文件模板機制這個特性來實現(xiàn)。

二、FreeMarker機制

FreeMarker 是一個模板引擎(更通俗的說法其實就是鏈接文本的生成器),它集成在 MCUXpresso IDE 內(nèi)部,由 MCUXpresso IDE 自動調(diào)用。MCUXpresso IDE 下最終的鏈接文件其實是由這個 FreeMarker 處理生成的。在 MCUXpresso IDE 軟件內(nèi)部有一組默認的系統(tǒng)模板(也叫根模板),它還支持用戶提供的模板(這些模板均是用一種專用的語法 FTL 來描述的),所有適用工程的模板最終統(tǒng)一經(jīng)過 FreeMarker 來處理。

模板的設(shè)計是組件化的,這意味著用戶不需要編寫整個工程的模板,只需要加入指定的用戶模板實現(xiàn)個性化鏈接需求即可,其它部分仍由 MCUXpresso IDE 圖形配置界面完成。默認情況下,用戶模板需要被放在指定的 user_project_root/linkscripts 目錄下(這個路徑不用額外添加進工程選項 C/C++ General Paths and Symbols Source Location 中)。

Note:更多 FreeMarker 細節(jié),可以參見 MCUXpressoIDE_11.6.0_8187MCUXpresso_IDE_User_Guide.pdf 文檔里的 17.14 FreeMarker Linker Script Templates 小節(jié)。

d5dcd27c-7cdd-11ed-8abf-dac502259ad0.png

三、新方法解決問題

現(xiàn)在我們嘗試用 FreeMarker 特性來解決 critical_code.o 的鏈接需求。首先是在 MCUXpressoIDE_11.6.0_81874workspaceevkmimxrt1170_hello_world_demo_cm7 下創(chuàng)建一個名為 linkscripts 的文件夾(前面說了,這個新文件夾路徑不需要在工程選項里登記),然后在 linkscripts 里面新建如下三個 .ldt 文件(固定文件名,由 FreeMarker 定死的):

bss.ldt
data.ldt          -- 作用是將 critical_code.o 放到指定 RAMx 區(qū)域
                  -- 備注:如果 MCU 僅一塊 RAM 空間,則此處應(yīng)為 main_data.ldt
main_text.ldt     -- 作用是將 critical_code.o 從 .text 段(默認鏈接在 Flash 區(qū)域)移出來
d604d9ac-7cdd-11ed-8abf-dac502259ad0.png

main_text.ldt 內(nèi)容比較簡單,僅僅是用于告訴 FreeMarker 不要將 critical_code.o 里的 text 段放進主 .text 段里一起處理:

// 單目標(biāo)文件寫法
*(EXCLUDE_FILE(*critical_code.o) .text*)

// 如果是多目標(biāo)文件,寫法可以這樣
*(EXCLUDE_FILE(*critical_code1.o *critical_code2.o) .text*)

data.ldt 中內(nèi)容比較關(guān)鍵,用于重置 critical_code.o 里的 text 段。這里需要注意的是如果是將該 text 放置進主 RAM 區(qū)域(即工程選項 MCU settings 里 Alias 名為 RAM 的空間),其寫法跟不放進主 RAM 不一樣:

// 如果目標(biāo)文件放進主 RAM        - 正確寫法,等效于放進 memory.alias=="RAM" 或者 memory.name=="SRAM_DTC_cm7" 區(qū)域
*critical_code.o(.text*)

// 如果目標(biāo)文件放進主 RAM        - 錯誤寫法,實際不生效,等于沒有重置,代碼依舊放進 Flash 區(qū)域
<#if memory.alias=="RAM">
*critical_code.o(.text*)


// 如果目標(biāo)文件不是放進主 RAM    - 正確寫法1
<#if memory.name=="SRAM_ITC_cm7">
*critical_code.o(.text*)


// 如果目標(biāo)文件不是放進主 RAM    - 正確寫法2
<#if memory.alias=="RAM2">
*critical_code.o(.text*)


// 如果是多目標(biāo)文件,寫法可以這樣
<#if memory.name=="SRAM_ITC_cm7">
*critical_code1.o(.text*)
*critical_code2.o(.text*)

現(xiàn)在編譯工程查看映射文件,我們會發(fā)現(xiàn) critical_code.c 里全部函數(shù)都已經(jīng)鏈接在指定的 RAMx 區(qū)域了。如果你想更進一步,把 critical_code.c 里全部 RO data 段都放進指定 RAMx 區(qū)域,則需要再在 linkscripts 文件夾里增加一個名為 main_rodata.ldt 文件。其內(nèi)容如下,這里是告訴 FreeMarker 不要將 critical_code.o 里的 RO data 段放進主 RO data 段里一起處理。

*(EXCLUDE_FILE(*critical_code.o) .rodata)
*(EXCLUDE_FILE(*critical_code.o) .rodata.*)
*(EXCLUDE_FILE(*critical_code.o) .constdata)
*(EXCLUDE_FILE(*critical_code.o) .constdata.*)
. = ALIGN(${text_align});

然后 data.ldt 里改成如下這樣就可以了:

<#if memory.alias=="RAM2">
*critical_code.o(.text*)
*critical_code.o(.rodata .rodata.* .constdata .constdata.*)

至此,MCUXpresso IDE下高度靈活的FreeMarker鏈接文件模板機制痞子衡便介紹完畢了,掌聲在哪里~~~

審核編輯:湯梓紅

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

    關(guān)注

    0

    文章

    110

    瀏覽量

    25261
  • IDE
    IDE
    +關(guān)注

    關(guān)注

    0

    文章

    348

    瀏覽量

    47538
  • mcuxpresso
    +關(guān)注

    關(guān)注

    1

    文章

    44

    瀏覽量

    4448

原文標(biāo)題:想要高度靈活的GCC鏈接文件模板?了解下FreeMarker機制

文章出處:【微信號:pzh_mcu,微信公眾號:痞子衡嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    Linux 下GCC的編譯

    .c 文件,直接使用 gcc [目標(biāo)文件] -o [想要生產(chǎn)的文件名字] 那在遇到多個 .c 文件
    的頭像 發(fā)表于 09-11 15:18 ?3020次閱讀
    Linux 下<b class='flag-5'>GCC</b>的編譯

    想要了解下大模型知識

    工作需要,想要了解一下大模型算力建設(shè)知識。
    發(fā)表于 08-20 15:31

    Java模板引擎FreeMaker介紹

    史上最簡單Spring Boot教程:第四篇SpringBoot之freemarker模板(四)
    發(fā)表于 08-30 08:59

    springboot的thymeleaf模板freemarker模板的用法

    springboot的thymeleaf模板freemarker模板的基礎(chǔ)用法
    發(fā)表于 05-05 18:23

    STM32CubeWL_V1.1.0的GCC部分模板有哪些?

    = 0x20008000, LENGTH = 32K /* 備份 SRAM2 */}你從哪里得到這個鏈接描述文件的?它是 STM32CubeWL_V1.1.0 的 GCC 部分的模板
    發(fā)表于 12-14 07:20

    如何使用AVR-GCC

    如何使用AVR-GCC:安裝GNU C FOR AVR 一:執(zhí)行安裝程序,生成鏈接用的庫文件
    發(fā)表于 08-16 11:00 ?49次下載

    關(guān)于GCC的分析,想進一步了解GCC的朋友可以看看

    關(guān)于GCC的分析,想進一步了解GCC的朋友可以看看
    發(fā)表于 10-25 08:40 ?5次下載
    關(guān)于<b class='flag-5'>GCC</b>的分析,想進一步<b class='flag-5'>了解</b><b class='flag-5'>GCC</b>的朋友可以看看

    GCC編譯C語言程序的過程是怎么樣的

    使用GCC將C語言源代碼文件生成可執(zhí)行文件的過程,需要經(jīng)歷四個的步驟:預(yù)處理(Preprocessing)編譯(Compilation)匯編(Assembly)鏈接(Linking)
    的頭像 發(fā)表于 02-18 11:47 ?4449次閱讀

    gcc的使用方法以及Linux gcc 的常用選項

    gcc的使用方法 gcc 【選項】文件gcc常用選項 gcc -v: 查看gcc編譯器的版本
    的頭像 發(fā)表于 10-22 14:42 ?3405次閱讀

    GCC程序編譯的靜態(tài)鏈接和動態(tài)鏈接

    靜態(tài)鏈接使用靜態(tài)庫進行鏈接,生成的程序包含程序運行所需要的全部庫,可以直接運行,不過靜態(tài)鏈接生成的程序體積較大(即使是在靜態(tài)鏈接中,整個庫文件
    的頭像 發(fā)表于 11-12 15:50 ?3008次閱讀
    <b class='flag-5'>GCC</b>程序編譯的靜態(tài)<b class='flag-5'>鏈接</b>和動態(tài)<b class='flag-5'>鏈接</b>

    LD鏈接腳本解析-STM32F4xx

    學(xué)會編寫簡單的鏈接腳本。什么是鏈接腳本我們在做 GCC 交叉編譯時總會遇到一個 .ld 后綴的文件,這個就是我們常說的鏈接腳本。有朋友可能會
    發(fā)表于 11-26 10:51 ?12次下載
    LD<b class='flag-5'>鏈接</b>腳本解析-STM32F4xx

    gcc編譯優(yōu)化系列】如何獲取gcc默認的鏈接腳本

    我們都知道在一般的嵌入式開發(fā)中,使用gcc編譯固件的一般流程是,先把所有的.c文件和.s文件編譯成.o文件,然后把所有的.o文件
    的頭像 發(fā)表于 07-11 09:15 ?4644次閱讀

    【RT-Thread學(xué)習(xí)筆記】GCC鏈接報錯的排除過程分享

    【RT-Thread學(xué)習(xí)筆記】GCC鏈接報錯的排除過程分享,一個意想不到的問題。
    的頭像 發(fā)表于 07-30 15:08 ?1351次閱讀
    【RT-Thread學(xué)習(xí)筆記】<b class='flag-5'>GCC</b><b class='flag-5'>鏈接</b>報錯的排除過程分享

    MCUXpresso IDE下工程鏈接文件配置管理與自動生成機制介紹

    我們知道不同 IDE 下鏈接文件語法是不一樣的,而恩智浦 MCUXpresso IDE 底層編譯器是 Arm GCC,因此其鏈接文件就是標(biāo)準(zhǔn)
    的頭像 發(fā)表于 11-17 10:41 ?3484次閱讀
    MCUXpresso IDE下工程<b class='flag-5'>鏈接</b><b class='flag-5'>文件</b>配置管理與自動生成<b class='flag-5'>機制</b>介紹

    EE-69:了解和使用SHARC處理器上的鏈接器描述文件

    電子發(fā)燒友網(wǎng)站提供《EE-69:了解和使用SHARC處理器上的鏈接器描述文件.pdf》資料免費下載
    發(fā)表于 01-06 16:06 ?0次下載
    EE-69:<b class='flag-5'>了解</b>和使用SHARC處理器上的<b class='flag-5'>鏈接</b>器描述<b class='flag-5'>文件</b>
    主站蜘蛛池模板: 欧美全免费aaaaaa特黄在线 | 不卡视频一区 | 国产亚洲小视频 | 日本不卡视频免费 | 婷婷在线五月 | 又色又爽视频 | 久久精品免费在线观看 | 免费啪啪网 | 性欧美乱又伦 | 99久久99久久精品国产 | 天天色天天操天天射 | 婷婷丁香在线观看 | 147西西人体大胆免费网 | 日韩不卡毛片 | 国产免费人成在线看视频 | 一级日本高清视频免费观看 | 免费色视频 | 男人天堂网在线观看 | 日本亚洲卡一卡2卡二卡三卡四卡 | 在线看一区二区 | 色婷婷激情五月综合 | 永久免费在线播放 | 网全大全黄| 午夜影院免费入口 | 六月婷操 | 欧美一级特黄aaaaaa在线看片 | 欧美a级网站 | 国产手机在线观看视频 | 激情综合在线观看 | 在线观看免费视频资源 | 国产一级做a爰片久久毛片 国产一级做a爰片久久毛片男 | 天天色综合色 | 国产午夜免费 | semimi亚洲综合在线观看 | 久久夜夜肉肉热热日日 | 久久久久久夜精品精品免费啦 | 日日摸夜夜爽夜夜爽出水 | 国产精品性 | 色狠狠综合网 | 手机看片国产高清 | 人人做人人爽人人爱秋霞影视 |