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

来源:https://www.cnblogs.com/zarlinq/archive/2019/02/24/10425218.html
-Advertisement-
Play Games

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下同樣無法成功編譯(花費一整天時間研究出來的血一般的教訓)。

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、問題描述 進行winform 開發我們在進行數據交換時避免不了使用多線程或非同步方法,這樣操作也將避免不了跨線程對控制項進行操作(賦值、修改屬性)。 下麵通過一個測試說明一下問題 點擊一個按鈕非同步對textbox進行賦值 運行測試結果 1 private void button1_Click(obj ...
  • 我們一般下載中文文件名一般會utf-8編碼再下載,火狐瀏覽器會出現文件名亂碼,解決辦法,火狐瀏覽器文件名不編碼,直接下載: ...
  • 上一篇我們說到大文件的分片下載、斷點續傳、秒傳,有的博友就想看分片下載,我們也來總結一下下載的幾種方式,寫的比較片面,大家見諒^_^。 下載方式: 1、html超鏈接下載; 2、後臺下載(四種方法:返回filestream、返回file、TransmitTile方法、Response分塊下載)。 1 ...
  • //定義變數 bool a = false; //正則表達式 string b = @" ^ (13[0 - 9] | 14[5 | 7] | 15[0 | 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9] | 18[0 | 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9]) ...
  • 最近正在使用SUSE系統,因為項目環境是沒有外網的。 網上查找SUSE的資料比較少,於是整理了一下,希望對有需要的人有一點點幫助。 "SUSE12Sp3安裝配置.net core 生產環境(1) IP,DNS,網關,SSH,GIT" "SUSE12Sp3安裝配置.net core 生產環境(2) 離 ...
  • listbox使用DataSource進行數據綁定和刪除,大家肯定都會,寫這個隨筆只是因為。。。。這是一年半以前剛進公司的我遺留的bug,現在看看當時竟然沒有解決 - -現在寫個測試程式,寫個隨筆記錄一下,當時萌新的我。。。首先聲明瞭一個類,要綁定的類型。 //聲明一個全局集合 public Lis ...
  • 定時任務 Wpf.Quartz.Demo.1已經能運行了,本節開始用wpf搭界面。 準備工作: 1.界面選擇MahApp.Metro 在App.xaml添加資源 <Application.Resources> <ResourceDictionary> <ResourceDictionary.Merg ...
  • Quartz 是個開源的作業調度框架. 安裝:Install-Package Quartz 官網文檔地址:https://www.quartz-scheduler.net/documentation/quartz-3.x/tutorial/using-quartz.html 資源比較多,這裡不做介紹 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...