[工具] 在 Arduino IDE 環境下,也能編譯其他廠商的開發板

        Arduino 開發板發行多年了,也是 DIY maker 很喜歡拿來開發的板子之一,主要是板子的周邊介面讓入門者簡易明白,加上 IDE (Integrated Develop Environment) 這套工具介面簡潔且非常容易上手,這些優點讓 DIY maker 能夠很快驗證某些電路或功能和應用。另外,在教育方面,由於免費的開發工具以及初學者能負擔的板子價格,所以在理工科系也會拿 Arduino 做為課程,設計各類嵌入式系統的應用。不過,本文並不打算介紹 Arduino 開發板如何使用,而是介紹 Arduino IDE 這套工具如何編譯 ⌈非⌋ Arduino 板子,借用 IDE 來開發第三方的板子。

        隨著 Arduino 這個生態系統發展多年後,使用者越來越多,在 DIY maker 的討論越來越火熱的情況下,吸引來自 ⌈非⌋ Arduino 生態的廠商也希望用 IDE 工具來編譯自家的板子。既然 IDE 是編譯工具,能直接編譯其他 ⌈非⌋ Arduino 廠商的晶片嗎?答案當然是不行了,因為每家晶片的核心不見得相同 (Arduino 是 Atmel AVR 核心),不能用同一套 compiler tool-chain 工具,有興趣可以參考前面的 "漫談 ARM cross compiler 環境" 一文。因此,在 IDE 裡面提供一個欄位,讓使用者輸入網址,並自動下載第三方開發板的開發工具 (tool-chain),該工具會自動整合到 IDE 裡面,使用者也可以非常便利地在 Arduino IDE 開發第三方的程式。下圖一所示為支援樂鑫 ESP32 的網址,以及瑞昱阿米巴 Ameba 開發板的網址。


圖一:額外開發板的下載網址


        IDE 自動下載並安裝後,我們在下圖的目錄中能找到第三方廠商的工具包,明顯看出工具包都包含了 hardware 和 tools 資料夾。其中,tools 裡面就是編譯的工具程式 (包括 compile 和 link...),還有燒錄韌體到板子的程式。以 EPS32 為例,這晶片的核心是 Xtensa 處理器,原廠用開源的 gcc 製作了一套屬於這顆處理器的編譯工具,在目錄底下就找到 "xtensa-esp32-elf-c++.exe" .... 等編譯或 link 的執行檔,能在 Windows 環境下編譯 source code 成為 ESP32 處理器能運行的韌體。燒錄工具為 esptool.py,工具包裡也有提供。

        同樣在 realtek 目錄下,也能找到編譯工具程式,瑞昱的阿米巴系列開發板上面的核心晶片採用 ARM Cortex,所以瑞昱公司用開源的 gcc 製作了能編譯 ARM 晶片的工具,我們也能在目錄下找到如 "arm-none-eabi-c++.exe"....等在 Windows 環境下的執行檔,工具包也提供了燒錄上傳韌體的工具。上述的這些執行檔已經被整合到 Arduino IDE 裡了,因此 IDE 根據使用者設定的板子來執行適當的編譯工具,經過 compilelink 後,並燒錄上傳 firmware image 到開發板子上。

        在工具包的 hardware 目錄,主要是開發板的驅動程式和廠商提供的範例程式,我們在 IDE 畫面上看到的範例都是來自這個目錄裡面。有些廠商也會把 SDK source code 放到這個目錄底下,所以我們想要找尋 *.ino 函數或宣告的源頭,倒是可以從這目錄開始找起。

圖二:額外開發板的編譯工具目錄


        如果對於其他 IDE 還有興趣的話,可以安裝 Visual Studio Code (VS Code),在這套 IDE 環境中,安裝 PlatformIO 插件,這個插件支援很多板子,如:Arduino、STM 系列板子、ESP32...等,因此會下載第三方廠商的編譯和燒錄工具,像圖三所示為 ARM 的工具和 ESP32 的工具包。編譯工具能在 Windows 環境下執行,如果是 Linux 作業系統,插件就會下載 Linux 環境的編譯工具,這能滿足各類使用者。最後,IDE 的選擇還是以自己熟悉方便為主。

圖三:PlatformIO 插件的編譯工具


        每次在 Arduino IDE 的程式中,總會記得最重要的兩個起始函數:setup( ) 和 loop( ),為何每次開啟程式要先呼叫這兩個呢?首先,我們打開第三方廠商的 hardware 目錄下,應該能搜尋到 main.cpp 檔案,檢查這個路徑看看吧。

            \esp32\hardware\esp32\1.0.6\cores\esp32
            \realtek\hardware\AmebaD\3.1.0\cores\arduino

看完後,清楚明白它是一個 FreeRTOS 作業系統,然後創建一個 main task,先呼叫 setup 函數當作初始化,然後進入一個迴圈後,再呼叫 loop 函數。挖掘這些底層的程式碼後,我們就能更清楚整個系統運行的架構了。

留言

此網誌的熱門文章

[筆記] Raspberry Pi 樹莓派的軟體開發

[筆記] ESP32 在 VS Code 開發環境的編譯與除錯

[應用] 在 ESP32 Audio 開發板的 VoIP 範例

[應用] STM32 DFU (Device Firmware Upgrade)

[模組] 無線資料傳輸:nRF905 和 nRF24L01 (以 Arduino 為控制器)

[筆記] Visual Studio 遠端偵錯的設定步驟

[模組] Arduino + 藍芽 BLE 模組