跳到主要內容

[Arduino]Inside Arduino: Andes Andino M1

這篇文章記錄了最近探索Arduino與
台灣晶心科技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版...

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

來閃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
如下圖:

其中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檔案,燒錄到硬體

剩下更深的探討就留給下一篇吧~

留言

這個網誌中的熱門文章

Run Android VTS with Android R emulator through WSL

Background Android VTS The Android Vendor Test Suite (VTS) provides extensive new functionality for Android testing and promotes a test-driven development process. Android R emulator Run the latest Android R image from Google CI build artifacts WSL WSL is a collection of components that enables native Linux ELF64 binaries to run on Windows . It contains both user mode and kernel mode components. It is primarily comprised of: User mode session manager service that handles the Linux instance life cycle Pico provider drivers (lxss.sys, lxcore.sys) that emulate a Linux kernel by translating Linux syscalls Pico processes that host the unmodified user mode Linux (e.g. /bin/bash) It is the space between the user mode Linux binaries and the Windows kernel components where the magic happens. By placing unmodified Linux binaries in Pico processes we enable Linux system calls to be directed into the Windows kernel. The lxss.sys and lxcore.sys drivers translate the Linux s...

[Qt][Embedded][PXA270]
Porting Qt 4.8.6 for Creator XScale PXA270

這篇文章介紹這學期我在嵌入式作業系統課程,使用Creator XScale PXA270板子的一些學習筆記與製作final project的一些過程,歡迎各位多多指教~ 背景介紹 Creator XScale PXA270開發版是一塊由 新華電腦(microtime) 公司出品的 模組化XScale/ARM/SoC/FPGA/DSP嵌入式行動通訊發展平台 ,在此課程與final project主要使用的是"Create XScale‐PXA270 子板"與"MTLCD‐0708048 LCD Module",在Create XScale‐PXA270子板上的為Intel(現在已出售給Marvell)的 Xscale系列 PXA270 處理器,基於ARMv5TE架構指令集,在旁附有SDRAM Memory 64MB、Flash Memory 32MB、SD Card Connectors、RJ45 10/100 Base‐T Ethernet Interface、USB 1.1 Device/Host Port各一、AC97 Audio Codec(Line_in、Mic_in、Headphone)、ADC Interface*4、PWM Interface、CMOS Camera Interface、TFT-LCD Interface、GPIO Interface...等;在軟體功能部分,由新華科技提供了GNU GCC cross compiler toolchain(arm-unknown-linux-gnu-gcc 4.0.2)、Uboot 1.1.5、Linux Kernel 2.6.15.3與patch(提供支援子板上的Ethernet、USB Host、TFT‐LCD(Frame buffer、Touch Screen)、AC97‐Codec...等與母板LED、7‐Seg LED、Key Pad...等的device driver)、rootfs,相關的實驗環境設定可以參考 User Guide 。 看到以上這麼多的軟硬體介面,別以為這板子有多強,其實這是 2006 年 ASUS P535 手機使用的規格了,不禁讓人感嘆科技進步之快阿~ 在此附上開發版本尊 Qt 是自由且開放原始碼的跨平台C...

[Android][AOSP][ddmlib][Intelij IDEA][Gradle]搭建Android ddmlib編譯環境

Android ddmlib在AOSP的platform/tools/base的repo內 可以使用以下指令將整個repo的master branch抓回: git clone https://android.googlesource.com/platform/tools/base 取其中的annotations、common、ddmlib 建立Intelij IDEA專案 使用Intelij IDEA開一新的Java Project,GroupId、ArtifictedId、Version隨便,並使用graddle wrapper方式建立專案: GroupId 'com.android.tools.ddms' ArtifictedId = 'ddmlib' Version '1.0-SNAPSHOT' 刪除IDE建立的src資料夾,建立base資料夾,將annotations、common、ddmlib複製進來 參考Android Studio建立的專案,修改build.gradle為: // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { mavenCentral() } } allprojects { repositories { mavenCentral() } } task clean(type: Delete) { delete rootProject.buildDir } 修改settings.gradle,加入annotations、common、ddmlib為include rootProject.name = 'ddmlib' include ':base:annotations' include ':base:common' include ':base:ddmlib' 修改annotations、common、ddmlib內的b...