單片機爬坑記-03-編譯環境

Arduino IDE是最難用又最好用的單片機IDE,沒有之一!難用之處在於沒有自動補全(這一點最是難受,但又最是無處說理),庫文檔也經常不全,時不時就要開Source Insight看看庫文件的源代碼,非常麻煩;好用之處則在於庫管理和開發板管理極爲方便,調用某個庫的時候須要#include的頭文件也是一鍵完成,尤爲適用於新建工程(先把全部頭文件#include上)和庫管理(開發板相關文件通常不怎麼變更)。shell

尋求一個「能自動補全、方便管理項目、省心省事不折騰、能跨平臺做業」的IDE是天然需求,最好這IDE在單片機開發方面還具有高度通用性。json

Keil和IAR,因爲某些衆所周知的緣由,直接不考慮。函數

VSCode(Visual Studio Code)簡直就一通用單片機開發IDE神器,目前已經可以搞定整個編碼、編譯、連接過程的目標平臺,主要包括Arduino、STM3二、Tiva C、ESP8266(及ESP32)。工具

Arduino:在VSCode下有兩種方案可選,一種是VSCode平臺的擴展插件「Arduino」,該插件只要根據提示將Arduino IDE的目錄設置好,就可以直接讓VSCode完成Arduino代碼燒寫所有過程,並且離線完成,VSCode自帶強悍的自動補全和項目管理,所以這種方式徹底能夠實現基於Arduino平臺的複雜項目開發,對基於Arduino平臺的開發而言,此是首選方案;另外一種是VSCode平臺的擴展插件「PlatformIO IDE」,該擴展插件須要和IoT Utility一併安裝,缺點是不能離線操做,也沒有插件「Arduino」方便使用,但就Arduino開發而言,算是一個能夠考慮的備選方案。ui

STM3二、ESPESP8266(及ESP32):VSCode平臺的擴展插件「PlatformIO IDE」在這些具備較常見的芯片及開發板方面,優點是很是明顯的,使用時惟一須要注意的主要有三點:一、儘可能直接使用插件內「New Project」或「Project Example」建項目,插件能聯網自動完成設置文件的處理,不然自行新建文件夾和文件的話,一小堆設置等着慢慢琢磨,浪費時間,若是使用插件內「New Project」或「Project Example」建項目時卡住,能夠先關閉工做區(強烈建議使用工做區加載不一樣配置的方式進行開發),再打開,此時插件從新加載,建項目就比較快;二、不要試圖在c_cpp_properties.json文件中更改includePath,插件會自動恢復,因此外部庫文件差很少只能放在項目文件夾「include」或「src」中,此時應當特別注意外部庫文件中的#include路徑問題;三、右鍵選擇「PlatformIO:build」後,插件是啓動命令行調用腳本的方式進行編譯,而在Windows系統下命令行默認是cmd,cmd這玩意是一個不支持命令行中有空格的落後玩意,因此最好安裝Powershell,並在Powershell中用Set-ExecutionPolicy RemoteSigned提高權限(對powershell.exe文件右鍵「以管理員身份運行」)。(PS:Powershell是極好用的命令行工具,大力推薦!!)(PS:PS:ConEmu是極好用的命令行窗口軟件,大力推薦!!)編碼

Tiva C:/*  實際上,在「PlatformIO IDE」中也有對Tiva C的支持,但在「PlatformIO IDE」中新建的Tiva C工程,所包含的庫函數較少(基於libopencm3),TI官方但是提供了整整一個TivaWare C,並且TI官方還提供了tidrivers標準庫(並不兼容於TivaWare C),這libopencm三、TivaWare C、tidrivers三個庫相互不兼容,構成了Tiva C混亂的函數庫,其中TivaWare C相對來講是最好用的庫(對片上外設和外部設備的支持最豐富),而在「PlatformIO IDE」中新建的Tiva C工程想要使用TivaWare C,首先要面對的是一大堆文件的修改(主要解決#include路徑問題)和刪除(避免和「PlatformIO IDE」的編譯腳本有衝突),並且前面說了「PlatformIO IDE」建的項目不能更改includePath,以致於TivaWare C得所有挪到項目文件夾「include」或「src」中,臃腫且麻煩。  */spa

所以祭出另外一大VSCode另外一大殺器,擴展插件「IAR Embedded Workbench」!該插件基本功能是根據IAR的ewp文件對項目進行編譯、連接,生成所需的bin文件。使用嘛……打開IAR新建一個工程?不存在的!TivaWare C中有例程example,其中的文件都已經處理好了各項設置,本着儘量省心省事的基本態度,能夠直接將TivaWare C整個文件夾COPY到項目文件夾中,選定一個例程(如examples/boards/ek-tm4c123gxl/freertos_demo),將該例程文件夾總體複製一個備份(方便之後再次使用),在iar.json文件中修改「project」的值(如examples/boards/ek-tm4c123gxl/freertos_demo/freertos_demo.ewp),對於生成的目標bin文件,在dep文件中有<outputs>標籤訂義了路徑,在ewp文件的「OOCOutputFile」項裏定義名稱,函數入口(通常是main函數)在ewd文件中的「RunToName」項裏定義,生成的bin文件可經過TI官方工具UniFlash進行燒寫。插件

該方式好處在於,例程中對於庫文件的#include路徑已經所有定義好,到手即用。可是麻煩之處在於兩點:命令行

一、爲了確保#include路徑無誤,例程文件所在位置通常不該改變,可是爲了方便管理,能夠在工做區設置文件(code-workspace文件)中增長"folders"項內容,以方便項目管理,例如:code

"folders": [

        {

"path": "."

        },

        {

"path": "TivaWareC/examples/boards/ek-tm4c123gxl/freertos_demo",

"name": "freertos_demo"

        },

    ]

二、必須本機IAR能成功編譯,IAR自己不能成功編譯的在上述方式中一樣不能成功編譯,例如:Nuvoton系列的單片機,要在IAR下成功編譯須要安裝一個Nuvoton官方提供的驅動Nu-Link_IAR_Driver,恰巧有時候這Nuvoton的安裝文件不正常工做(卡在安裝界面不動),致使IAR在編譯Nuvoton的單片機項目時缺庫,此時因爲IAR自己不能成功編譯,所以在VSCode下一樣沒法成功編譯(花費一成天時間研究出來的血通常的教訓)。

---------------------------------

相關文章
相關標籤/搜索