這篇文章記錄了最近探索Arduino與
台灣晶心科技Andes出的Andino M1('Andino'沒打錯!!他真的叫這名字)相容Arduino的IoT板子
的一些hacking與紀錄,歡迎各位多多指教~
吐槽一下,在下圖看到橘框處竟然看到ARM Cortex-M3,不過在這邊這顆ARM似乎只拿來處理介面轉換,不然就都用這顆ARM應該效能更好? XDD
Arduino範例程式在Arduino IDE的安裝位置下,預設為C:\Program Files (x86)\Arduino\examples
Blink LED範例在C:\Program Files (x86)\Arduino\examples\01.Basics\Blink
用File->Open開啟它,按下Upload就可以下到板子上了~
哈哈遇到問題了齁,對,nds32le-elf-g++ exit status -1073741515 Error compiling
請設定PATH環境變數,加入(thlin請改為你的使用者名稱)
C:\Users\thlin\AppData\Local\Arduino15\packages\Andino\tools\nds32le-elf-mculib-v3m\4.0.3\cygwin\bin
環境變數設定完成後,重啟Arduino IDE即可修正此問題~
台灣晶心科技Andes出的Andino M1('Andino'沒打錯!!他真的叫這名字)相容Arduino的IoT板子
的一些hacking與紀錄,歡迎各位多多指教~
先來看看本尊
是的就是它!!小小一片吐槽一下,在下圖看到橘框處竟然看到ARM Cortex-M3,不過在這邊這顆ARM似乎只拿來處理介面轉換,不然就都用這顆ARM應該效能更好? XDD
下載與安裝Arduino IDE
請到官網下載Arduino IDE
如果是使用Andes Andino M1,請務必下載Windows平台的
因為目前board support package只支援windows版...
因為目前board support package只支援windows版...
Arduino Board Manger
下載安裝好之後,接下來是加入Andes Andino M1的board support到Arduino
這邊有一個很重要的雷點!!!就是Editor language務必要設為English(紅框處,預設使用Windows系統預設語言),否則在開啟Board Manger時會出現java.lang.RuntimeException: java.lang.IllegalArgumentException: Unmatched braces in the pattern.的錯誤訊息
在Additional Board Manger URLs中,輸入(橘框處): http://knect.me/andino/M1/package_Andino_knectme_index.json
然後按OK,到board manger按instasll安裝(點紅框處會出現按鈕):
安裝成功後,會看到有Andino M1可選(紫框處)
關於package_Andino_knectme_index.json的原理,我們可以看到在這個json檔案內,定義了platform與tools的資訊,Arduino會在開啟Board Manger時,去下載讀取所有使用者額外新增的json網址,然後在按下安裝時去下載於該檔內定義的toolchain,這些工具組被儲存在Arduino IDE Preference的位置,也就是剛剛preference那個畫面橘框下面的那個位置設定
而關於此JSON的詳細內容,可以參考以下網址:
https://github.com/arduino/Arduino/wiki/Unofficial-list-of-3rd-party-boards-support-urls
https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.6.x-package_index.json-format-specification
https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5-3rd-party-Hardware-specification
這邊有一個很重要的雷點!!!就是Editor language務必要設為English(紅框處,預設使用Windows系統預設語言),否則在開啟Board Manger時會出現java.lang.RuntimeException: java.lang.IllegalArgumentException: Unmatched braces in the pattern.的錯誤訊息
在Additional Board Manger URLs中,輸入(橘框處): http://knect.me/andino/M1/package_Andino_knectme_index.json
然後按OK,到board manger按instasll安裝(點紅框處會出現按鈕):
安裝成功後,會看到有Andino M1可選(紫框處)
關於package_Andino_knectme_index.json的原理,我們可以看到在這個json檔案內,定義了platform與tools的資訊,Arduino會在開啟Board Manger時,去下載讀取所有使用者額外新增的json網址,然後在按下安裝時去下載於該檔內定義的toolchain,這些工具組被儲存在Arduino IDE Preference的位置,也就是剛剛preference那個畫面橘框下面的那個位置設定
而關於此JSON的詳細內容,可以參考以下網址:
https://github.com/arduino/Arduino/wiki/Unofficial-list-of-3rd-party-boards-support-urls
https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.6.x-package_index.json-format-specification
https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5-3rd-party-Hardware-specification
來閃LED吧!!
終於在歷盡千辛萬苦(XD)後,完成工具安裝,快來run第一支Arduino程式!!Arduino範例程式在Arduino IDE的安裝位置下,預設為C:\Program Files (x86)\Arduino\examples
Blink LED範例在C:\Program Files (x86)\Arduino\examples\01.Basics\Blink
用File->Open開啟它,按下Upload就可以下到板子上了~
哈哈遇到問題了齁,對,nds32le-elf-g++ exit status -1073741515 Error compiling
請設定PATH環境變數,加入(thlin請改為你的使用者名稱)
C:\Users\thlin\AppData\Local\Arduino15\packages\Andino\tools\nds32le-elf-mculib-v3m\4.0.3\cygwin\bin
環境變數設定完成後,重啟Arduino IDE即可修正此問題~
Arduino的編譯流程
在成功執行第一支Arduino程式後,就讓我們來探討
剛剛一連串IDE吐的訊息吧~!!
So you wanna play with magic?
Boy, you should know what you're compiling for XDDDD
首先,我們剛剛開啟的blink程式碼是Blink.ino
附檔名為.ino,是arduino的sketch檔案
Step1: arduino-builder -dump-prefs
根據"C:\Program Files (x86)\Arduino\arduino-builder" --help說明為:
-dump-prefs=false: dumps build properties used when compiling
不過在Andes Andino M1,此步似乎沒有吐出東西
Step2: arduino-builder -compile
這是最關鍵的一步,在這一步中,會產生core、libraries、preproc、sketch資料夾
改寫sketch,並且呼叫toolchain編譯使用者程式碼、core,並產生.elf
如下圖:
剛剛一連串IDE吐的訊息吧~!!
So you wanna play with magic?
Boy, you should know what you're compiling for XDDDD
首先,我們剛剛開啟的blink程式碼是Blink.ino
附檔名為.ino,是arduino的sketch檔案
Step1: arduino-builder -dump-prefs
根據"C:\Program Files (x86)\Arduino\arduino-builder" --help說明為:
-dump-prefs=false: dumps build properties used when compiling
不過在Andes Andino M1,此步似乎沒有吐出東西
Step2: arduino-builder -compile
這是最關鍵的一步,在這一步中,會產生core、libraries、preproc、sketch資料夾
改寫sketch,並且呼叫toolchain編譯使用者程式碼、core,並產生.elf
如下圖:
其中sketch內為經過改寫為.cpp檔的,加上Arduino.h的標頭檔與function prototype宣告
而core則是Arduino的核心程式碼的.o位置,以Andino M1為例,核心程式碼位於C:\Users\使用者\AppData\Local\Arduino15\packages\Andino\hardware\nds32\1.6.5\cores\arduino
在此也能找到main.cpp
libraries在此例中沒有用到、preproc應該是給ctag index使用
Step3: m2c_burn.bat
產生.bin檔案,燒錄到硬體
剩下更深的探討就留給下一篇吧~
而core則是Arduino的核心程式碼的.o位置,以Andino M1為例,核心程式碼位於C:\Users\使用者\AppData\Local\Arduino15\packages\Andino\hardware\nds32\1.6.5\cores\arduino
在此也能找到main.cpp
libraries在此例中沒有用到、preproc應該是給ctag index使用
Step3: m2c_burn.bat
產生.bin檔案,燒錄到硬體
剩下更深的探討就留給下一篇吧~
留言
張貼留言