arduino狀態欄下的gcc/g++編譯參數詳細說明

比如以下是編譯的信息:
C:\Program Files (x86)\Arduino\arduino-builder -dump-prefs -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -hardware C:\Users\the-cat\AppData\Local\Arduino15\packages -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -tools C:\Users\the-cat\AppData\Local\Arduino15\packages -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries C:\Users\the-cat\Documents\Arduino\libraries -fqbn=Seeeduino:samd:seeed_grove_ui_wireless:cache=on,speed=120,opt=small,maxqspi=50,usbstack=arduino,debug=off -vid-pid=0X2886_0X802D -ide-version=10810 -build-path C:\Users\the-cat\AppData\Local\Temp\arduino_build_11150 -warnings=none -build-cache C:\Users\the-cat\AppData\Local\Temp\arduino_cache_851544 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.bossac.path=C:\Users\the-cat\AppData\Local\Arduino15\packages\arduino\tools\bossac\1.8.0-48-gb176eee -prefs=runtime.tools.bossac-1.7.0.path=C:\Users\the-cat\AppData\Local\Arduino15\packages\arduino\tools\bossac\1.7.0 -prefs=runtime.tools.openocd.path=C:\Users\the-cat\AppData\Local\Arduino15\packages\arduino\tools\openocd\0.9.0-arduino -prefs=runtime.tools.openocd-0.9.0-arduino.path=C:\Users\the-cat\AppData\Local\Arduino15\packages\arduino\tools\openocd\0.9.0-arduino -prefs=runtime.tools.CMSIS.path=C:\Users\the-cat\AppData\Local\Arduino15\packages\arduino\tools\CMSIS\4.5.0 -prefs=runtime.tools.CMSIS-4.5.0.path=C:\Users\the-cat\AppData\Local\Arduino15\packages\arduino\tools\CMSIS\4.5.0 -prefs=runtime.tools.CMSIS-Atmel.path=C:\Users\the-cat\AppData\Local\Arduino15\packages\arduino\tools\CMSIS-Atmel\1.2.0 -prefs=runtime.tools.CMSIS-Atmel-1.2.0.path=C:\Users\the-cat\AppData\Local\Arduino15\packages\arduino\tools\CMSIS-Atmel\1.2.0 -prefs=runtime.tools.bossac-1.8.0-48-gb176eee.path=C:\Users\the-cat\AppData\Local\Arduino15\packages\arduino\tools\bossac\1.8.0-48-gb176eee -prefs=runtime.tools.arm-none-eabi-gcc.path=C:\Users\the-cat\AppData\Local\Arduino15\packages\arduino\tools\arm-none-eabi-gcc\4.8.3-2014q1 -prefs=runtime.tools.arm-none-eabi-gcc-4.8.3-2014q1.path=C:\Users\the-cat\AppData\Local\Arduino15\packages\arduino\tools\arm-none-eabi-gcc\4.8.3-2014q1 -verbose C:\Users\the-cat\LIF\test\example_1\sketch_dec14a\sketch_dec14a.ino
C:\Program Files (x86)\Arduino\arduino-builder -compile -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -hardware C:\Users\the-cat\AppData\Local\Arduino15\packages -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -tools C:\Users\the-cat\AppData\Local\Arduino15\packages -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries C:\Users\the-cat\Documents\Arduino\libraries -fqbn=Seeeduino:samd:seeed_grove_ui_wireless:cache=on,speed=120,opt=small,maxqspi=50,usbstack=arduino,debug=off -vid-pid=0X2886_0X802D -ide-version=10810 -build-path C:\Users\the-cat\AppData\Local\Temp\arduino_build_11150 -warnings=none -build-cache C:\Users\the-cat\AppData\Local\Temp\arduino_cache_851544 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.bossac.path=C:\Users\the-cat\AppData\Local\Arduino15\packages\arduino\tools\bossac\1.8.0-48-gb176eee -prefs=runtime.tools.bossac-1.7.0.path=C:\Users\the-cat\AppData\Local\Arduino15\packages\arduino\tools\bossac\1.7.0 -prefs=runtime.tools.openocd.path=C:\Users\the-cat\AppData\Local\Arduino15\packages\arduino\tools\openocd\0.9.0-arduino -prefs=runtime.tools.openocd-0.9.0-arduino.path=C:\Users\the-cat\AppData\Local\Arduino15\packages\arduino\tools\openocd\0.9.0-arduino -prefs=runtime.tools.CMSIS.path=C:\Users\the-cat\AppData\Local\Arduino15\packages\arduino\tools\CMSIS\4.5.0 -prefs=runtime.tools.CMSIS-4.5.0.path=C:\Users\the-cat\AppData\Local\Arduino15\packages\arduino\tools\CMSIS\4.5.0 -prefs=runtime.tools.CMSIS-Atmel.path=C:\Users\the-cat\AppData\Local\Arduino15\packages\arduino\tools\CMSIS-Atmel\1.2.0 -prefs=runtime.tools.CMSIS-Atmel-1.2.0.path=C:\Users\the-cat\AppData\Local\Arduino15\packages\arduino\tools\CMSIS-Atmel\1.2.0 -prefs=runtime.tools.bossac-1.8.0-48-gb176eee.path=C:\Users\the-cat\AppData\Local\Arduino15\packages\arduino\tools\bossac\1.8.0-48-gb176eee -prefs=runtime.tools.arm-none-eabi-gcc.path=C:\Users\the-cat\AppData\Local\Arduino15\packages\arduino\tools\arm-none-eabi-gcc\4.8.3-2014q1 -prefs=runtime.tools.arm-none-eabi-gcc-4.8.3-2014q1.path=C:\Users\the-cat\AppData\Local\Arduino15\packages\arduino\tools\arm-none-eabi-gcc\4.8.3-2014q1 -verbose C:\Users\the-cat\LIF\test\example_1\sketch_dec14a\sketch_dec14a.ino
Using board ‘seeed_grove_ui_wireless’ from platform in folder: C:\Users\the-cat\AppData\Local\Arduino15\packages\Seeeduino\hardware\samd\1.6.0
Using core ‘arduino’ from platform in folder: C:\Users\the-cat\AppData\Local\Arduino15\packages\Seeeduino\hardware\samd\1.6.0
Detecting libraries used…
“C:\Users\the-cat\AppData\Local\Arduino15\packages\arduino\tools\arm-none-eabi-gcc\4.8.3-2014q1/bin/arm-none-eabi-g++” -mcpu=cortex-m4 -mthumb -c -Os -w -std=gnu++11 -ffunction-sections -fdata-sections -fno-threadsafe-statics -nostdlib --param max-inline-insns-single=500 -fno-rtti -fno-exceptions “-D__SKETCH_NAME__=”"“sketch_dec14a.ino”""" -w -x c++ -E -CC -DF_CPU=120000000L -DARDUINO=10810 -DARDUINO_GROVE_UI_WIRELESS -DARDUINO_ARCH_SAMD -DVREFLESS -D__SAMD51P19A__ -DSEEED_GROVE_UI_WIRELESS -D__SAMD51__ -DUSB_VID=0x2886 -DUSB_PID=0x802D -DUSBCON -DUSB_CONFIG_POWER=100 “-DUSB_MANUFACTURER=“Seeed Studio”” “-DUSB_PRODUCT=“Seeed Grove UI Wireles”” “-IC:\Users\the-cat\AppData\Local\Arduino15\packages\Seeeduino\hardware\samd\1.6.0\cores\arduino/Adafruit_TinyUSB_Core” “-IC:\Users\the-cat\AppData\Local\Arduino15\packages\Seeeduino\hardware\samd\1.6.0\cores\arduino/Adafruit_TinyUSB_Core/tinyusb/src” -D__FPU_PRESENT -DARM_MATH_CM4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -DENABLE_CACHE -Os -DVARIANT_QSPI_BAUD_DEFAULT=50000000 “-IC:\Users\the-cat\AppData\Local\Arduino15\packages\arduino\tools\CMSIS\4.5.0/CMSIS/Include/” “-IC:\Users\the-cat\AppData\Local\Arduino15\packages\arduino\tools\CMSIS-Atmel\1.2.0/CMSIS/Device/ATMEL/” “-IC:\Users\the-cat\AppData\Local\Arduino15\packages\Seeeduino\hardware\samd\1.6.0\cores\arduino” “-IC:\Users\the-cat\AppData\Local\Arduino15\packages\Seeeduino\hardware\samd\1.6.0\variants\grove_ui_wireless” “C:\Users\the-cat\AppData\Local\Temp\arduino_build_11150\sketch\sketch_dec14a.ino.cpp” -o nul
Generating function prototypes…
“C:\Users\the-cat\AppData\Local\Arduino15\packages\arduino\tools\arm-none-eabi-gcc\4.8.3-2014q1/bin/arm-none-eabi-g++” -mcpu=cortex-m4 -mthumb -c -Os -w -std=gnu++11 -ffunction-sections -fdata-sections -fno-threadsafe-statics -nostdlib --param max-inline-insns-single=500 -fno-rtti -fno-exceptions “-D__SKETCH_NAME__=”"“sketch_dec14a.ino”""" -w -x c++ -E -CC -DF_CPU=120000000L -DARDUINO=10810 -DARDUINO_GROVE_UI_WIRELESS -DARDUINO_ARCH_SAMD -DVREFLESS -D__SAMD51P19A__ -DSEEED_GROVE_UI_WIRELESS -D__SAMD51__ -DUSB_VID=0x2886 -DUSB_PID=0x802D -DUSBCON -DUSB_CONFIG_POWER=100 “-DUSB_MANUFACTURER=“Seeed Studio”” “-DUSB_PRODUCT=“Seeed Grove UI Wireles”” “-IC:\Users\the-cat\AppData\Local\Arduino15\packages\Seeeduino\hardware\samd\1.6.0\cores\arduino/Adafruit_TinyUSB_Core” “-IC:\Users\the-cat\AppData\Local\Arduino15\packages\Seeeduino\hardware\samd\1.6.0\cores\arduino/Adafruit_TinyUSB_Core/tinyusb/src” -D__FPU_PRESENT -DARM_MATH_CM4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -DENABLE_CACHE -Os -DVARIANT_QSPI_BAUD_DEFAULT=50000000 “-IC:\Users\the-cat\AppData\Local\Arduino15\packages\arduino\tools\CMSIS\4.5.0/CMSIS/Include/” “-IC:\Users\the-cat\AppData\Local\Arduino15\packages\arduino\tools\CMSIS-Atmel\1.2.0/CMSIS/Device/ATMEL/” “-IC:\Users\the-cat\AppData\Local\Arduino15\packages\Seeeduino\hardware\samd\1.6.0\cores\arduino” “-IC:\Users\the-cat\AppData\Local\Arduino15\packages\Seeeduino\hardware\samd\1.6.0\variants\grove_ui_wireless” “C:\Users\the-cat\AppData\Local\Temp\arduino_build_11150\sketch\sketch_dec14a.ino.cpp” -o “C:\Users\the-cat\AppData\Local\Temp\arduino_build_11150\preproc\ctags_target_for_gcc_minus_e.cpp”
“C:\Program Files (x86)\Arduino\tools-builder\ctags\5.8-arduino11/ctags” -u --language-force=c++ -f - --c+±kinds=svpf --fields=KSTtzns --line-directives “C:\Users\the-cat\AppData\Local\Temp\arduino_build_11150\preproc\ctags_target_for_gcc_minus_e.cpp”
正在編譯項目…
“C:\Users\the-cat\AppData\Local\Arduino15\packages\arduino\tools\arm-none-eabi-gcc\4.8.3-2014q1/bin/arm-none-eabi-g++” -mcpu=cortex-m4 -mthumb -c -Os -w -std=gnu++11 -ffunction-sections -fdata-sections -fno-threadsafe-statics -nostdlib --param max-inline-insns-single=500 -fno-rtti -fno-exceptions -MMD “-D__SKETCH_NAME__=”"“sketch_dec14a.ino”""" -DF_CPU=120000000L -DARDUINO=10810 -DARDUINO_GROVE_UI_WIRELESS -DARDUINO_ARCH_SAMD -DVREFLESS -D__SAMD51P19A__ -DSEEED_GROVE_UI_WIRELESS -D__SAMD51__ -DUSB_VID=0x2886 -DUSB_PID=0x802D -DUSBCON -DUSB_CONFIG_POWER=100 “-DUSB_MANUFACTURER=“Seeed Studio”” “-DUSB_PRODUCT=“Seeed Grove UI Wireles”” “-IC:\Users\the-cat\AppData\Local\Arduino15\packages\Seeeduino\hardware\samd\1.6.0\cores\arduino/Adafruit_TinyUSB_Core” “-IC:\Users\the-cat\AppData\Local\Arduino15\packages\Seeeduino\hardware\samd\1.6.0\cores\arduino/Adafruit_TinyUSB_Core/tinyusb/src” -D__FPU_PRESENT -DARM_MATH_CM4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -DENABLE_CACHE -Os -DVARIANT_QSPI_BAUD_DEFAULT=50000000 “-IC:\Users\the-cat\AppData\Local\Arduino15\packages\arduino\tools\CMSIS\4.5.0/CMSIS/Include/” “-IC:\Users\the-cat\AppData\Local\Arduino15\packages\arduino\tools\CMSIS-Atmel\1.2.0/CMSIS/Device/ATMEL/” “-IC:\Users\the-cat\AppData\Local\Arduino15\packages\Seeeduino\hardware\samd\1.6.0\cores\arduino” “-IC:\Users\the-cat\AppData\Local\Arduino15\packages\Seeeduino\hardware\samd\1.6.0\variants\grove_ui_wireless” “C:\Users\the-cat\AppData\Local\Temp\arduino_build_11150\sketch\sketch_dec14a.ino.cpp” -o “C:\Users\the-cat\AppData\Local\Temp\arduino_build_11150\sketch\sketch_dec14a.ino.cpp.o”
Compiling libraries…
Compiling core…
使用已經編譯的文件:C:\Users\the-cat\AppData\Local\Temp\arduino_build_11150\core\variant.cpp.o
Using precompiled core: C:\Users\the-cat\AppData\Local\Temp\arduino_cache_851544\core\core_d69ed3199b1ac6c95f08461e651b83df.a
Linking everything together…
“C:\Users\the-cat\AppData\Local\Arduino15\packages\arduino\tools\arm-none-eabi-gcc\4.8.3-2014q1/bin/arm-none-eabi-gcc” “-LC:\Users\the-cat\AppData\Local\Temp\arduino_build_11150” -Os -Wl,–gc-sections -save-temps “-TC:\Users\the-cat\AppData\Local\Arduino15\packages\Seeeduino\hardware\samd\1.6.0\variants\grove_ui_wireless/linker_scripts/gcc/flash_with_bootloader.ld” “-Wl,-Map,C:\Users\the-cat\AppData\Local\Temp\arduino_build_11150/sketch_dec14a.ino.map” --specs=nano.specs --specs=nosys.specs -mcpu=cortex-m4 -mthumb -Wl,–cref -Wl,–check-sections -Wl,–gc-sections -Wl,–unresolved-symbols=report-all -Wl,–warn-common -Wl,–warn-section-align -o “C:\Users\the-cat\AppData\Local\Temp\arduino_build_11150/sketch_dec14a.ino.elf” “C:\Users\the-cat\AppData\Local\Temp\arduino_build_11150\sketch\sketch_dec14a.ino.cpp.o” “C:\Users\the-cat\AppData\Local\Temp\arduino_build_11150\core\variant.cpp.o” -Wl,–start-group “-LC:\Users\the-cat\AppData\Local\Arduino15\packages\Seeeduino\hardware\samd\1.6.0\variants\grove_ui_wireless” -larm_cortexM4lf_math -mfloat-abi=hard -mfpu=fpv4-sp-d16 “-LC:\Users\the-cat\AppData\Local\Arduino15\packages\Seeeduino\hardware\samd\1.6.0\variants\grove_ui_wireless” -lm “C:\Users\the-cat\AppData\Local\Temp\arduino_build_11150/…\arduino_cache_851544\core\core_d69ed3199b1ac6c95f08461e651b83df.a” -Wl,–end-group
“C:\Users\the-cat\AppData\Local\Arduino15\packages\arduino\tools\arm-none-eabi-gcc\4.8.3-2014q1/bin/arm-none-eabi-objcopy” -O binary “C:\Users\the-cat\AppData\Local\Temp\arduino_build_11150/sketch_dec14a.ino.elf” “C:\Users\the-cat\AppData\Local\Temp\arduino_build_11150/sketch_dec14a.ino.bin”
“C:\Users\the-cat\AppData\Local\Arduino15\packages\arduino\tools\arm-none-eabi-gcc\4.8.3-2014q1/bin/arm-none-eabi-size” -A “C:\Users\the-cat\AppData\Local\Temp\arduino_build_11150/sketch_dec14a.ino.elf”
項目使用了 12792 字節,佔用了 (2%) 程序存儲空間。最大爲 507904 字節。
在端口 COM32 使用 1200bps 開/關來強行重置
PORTS {COM1, COM32, } / {COM1, } => {}
PORTS {COM1, } / {COM1, COM31, } => {COM31, }
Found upload port: COM31
C:\Users\the-cat\AppData\Local\Arduino15\packages\arduino\tools\bossac\1.8.0-48-gb176eee/bossac -i -d --port=COM31 -U -i --offset=0x4000 -w -v C:\Users\the-cat\AppData\Local\Temp\arduino_build_11150/sketch_dec14a.ino.bin -R
Set binary mode
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
以下是花了一天時間在網上一個一個收集的參數解析:

“C:\Users\the-cat\AppData\Local\Arduino15\packages\arduino\tools\arm-none-eabi-gcc\4.8.3-2014q1/bin/arm-none-eabi-g++”//就是一個g++編譯器(可執行程序)
-mcpu:列出指定cpu名字//用法-mcpu=name//eg:-mcpu=cortex-m4
-mthumb的意義是:使用這個編譯選項生成的目標文件是Thumb的
-c:只對源文件編譯,不連接,所以生產.o文件而不是可執行文件
-Os:是使用了所有-O2的優化選項,但又不縮減代碼尺寸的方法。-O2:Gcc將執行幾乎所有的不包含時間和空間折中的優化。當設置O2選項時,編譯器並不進行循環打開()loop unrolling以及函數內聯。與O1比較而言,O2優化增加了編譯時間的基礎上,提高了生成代碼的執行效率
-w:不生產任何警告信息
-std= 選擇C語言編譯標準//eg:-std=gnu++11
-ffunction-sections -fdata-sections :用於除去不使用的函數與數據
-fno-threadsafe-statics :關閉對 static local 變量多餘的線程安全的開銷調用。
-nostdlib作用:不連接系統標準啓動文件和標準庫文件,只把指定的文件傳遞給連接器
–param max-inline-insns-single:單個可內聯的函數體最多能包含的指令數//eg:–param max-inline-insns-single=500
-fno-rtti:關閉對 dynamic_cast 和 typeid 的支持。如果你不需要這些功能,關閉它會節省一些空間。
-fno-rtti 禁用運行時類型信息
-fno-exceptions 禁用異常機制//一般只有對程序運行效率及資源佔用比較看重的場合纔會使用, 如果要做這兩個的話最好連libstdc++和其他所有的的c++庫都用這兩個參數重新編譯一遍, 否則光是你自己的程序禁用了這兩個特性, 而別的庫依然開着, 效果就大打折扣了
-x language:忽略源文件的後綴名,以指定的語言進行語法分析。也就是說,你可以將C源文件定義爲任意後綴名的文件,只要gcc中指定了-x c 參數即可。它對參數後的所有源文件都起作用,除非重新指定語言或-x none關閉它
-E: 預處理,主要是進行宏展開等步驟,生成的文件爲.i
-CC:【相當於gcc編譯器】
-DF_CPU:定義CPU頻率
-D:是用來在使用gcc/g++編譯的時候定義宏的(NAME=Peter -D 後面跟 key=value 表示定義key這個宏,它的內容是value)
-I參數就是用來指定程序要鏈接的庫,-I參數緊接着就是庫名
-mfloat-abi=hard:表明要使用FPU硬件來做浮點運算,並且,函數的參數直接傳遞到FPU的寄存器(s0、d0)中(soft"選項:表明不使用FPU硬件,而是使用GCC的整數算術運算來模擬浮點運算。"softfp"選項:表明要使用FPU硬件來做浮點運算,只是,函數的參數傳遞到整數寄存器(r0-r3)中,然後再傳遞到FPU中。)
-mfpu=fpv4-sp-d16//SAM4E搭載了Cortex-M4F FPU,它實現了FPv4-SP版本(SP表示單精度)的浮點數擴展。另外,它也搭載了32個32位的單精度寄存器,而這些寄存器也可以被當作16個64位的雙精度寄存器以進行load,store和move操作。所以需要將-mfpu賦值爲fpv4-sp-d16。其中d16表示有16個64位寄存器。
-MMD:(-M:生成文件關聯的信息。包含目標文件所依賴的所有源代碼,-MM:和-M的那個一樣,但是它將忽略由#include造成的依賴關係,-MMD:和-MM相同,但是輸出將導入到.d的文件裏面:)
-L:表示:編譯程序按照-L指定的路進去尋找庫文件,一般的在-L的後面可以一次用-l指定多個庫文件。-L/lib/表示到/lib/目錄下找庫文件
-l:用來指明編譯器要鏈接哪些庫
-Wl:選項告訴編譯器將後面的參數傳遞給鏈接器
-Wl,–gc-sections:如果帶有-Wl,–gc-sections參數,並且之前編譯目標文件時帶有-ffunction-sections、-fdata-sections參數,則鏈接器ld不會鏈接未使用的函數,從而減小可執行文件大小;(對應前面)
-save-temps:可以保存編譯過程中的中間文件,這裏面就包括了預處理之後的源碼
-Map:生成.map文件
–specs:(用法–specs=文件,eg:osys.specs)如果命令行中沒有指定 -specs=file 參數,那麼 gcc 就使用自帶的 specs,如果指定了 -specs=file 參數,那麼在處理完自帶的 specs 後,繼續處理參數給出的 specs 文件,而且可以通過多個 -specs=file 參數指定多個 specs 文件,gcc 會按出現的次序依次處理
-U:用於取消宏
-v:是查看系統目前使用的gcc版本

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章