国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

arm-none-eabi-gcc編譯、鏈接選項詳解

這篇具有很好參考價值的文章主要介紹了arm-none-eabi-gcc編譯、鏈接選項詳解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1、-mthumb 和 -mthumb-interwork

"-mthumb”的意義是:使用這個編譯選項生成的目標文件是Thumb指令的,目前還沒有發(fā)現(xiàn)GNU編譯器中有哪一個選項可以指定生成的目標文件是thumb-2的。

相對應(yīng)的,“-marm“的意義是,使用編譯選項生成的目標文件是ARM指令的。

注意,不同編譯器對該選項是否默認開啟是不一樣的,實際測試的結(jié)果如下:

arm-none-eabi-gcc (20160919)?為Cortex-m4編譯,(-mcpu=cortex-m4),不加-mthumb選項,提示“target CPU does not support ARM mode”(Cortex-M處理器只支持Thumb指令,包含16位和32位);

arm-none-eabi-gcc (20191025)?為Cortex-m4編譯,(-mcpu=cortex-m4),不加-mthumb選項,可以順利通過編譯。

"-mthumb-interwork?”編譯選項生成的目標文件就是thumb的,但是可以被其他的ARM的目標文件交叉調(diào)用。

一般如果工程中需要一部分文件目標文件編譯為ARM指令,一部分目標文件編譯為Thumb指令時, 可以在這兩部分的編譯選項中都加入"-mthumb-interwork”選項,這樣就可以在后面將這兩部分鏈接為一個可執(zhí)行文件,例如:

arm-elf-gcc -mthumb-interwork -marm -c arm.c -o arm.o 
arm-elf-gcc -mthumb-interwork -mthumb -c thumb.c -o thumb.o 
arm-elf-gcc -mthumb-interwork arm.o thumb.o -o a.out

2、-mfloat-abi=softfp 和 -mfloat-abi=hard

該選項指定了浮點運算的實現(xiàn)方式,用軟件計算還是硬件計算。實際使用中需要根據(jù)硬件特性(是否支持硬件浮點單元)以及鏈接的Lib庫(包括libc,libm等)類型進行選擇,如果不匹配鏈接時會出現(xiàn)"VFP register arguments"錯誤(VFP=Virtual Float Point,虛擬浮點運算)。

如果不加以指定,默認使用-mfloat-abi=softfp?軟件浮點方式。

3、-fno-builtin

-fno-builtin用于解決當用戶自定義的函數(shù)與C語言的內(nèi)建函數(shù)(C庫函數(shù))沖突的問題。當用戶自定義的函數(shù)與內(nèi)建函數(shù)沖突時,若在gcc的編譯選項中加上-fno-builtin時,則表示不使用C語言的內(nèi)建函數(shù)

對于有些函數(shù)不想用內(nèi)建函數(shù),而其他的某些函數(shù)還是希望使用內(nèi)建函數(shù)時的場景,那么可以使用?-fno-builtin-function?選項,其中的function就是沖突的函數(shù)名,例如-fno-builtin-printf。

4、-fdata-sections 和 -ffunction-sections

-fdata-sections用于將每個符號創(chuàng)建為一個sections,其中每個sections名與data名保持一致

-ffunction-sections用于將每個函數(shù)創(chuàng)建為一個sections,其中每個sections名與function名保持一致。

用于代碼的分割和裁剪,會將每一個函數(shù)都拆分成.text、.rodata、.data、.bss段,這部分和對象文件的鏈接有關(guān)。加上這兩個參數(shù),配合鏈接器可以去除代碼中無用的部分,減少代碼大小。如果沒有這兩個參數(shù),編譯器就會按文件分段而不是按照函數(shù)分段。

5、-fno-common

-fno-common用于未初始化的全局變量當成強符號,重復(fù)定義就會報錯

6、-Xlinker -print-memory-usage

-Xlinker -print-memory-usage用于打印各段實際使用情況

LDFLAGS += -Xlinker -print-memory-usage

效果:

Memory region         Used Size  Region Size  %age Used
          ATCM_I:          0 GB        16 KB      0.00%
          ATCM_D:         184 B        32 KB      0.56%
          DTCM_I:          0 GB        48 KB      0.00%
        RAM_QSPI:          0 GB        16 MB      0.00%
         RAM_DEV:          0 GB         1 MB      0.00%
        RAM_DEV1:          0 GB      1152 KB      0.00%
        RAM_DEV2:          0 GB         1 MB      0.00%
        RAM_ARM0:         576 B        48 KB      1.17%
       RAM_SHARE:          0 GB        48 KB      0.00%
        RAM_ARM1:      102844 B       160 KB     62.77%
        ROX_ARM1:       23587 B       352 KB      6.54%
         XIP_ARM:      313852 B      1536 KB     19.95%

參考資料:

GCC部分編譯選項解析 - DF11G - 博客園 (cnblogs.com)

arm-none-eabi-gcc編譯選項(ChibiOS)_uav360的博客-CSDN博客_arm-none-eabi-gcc

利用gcc-arm-none-eabi開源工具鏈開發(fā)STM32程序 (copyfuture.com)文章來源地址http://www.zghlxwxcb.cn/news/detail-667227.html

到了這里,關(guān)于arm-none-eabi-gcc編譯、鏈接選項詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 搭建 Makefile+OpenOCD+CMSIS-DAP+Vscode arm-none-eabi-gcc 工程模板

    搭建 Makefile+OpenOCD+CMSIS-DAP+Vscode arm-none-eabi-gcc 工程模板

    Arm-none-eabi-gcc + Makefile+OpenOCD+CMSIS-DAP+Vscode工程模板 一、本次環(huán)境搭建所用的軟硬件 1)Windows or Linux (本文以Windows為主) 2)JLink、Daplink、Wch-Link燒錄器 3)GNU Arm Embedded Toolchain交叉編譯器 4)Mingw-w64 GCC for Windows 64 5)Debug 調(diào)試工具 openocd 6)Visual Studio Code 二、軟件安裝配置 GNU Arm

    2024年02月03日
    瀏覽(35)
  • ARM交叉編譯工具鏈 gcc-arm-none-eabi

    1,交叉編譯工具鏈簡介 (1)命令規(guī)則 交叉編譯工具鏈的命名規(guī)則為:arch [-vendor] [-os] [-(gnu)eabi] arch – 體系架構(gòu)?

    2024年03月25日
    瀏覽(20)
  • arm gcc編譯選項

    arm:架構(gòu)是arm none:不是特定的供應(yīng)商提供的 eabi:eabi:嵌入式應(yīng)用二進制接口(Embedded Application Binary Interface) 因為名稱里沒有“l(fā)inux”類似的字樣,說明不支持操作系統(tǒng)。 libc 是ANSI C 語言函數(shù)庫,包含了 C 語言最基本的庫函數(shù)。這個庫可以根據(jù)頭文件劃分為 15 個部分,其

    2024年02月03日
    瀏覽(23)
  • 【ARM 嵌入式 編譯系列 2.5 -- GCC 編譯參數(shù)學(xué)習(xí) --specs=nano.specs選項 】

    請閱讀 【嵌入式開發(fā)學(xué)習(xí)必備專欄 之 ARM GCC 編譯專欄】 ARM 工具鏈 ( arm-none-eabi- ) 包括了一個叫作 --specs 的編譯器和鏈接器選項,這個選項允許用戶指定一個或多個 “specs” 文件,以影響編譯或鏈接階段的行為。Specs 文件包含一系列的命令行參數(shù),這些參數(shù)可以是編譯器選項

    2024年01月22日
    瀏覽(29)
  • arm-none-eabi-size 查看內(nèi)存映像大小

    一、概述 1.1 功能 1.2 命令格式 1.3 支持的目標文件 二、基本應(yīng)用示例 2.1 查看單個對象文件 2.2 查看整個工程的內(nèi)存映像 三、命令選項描述 3.1 以不同的進制格式顯示內(nèi)存映像 示例:以十六進制格式顯示 3.2 不同的輸出方式 3.2.1 可選的表示方式與對應(yīng)的選項 3.2.2 -A (–format=

    2024年02月09日
    瀏覽(28)
  • 【ARM 嵌入式 編譯系列 3.5 -- gcc 鏈接參數(shù)介紹】

    請閱讀 【嵌入式開發(fā)學(xué)習(xí)必備專欄 之 ARM GCC 編譯專欄】 上篇文章【ARM 嵌入式 編譯系列 3.4 – 查看所依賴庫文件的路徑 詳細介紹】一直在提 鏈接參數(shù) ,那么鏈接參數(shù)有哪些,它們又有什么作用呢? 如前一篇文章中的的鏈接參數(shù)到底是什么意思呢? -L : 指定了 鏈接庫的路徑

    2024年01月17日
    瀏覽(44)
  • 【ARM 嵌入式 編譯系列 7.3 -- GCC 鏈接腳本中 DISCARD 與 .ARM.exidx】

    【ARM 嵌入式 編譯系列 7.3 -- GCC 鏈接腳本中 DISCARD 與 .ARM.exidx】

    請閱讀 【嵌入式開發(fā)學(xué)習(xí)必備專欄 之 ARM GCC 編譯專欄】 在移植 RT-Thread 到 cortex-m33(RA4M2)上的時候,在編譯的時候遇到下面問題:

    2024年01月23日
    瀏覽(73)
  • 【ARM 嵌入式 編譯系列 4.2 -- GCC 鏈接規(guī)范 extern “C“ 介紹】

    請閱讀 【ARM GCC 編譯專欄導(dǎo)讀】 上篇文章:ARM 嵌入式 編譯系列 4.1 – GCC 編譯屬性 likely與unlikely 學(xué)習(xí) 下篇文章:ARM 嵌入式 編譯系列 5 – GCC 內(nèi)建函數(shù) __builtin 介紹 extern “C” 是一種鏈接規(guī)范,它用于告訴C++編譯器按照C語言的方式來鏈接代碼。這個主要用于在C++代碼

    2024年02月13日
    瀏覽(54)
  • vscode 無法使用 compilerPath“D:.../bin/arm-none-eabi-g++.exe”解析配置。

    vscode 無法使用 compilerPath“D:.../bin/arm-none-eabi-g++.exe”解析配置。

    ????????最近在使用vscode搭建ODrive STM32開發(fā)環(huán)境,依次安裝了以下內(nèi)容: ????????????????1.Python3: 用于運行工程構(gòu)建腳本 ????????????????2.ST-Link/V2 Drivers: STLink/v2編程器的驅(qū)動 ? ? ? ? ????????3.Visual Studio Code: 輕量級但功能強大的源代碼編輯器 ? ? ?

    2024年02月08日
    瀏覽(48)
  • 【ARM 嵌入式 編譯系列 7.3 -- GCC 鏈接腳本中 NOLOAD 和 GROUP 的詳細介紹】

    請閱讀 【嵌入式開發(fā)學(xué)習(xí)必備專欄 之 ARM GCC 編譯專欄】 在使用 arm-none-eabi-gcc 工具鏈中的鏈接器腳本時,鏈接腳本使用鏈接器命令語言來描述如何生成最終的可執(zhí)行文件。其中, noload 和 group 是兩個用于控制鏈接過程的。 NOLOAD NOLOAD 用于指示鏈接器在輸

    2024年01月16日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包