บทความนี้เป็นบันทึกช่วยจำหลังจากได้ทดลองใช้งานซอฟต์แวร์ Arduino Pro IDE (Alpha Preview) ที่ช่วยให้เราสามารถดีบัก (Debug) การทำงานของโค้ดขณะที่ทำงานอยู่จริงในฮาร์ดแวร์ (ไม่ใช่การจำลองการทำงาน) และได้เลือกใช้บอร์ดไมโครคอนโทรลเลอร์ ATSAMD21G18 (Arduino Zero Compatible) และอุปกรณ์ J-Link Debug Probe สำหรับการสาธิต
Arduino Pro IDE สำหรับ Professional
โครงการพัฒนา Arduino Pro IDE ได้มีการเปิดตัวในเดือนตุลาคม ปีค.ศ. 2019 [Ref.1] และเป็นซอฟต์แวร์ประเภท Open Source มีให้เลือกใช้ได้กับระบบปฏิบัติการ Windows, Linux และ Mac OS X โดยในส่วนของ Front End ได้พัฒนามาจาก Eclipse Theia IDE ซึ่งทำงานได้ทั้งแบบ Desktop และ Cloud-based IDE และมาพร้อมกับ Arduino CLI (ทำงานแบบ Command Line) ในส่วน Back End แทนการติดตั้งและใช้งาน Arduino IDE แบบเดิม
ปัจจุบันขณะที่เขียนบทความนี้ ได้พัฒนามาถึงเวอร์ชัน 0.0.5 alpha preview ซึ่งได้เปิดตัวไปในช่วงปลายเดือนกุมภาพันธ์ ค.ศ. 2020 [Ref.2] และเวอร์ชันนี้มีการเปิดให้ลองใช้งานฟีเจอร์ใหม่เรียกว่า Arduino Debugger แต่ยังจำกัดการใช้งานได้กับบอร์ดของ Arduino ที่ใช้ชิป ATSAMD21 ซึ่งมีอยู่หลายบอร์ดให้เลือก แต่จะต้องใช้กับอุปกรณ์ เช่น Atmel EDBG หรือ Atmel SAM-ICE เป็นต้น
แต่ในบทความนี้จะสาธิตการใช้งานร่วมกับบอร์ด RobotDyn SAMD21 M0-Mini ซึ่งได้มีการลงเฟิร์มแวร์ Arduino Zero Bootloader ไว้แล้ว และใช้อุปกรณ์ J-Link Debug Probe
Update: 2020–09–31 เวอร์ชันล่าสุดคือ 0.1.0
ขั้นตอนการดำเนินการ
- ติดตั้งและใช้งาน Arduino Pro IDE Windows v0.0.5-alpha.preview สำหรับ Ubuntu 64-bit (ทดลองกับ Ubuntu 16.04 LTS)
- สร้างโปรเจกต์สำหรับ Arduino Sketch เพื่อนำมาใช้กับบอร์ด ATSAMD21 (Arduino Zero Compatible)
- อัปโหลด Arduino Sketch โดยใช้ SEGGER J-Link Debug Probe ไปยังบอร์ด ATSAMD21 โดยใช้ SWD (Serial Wire Debug) Interface
- ทำขั้นตอน In-Circuit Debugging เช่น การทำคำสั่งในโค้ดทีละบรรทัด
เริ่มต้นใช้งาน Arduino Pro IDE และสร้าง Arduino Sketch Example
เปิดใช้งาน Terminal ใน Ubuntu Desktop แล้วทำคำสั่งต่อไปนี้ เพื่อดาวน์โหลดและเรียกใช้งาน Arduino Pro IDE
- ดาวน์โหลดไฟล์ .zip สำหรับ Ubuntu 64-bit
$ wget https://downloads.arduino.cc/arduino-pro-ide/arduino-pro-ide-0.0.5-alpha.preview-linux64.zip
2. แตกไฟล์ .zip โดยระบุชื่อไดเรกทอรีใหม่ เช่น ArduinoProIDE
$ unzip -d ArduinoProIDE arduino-pro-ide-0.0.5-alpha.preview-linux64.zip
3. เปิดใช้งานโปรแกรม Arduino Pro IDE (GUI-based)
$ ./ArduinoProIDE/arduino-pro-ide &
4. เริ่มต้นได้มีการ Arduino Sketch ไว้แล้ว (ตั้งชื่อตามเดือนและวันที่ในปัจจุบัน) เลือกบอร์ด Arduino Zero (Programming Port) และเลือกพอร์ต USB-to-Serial ที่เชื่อมต่อกับบอร์ด (ให้เชื่อมต่อบอร์ดไมโครคอนโทรลเลอร์กับคอมพิวเตอร์ที่ใช้งาน)
ในกรณีที่ไม่สามารถใช้พอร์ต เช่น /dev/ttyACM0
ได้เนื่องจากติดปัญหาเกี่ยวกับ Permission ให้ลองทำคำสั่งต่อไปนี้
$ sudo chmod a+rw /dev/ttyACM0
5. ไปที่ Boards Manager แล้วเลือกติดตั้งหรืออัปเดต Arduino SAMD Core สำหรับใช้กับ ATSAMD21 เช่น บอร์ด Arduino Zero เป็นต้น
6. เขียนโค้ดทดสอบสำหรับ Arduino Sketch บันทึกการแก้ไข เลือกบอร์ด Arduino Zero (Programming Port) และเลือกพอร์ตที่ตรงกับบอร์ดดังกล่าว ในกรณีตัวอย่างนี้คือ /dev/ttyACM1
แล้วทำขั้นตอน Verify (Build / Compile Code) และถ้าทำได้สำเร็จ ไม่มีข้อผิดพลาดใด ๆ ในส่วนของ Explorer จะมีรายชื่อไฟล์ปรากฏเพิ่ม (นามสกุล .elf
และ .bin
)
โค้ดตัวอย่างสำหรับทดสอบมีดังนี้ (LED Blink ที่ขา D13)
#define LED_PIN 13
void setup() {
pinMode( LED_PIN, OUTPUT );
}
void loop() {
digitalWrite( LED_PIN, !digitalRead(LED_PIN) );
delay(100);
}
การอัปโหลดโปรแกรมโดยใช้ J-Link Debug Probe
- แก้ไขไฟล์ OpenOCD Configuration File ภายในไดเรกทอรีของ Arduino ตามที่อยู่ (Path) ต่อไปนี้ เช่น ใช้คำสั่ง
nano
สำหรับ Editor
~/.arduino15/packages/arduino/hardware/samd/1.8.5/variants/arduino_zero/openocd_scripts/arduino_zero.cfg
แก้ไขไฟล์ดังกล่าวตามตัวอย่างนี้ แล้วบันทึกการแก้ไขลงไฟล์
#source [find interface/cmsis-dap.cfg]# use J-Link / SWD instead of CMSIS-DAP
interface jlink
transport select swd
# chip name
set CHIPNAME at91samd21g18
set CPUTAPID 0x0bc11477
set ENDIAN little
# choose a port here
set telnet_port 0
reset_config srst_nogatesource [find target/at91samdXX.cfg]
2. แก้ไขการอนุญาตเข้าใช้อุปกรณ์ J-Link สำหรับ User โดยทำขั้นตอนดังนี้
2.1 ดาวน์โหลดไฟล์ตัวอย่างสำหรับ udev rules จาก github
$ wget https://github.com/kiibohd/manufacturing/raw/master/archpkg/99-jlink.rules
2.2) นำไฟล์ดังกล่าวไปใส่ไว้ในไดเรกทอรี /etc/dev/rules.d/
$ sudo cp 99-jlink.rules /etc/udev/rules.d/
2.3) อัปเดทการทำงานของ udev
sudo udevadm control --reload-rules && sudo udevadm trigger
ถัดไปให้ทำขั้นตอนอัปโหลด (Upload) ไฟล์ .bin ที่ได้จากการคอมไพล์โค้ดของ Arduino Sketch โดยใช้ Arduino Pro IDE และถ้าทำได้สำเร็จ ถัดไปสามารถลองทำขั้นตอน Start Debugging ได้
เมื่อเข้าสู่ Debug Session เราก็สามารถทำคำสั่ง เช่น Continue / Pause (รันโปรแกรมต่อเนื่องหรือหยุดชั่วคราว) Step Over (ทำทีละคำสั่งหรือการเรียกฟังก์ชันแล้วหยุดรอ) Step Into / Step Out หรือ Stop Debugging เป็นต้น
เราสามารถเพิ่ม Breakpoint โดยระบุชื่อฟังก์ชัน เมื่อโปรแกรมทำงานมาถึงคำสั่งแรกในฟังก์ชันดังกล่าว จะหยุดการทำงานชั่วคราว
โดยสรุป: เราสามารถลองใช้ฟีเจอร์ Debug ของ Arduino IDE Pro ได้บ้างแล้ว แต่จำกัดการใช้งานได้เฉพาะบอร์ดไมโครคอนโทรลเลอร์ ATSAMD21 และบทความนี้ยังแสดงให้เห็นว่า เราสามารถใช้บอร์ด ATSAMD21 ที่ไม่ใช่บอร์ดของ Arduino Official แต่เป็นบอร์ดประเภทที่เรียกว่า Arduino Compatible (ในกรณีนี้คือ Arduino Zero Compatible) และไม่มีวงจร Atmel EDBG อยู่บอร์ด แต่เราก็สามารถใช้อุปกรณ์ J-Link Debug Probe สำหรับอัปโหลดไฟล์ .bin และทำขั้นตอน Debug โดยใช้ Arduino Pro IDE ได้ (ทดลองใช้กับระบบปฏิบัติการ Ubuntu 16.04LTS 64 บิต