女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

Linux下開發STM32 使用gcc-arm-none-eabi工具鏈編譯生成bin、hex文件

黃工的嵌入式技術圈 ? 來源:黃工的嵌入式技術圈 ? 作者:黃工的嵌入式技術 ? 2020-02-28 15:08 ? 次閱讀

1.為什么不是gcc

在開發stm32的時候,編譯工具鏈要使用gcc-arm-none-eabi,為什么不是gcc呢?這就要說到linux下的交叉編譯了,因為我們要在PC機上編譯出可以運行在ARM上的程序,使用gcc編譯出的是在PC上運行的程序,所以我們要使用gcc-arm-none-eabi進行交叉編譯~

2.gcc-arm-none-eabi toolchain 介紹及安裝

gcc-arm-none-eabi是一個開源的ARM開發工具鏈,適用于Arm Cortex-M和Coretex-A系列處理器,包括GNU編譯器(GCC),以及GDB,可用于Windows,Linux,MacOS上的交叉編譯。
gcc-arm-none-eabi在ubuntu軟件源倉庫中就有,但是版本比較陳舊:

在此我們從[ARM官方下載鏈接](https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads)選擇合適的版本下載(這里我選擇Linux64):

解壓下來是tar.ba2格式包,使用命令tar -jxf <要解壓的文件>解壓到我們要安裝的目錄:

為了以后使用方便,將文件夾重命名:

它下面的bin目錄就是我們要使用的編譯工具鏈:

share目錄的doc下包含了大量的使用幫助文檔,可以先略讀一二,特別是readme.txt:

接下來我們要將bin目錄添加到環境變量,這樣可以直接在命令行輸入要使用的工具名,然后系統就可以找到該工具,在此我們僅為當前用戶添加環境變量,使用vim ~/.bashrc編輯當前用戶配置文件,在最后添加export PATH=$PATH:/home/mculover666/gcc-arm-none-eabi/bin:

然后使用命令source ~/.bashrc更新系統路徑,使添加的環境變量立即生效:

然后輸入命令arm-none,然后按三下Tab(一定不要輸入全部),檢查系統是否可以自動補全:

如果系統可以提示,說明環境變量配置成功,可以開心的使用arm-none-eabi工具鏈啦~

3.從裸機工程開始

3.1.硬件說明

這里我使用的是野火霸道開發板,板載芯片為STM32F103ZET6,下載器使用e-link,這個下載器使用CMSIS-DAP下載程序,同時并帶有一個串口,非常好用~

板載RGB-LED的原理圖如圖所示:

3.2.新建空的裸機工程

首先新建一個文件夾mkdir 00-template-reg用來存放整個工程,然后整個工程包含三個文件:

startup_stm32f10x_hd.s:從固件庫中拷貝,注意不是arm文件夾下的,因為truestudio使用的是gcc編譯器,所以我們選擇truestudio文件夾下的啟動文件;

stm32f10x.h:空文件;

main.c:代碼如下:

#include"stm32f10x.h" intmain() { /*開啟GPIOB時鐘*/ *(unsignedint*)(0x40021000+0x18)|=1<<3; ????/*?配置PB0為推挽輸出?*/ ????*(unsigned?int*)(0x40010c00+0x00)?|=?1<<(4*0); ????/*?PB0輸出低電平,點亮綠色LED?*/ ????*(unsigned?int*)(0x40010c00+0x0c)?&=?~(1<<0); ????while(1); } void?SystemInit(void) { }

4.編譯

接下來就是激動人心的編譯步驟了~編譯的時候有兩種文件,一種是匯編啟動文件,一種是c源文件,接下來分別編譯:
首先需要說明一些編譯任何一個文件都需要帶上的參數:

參數 說明
-mthumb 表明使用的指令集(必需)
-mcpu=cortex-m3 表明芯片內核(必需)
-g 產生調試信息

4.1.啟動文件編譯

啟動文件一般是由匯編寫成,此處需要注意的是,匯編文件的格式有.S和.s之分:

大寫S:表明文件中含有預處理指令(比如#define),需要先進行處理;

小寫s:表明文件不需要處理,可以直接編譯;

之前我們添加的啟動文件是小寫.s,所以直接進行編譯,另外說一下,如果使用的是.S文件,那么需要帶上-x assembler-with-cpp參數。

接下來說明一些匯編文件gcc編譯器使用的參數:

參數 說明
-x assembler-with-cpp 先對文件進行預處理
-Wa,option 向匯編器Assembler傳遞參數

注:可以向匯編器傳遞的參數:

參數 說明
-W或--no-warn 關閉所有告警
--fatal-warnings 將所有的警告提示為錯誤
--warn 正常提示告警信息

所以,接下來我們可以使用如下的參數組合來編譯啟動文件(不進行預處理,并且正常提示告警信息):

arm-none-eabi-gcc-c-mthumb-mcpu=cortex-m3-g-Wa,--warn-ostartup_stm32f10x_hd.ostartup_stm32f10x_hd.s

4.2.C文件編譯

因為main.c中沒有特殊的東西,只是兩個函數,所以簡單的編譯一下就可以了:

參數 描述
-Wall 允許輸出所有警告

arm-none-eabi-gcc-c-mthumb-mcpu=cortex-m3-g-Wall-omain.omain.c

5.鏈接

鏈接重要的部分有兩點:鏈接文件和傳遞給鏈接器的參數。
鏈接文件在固件庫中給的示例工程中有,在下面這個目錄:


其中stm32_flash.ld是針對于STM32F103ZE的鏈接文件,如果是別的芯片,需要進行修改,將它復制到我們的工程中去:


然后就要讓鏈接器開始根據stm32_flash.ld這個文件對startup_stm32f10x_hd.o和main.o這兩個文件開始鏈接,生成包含了調試信息的elf文件,同時,我們還需要給鏈接器傳遞一些參數:

參數 描述
-T 指定鏈接文件

arm-none-eabi-gcc-otest.elfmain.ostartup_stm32f10x_hd.o-mthumb-mcpu=cortex-m3-Tstm32_flash.ld-specs=nosys.specs-static-Wl,-cref,-u,Reset_Handler-Wl,-Map=test.map-Wl,--gc-sections-Wl,--defsym=malloc_getpagesize_P=0x80-Wl,--start-group-lc-lm-Wl,--end-group

6.生成bin文件和hex文件

利用arm-none-eabi-objcopy工具可以將elf文件轉化為適合于單片機的bin文件和hex文件,其中參數-O(大寫o)用于指定輸出文件的格式(默認是bin格式)

arm-none-eabi-objcopytest.elftest.bin arm-none-eabi-objcopytest.elf-Oihextest.hex

7.編寫一個makefile雛形

TARGET=test CC=arm-none-eabi-gcc OBJCOPY=arm-none-eabi-objcopy RM=rm-f CORE=3 CPUFLAGS=-mthumb-mcpu=cortex-m$(CORE) LDFLAGS=-Tstm32_flash.ld-Wl,-cref,-u,Reset_Handler-Wl,-Map=$(TARGET).map-Wl,--gc-sections-Wl,--defsym=malloc_getpagesize_P=0x80-Wl,--start-group-lc-lm-Wl,--end-group CFLAGS=-g-o $(TARGET):startup_stm32f10x_hd.omain.o $(CC)$^$(CPUFLAGS)$(LDFLAGS)$(CFLAGS)$(TARGET).elf startup_stm32f10x_hd.o:startup_stm32f10x_hd.s $(CC)-c$^$(CPUFLAGS)$(CFLAGS)$@ main.o:main.c $(CC)-c$^$(CPUFLAGS)$(CFLAGS)$@ bin: $(OBJCOPY)$(TARGET).elf$(TARGET).bin hex: $(OBJCOPY)$(TARGET).elf-Oihex$(TARGET).hex clean: $(RM)*.o$(TARGET).*

使用命令make編譯生成elf文件;

使用命令make bin將elf文件轉化生成bin文件;

使用命令make hex將elf文件轉化生成hex文件;

使用命令make clean即可清除掉所有編譯產生的文件。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11457

    瀏覽量

    212767
  • STM32
    +關注

    關注

    2289

    文章

    11011

    瀏覽量

    362329
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    可以在MCUXpressoIDE中哪些位置管理工具

    使用 arm-none-eabi-gcc,它應該是相同的,與 13.2 版相同。我不知道為什么我會收到這么多這樣的錯誤
    發表于 04-10 07:37

    為什么會報錯Could not determine GDB version using command: arm-none-eabi-gdb --version?

    我已經重啟電腦了,沒用; 重裝軟件沒有,沒有; 將ST_link_server卸載重裝也沒有; 將arm-none-eabi-gdb加入windows 11系統環境變量,也沒用; 將軟件的GDB
    發表于 03-12 08:08

    ubuntu24.04上安裝gcc工具出現報錯怎么解決?

    虛擬機安裝的ubuntu24.04.1,默認gcc版本13,從芯來官網下載了對應的gcc版本的工具,到最后編譯報錯: riscv64-un
    發表于 03-07 12:39

    stm32cubeide編譯的時候報錯,無法生成hex文件怎么解決?

    stm32cubeide編譯的時候報錯,并且無法生成hex文件怎么辦急急急!
    發表于 03-07 08:17

    DM8168 valgrind編譯失敗是什么原因導致的?

    =arm-none-linux-gnueabi CC=arm-none-linux-gnueabi-gcc error: checking for the kernel version...
    發表于 03-03 06:03

    stm32cubmx生成的makefile編譯無法啟動線程怎么解決?

    f103vct6 的 make編譯環境是 windows + gcc-arm-none-eabi-10.3-2021.10-win32 + xpack-windows-build-tools-4.4.1-2-win32-x64 有沒有人遇到同樣的問題,求解,謝謝!
    發表于 09-27 09:27

    使用vscode始終無法找到頭文件怎么解決?

    為“windows-gcc-arm”:“D:/env-windows/tools/gnu_gcc/arm_gcc/mingw/bin/arm-non
    發表于 09-27 06:33

    【米爾NXP i.MX 93開發板試用評測】2、異構通信環境搭建和源碼編譯

    build_all.sh和clean_all.sh兩個腳本添加運行權限,然后設置編譯器環境變量 export ARMGCC_DIR=\"/mnt/MyNAS/walker/.bin/tools/gcc-arm-none-eabi
    發表于 09-20 23:19

    linux開發板如何編譯curl

    準備開發環境 確保你的開發板已經安裝了編譯 curl 所需的工具,包括 gcc 、 make 和可能的其他庫。如果
    的頭像 發表于 08-30 15:33 ?1230次閱讀

    【飛凌嵌入式OK3576-C開發板體驗】應用編譯運行

    源碼需要下載的庫文件編譯前準備 環境說明 開發環境操作系統:Ubuntu24.04 64 位版 交叉工具:aarch64-non-
    發表于 08-26 17:55

    bin文件怎么燒錄到stm32

    燒錄bin文件STM32微控制器是一個相對復雜的過程,涉及到硬件連接、軟件配置和固件燒錄等多個方面。 一、硬件準備 STM32開發
    的頭像 發表于 08-22 09:38 ?3864次閱讀

    openharmony移植AT32F407編譯時錯誤

    /gcc-arm-none-eabi-10-2020-q4-major-master/bin/../lib/gcc/arm-none-eabi/12.3.1/../../../../
    發表于 08-18 17:04

    百問網全志T113-PRO LVGL環境配置

    。 進入gcc工具文件目錄的bin目錄中查看交叉編譯工具
    發表于 08-01 10:11

    FRDM-MCXN947的純Linux命令行環境搭建

    arm-none-eabi-gccarm官網下載標準工具arm-none-eabi-gcc),并解壓縮。由于RTT可以直接在腳本里指
    發表于 07-28 22:55

    在ubuntu 24.04嘗試使用riscv64-linux-musleabi_for_x86_64-pc-linux-gnu工具編譯cv1800大核出現報錯的原因?

    在ubuntu 24.04嘗試使用riscv64-linux-musleabi_for_x86_64-pc-linux-gnu工具編譯c
    發表于 07-16 08:20