Arduino IDE是最難用又最好用的單片機IDE,沒有之一!難用之處在於沒有自動補全(這一點最是難受,但又最是無處說理),庫文檔也常常不全,時不時就要開Source Insight看看庫文件的源代碼,很是麻煩;好用之處則在於庫管理和開發板管理極為方便,調用某個庫的時候需要#include的頭文件 ...
Arduino IDE是最難用又最好用的單片機IDE,沒有之一!難用之處在於沒有自動補全(這一點最是難受,但又最是無處說理),庫文檔也常常不全,時不時就要開Source Insight看看庫文件的源代碼,很是麻煩;好用之處則在於庫管理和開發板管理極為方便,調用某個庫的時候需要#include的頭文件也是一鍵完成,尤其適用於新建工程(先把所有頭文件#include上)和庫管理(開發板相關文件一般不怎麼變動)。
尋求一個“能自動補全、方便管理項目、省心省事不折騰、能跨平臺作業”的IDE是自然需求,最好這IDE在單片機開發方面還具備高度通用性。
Keil和IAR,由於某些眾所周知的原因,直接不考慮。
VSCode(Visual Studio Code)簡直就一通用單片機開發IDE神器,目前已經能夠搞定整個編碼、編譯、鏈接過程的目標平臺,主要包括Arduino、STM32、Tiva C、ESP8266(及ESP32)。
Arduino:在VSCode下有兩種方案可選,一種是VSCode平臺的擴展插件“Arduino”,該插件只要根據提示將Arduino IDE的目錄設置好,就能夠直接讓VSCode完成Arduino代碼燒寫全部過程,而且離線完成,VSCode自帶強悍的自動補全和項目管理,因此這種方式完全可以實現基於Arduino平臺的複雜項目開發,對基於Arduino平臺的開發而言,此是首選方案;另一種是VSCode平臺的擴展插件“PlatformIO IDE”,該擴展插件需要和IoT Utility一併安裝,缺點是不能離線操作,也沒有插件“Arduino”方便使用,但就Arduino開發而言,算是一個可以考慮的備選方案。
STM32、ESPESP8266(及ESP32):VSCode平臺的擴展插件“PlatformIO IDE”在這些具有較常見的晶元及開發板方面,優勢是非常明顯的,使用時唯一需要註意的主要有三點:1、儘量直接使用插件內“New Project”或“Project Example”建項目,插件能聯網自動完成設置文件的處理,否則自行新建文件夾和文件的話,一小堆設置等著慢慢琢磨,浪費時間,如果使用插件內“New Project”或“Project Example”建項目時卡住,可以先關閉工作區(強烈建議使用工作區載入不同配置的方式進行開發),再打開,此時插件重新載入,建項目就比較快;2、不要試圖在c_cpp_properties.json文件中更改includePath,插件會自動恢復,所以外部庫文件差不多只能放在項目文件夾“include”或“src”中,此時應當特別註意外部庫文件中的#include路徑問題;3、右鍵選擇“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),這libopencm3、TivaWare C、tidrivers三個庫相互不相容,構成了Tiva C混亂的函數庫,其中TivaWare C相對來說是最好用的庫(對片上外設和外部設備的支持最豐富),而在“PlatformIO IDE”中新建的Tiva C工程想要使用TivaWare C,首先要面對的是一大堆文件的修改(主要解決#include路徑問題)和刪除(避免和“PlatformIO IDE”的編譯腳本有衝突),而且前面說了“PlatformIO IDE”建的項目不能更改includePath,以至於TivaWare C得全部挪到項目文件夾“include”或“src”中,臃腫且麻煩。 */
因此祭出另一大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路徑已經全部定義好,到手即用。但是麻煩之處在於兩點:
1、為了確保#include路徑無誤,常式文件所在位置一般不應改變,但是為了方便管理,可以在工作區設置文件(code-workspace文件)中增加"folders"項內容,以方便項目管理,例如:
"folders": [
{
"path": "."
},
{
"path": "TivaWareC/examples/boards/ek-tm4c123gxl/freertos_demo",
"name": "freertos_demo"
},
]
2、必須本機IAR能成功編譯,IAR本身不能成功編譯的在上述方式中同樣不能成功編譯,例如:Nuvoton系列的單片機,要在IAR下成功編譯需要安裝一個Nuvoton官方提供的驅動Nu-Link_IAR_Driver,恰巧有時候這Nuvoton的安裝文件不正常工作(卡在安裝界面不動),導致IAR在編譯Nuvoton的單片機項目時缺庫,此時由於IAR本身不能成功編譯,因此在VSCode下同樣無法成功編譯(花費一整天時間研究出來的血一般的教訓)。
---------------------------------