ตัวเลือกที่เป็นซอฟต์แวร์สำหรับการพัฒนาระบบสมองกลฝังตัว#
▷ การพัฒนาระบบสมองกลฝังตัว#
การพัฒนาระบบสมองกลฝังตัว (Embedded Systems Development) เกี่ยวข้องกับการใช้เครื่องมือทั้งฮาร์ดแวร์และซอฟต์แวร์ที่ทำงานร่วมกัน (รวมเรียกว่า Ecosystem) และวิธีการต่าง ๆ สำหรับการพัฒนาซอฟต์แวร์ในเชิงวิศวกรรมซอฟต์แวร์
-
ภาษาคอมพิวเตอร์ที่ใช้ในการเขียนโปรแกรม (Computer Programming Languages) เช่น
- C/C++
- Python (MicroPython / CircuitPython)
- JavaScript / TypeScript
- C#
- Go
- Rust
-
ซอฟต์แวร์ (Software) ซึ่งประกอบไปด้วยซอฟต์แวร์หลายประเภท เช่น
- IDEs (Integrated Development Environments) สำหรับการสร้างโปรเจกต์ การจัดการไฟล์ในโปรเจกต์ การเขียนโค้ด การเรียกใช้คำสั่งหรือเครื่องมือที่เป็นโปรแกรมต่าง ๆ การแปลงให้เป็นไฟล์เฟิร์มแวร์และอัปโหลดไปยังฮาร์ดแวร์หรือชิปเป้าหมาย เป็นต้น
- C/C++ Toolchains: C/C++ Compiler, Linker, Debugger, C/C++ Libraries เป็นต้น
- Runtime Software/Firmware: Bootloaders, Real-Time Kernels / RTOSes เป็นต้น
- Middleware / Software Stacks: ไลบรารี หรือ API สำหรับการใช้งานร่วมกับอุปกรณ์อื่นในด้านต่าง ๆ เช่น Network, Security, Communication, Storage, Graphics เป็นต้น
- ซอฟต์แวร์ประเภท Simulator และ Emulator (เช่น QEMU emulator) เพื่อจำลองการทำงานของโปรแกรมด้วยใช้ฮาร์ดแวร์แบบเสมือนจริง ช่วยในการดีบักโค้ดในเบื้องต้น ก่อนจะนำไปทดลองกับฮาร์ดแวร์จริง
-
ฮาร์ดแวร์ (Hardware)
- ชิปตัวประมวลผล ซึ่งมีหลายสถาปัตยกรรมของชุดคำสั่งให้เลือกใช้ มีตัวประมวลขนาดเล็กตั้งแต่ 8 บิต ไปจนถึง 64 บิต
เช่น ตระกูล AVR, PIC, ARM Cortex-M/-R/-A และ RISC-V เป็นต้น
ถ้าเป็นชิปไมโครคอนโทรลเลอร์ ส่วนใหญ่ก็จะเป็นซีพียูตระกูล Arm Cortex-M Series
และมีชิปจากหลายผู้ผลิต (Chip Vendors) ให้เลือกใช้ เช่น
- STMicroelectronics
- Microchip / Atmel
- NXP / Freescale
- Texas Instruments (TI)
- Nordic Semiconductor
- Silicon Labs
- GigaDevice
- Analog Devices / Maxim Integrated
- Infineon / Cypress Semiconductor
- Renesas Electronics
- โดยทั่วไปก็อาจจำแนกได้เป็น ชิปไมโครคอนโทรลเลอร์ (MCU: Microcontroller Unit) และชิปไมโครโพรเซสเซอร์ (MPU: Microprocessor Unit) ที่รองรับการใช้งานระบบปฏิบัติการ เช่น Linux / Embedded Linux Distros (Yocto Project / Linaro) หรือ Android OS เป็นต้น รวมถึงชิปประเภท SoC (System-on-Chip) แบบอื่น ๆ เช่น FPGA ที่มีตัวประมวลผลอยู่ภายใน เป็นต้น
- บอร์ดทดลองหรือบอร์ดสำหรับนักพัฒนาที่ได้เลือกใช้ หรืออื่น ๆ เช่น บอร์ด Arduino หรือ บอร์ด ST Nucleo เป็นต้น
- อุปกรณ์สำหรับการเขียนไฟล์เฟิร์มแวร์ลงในหน่วยความจำและดีบักการทำงานของโปรแกรมในฮาร์ดแวร์ (Device Programmers, In-Circuit / On-Chip Debuggers) เช่น อุปกรณ์ที่ทำงานตามโพรโตคอล JTAG หรือ Arm SWD (Serial Wire Debug) / Arm CMSIS DAPLink เป็นต้น
- ชิปตัวประมวลผล ซึ่งมีหลายสถาปัตยกรรมของชุดคำสั่งให้เลือกใช้ มีตัวประมวลขนาดเล็กตั้งแต่ 8 บิต ไปจนถึง 64 บิต
เช่น ตระกูล AVR, PIC, ARM Cortex-M/-R/-A และ RISC-V เป็นต้น
ถ้าเป็นชิปไมโครคอนโทรลเลอร์ ส่วนใหญ่ก็จะเป็นซีพียูตระกูล Arm Cortex-M Series
และมีชิปจากหลายผู้ผลิต (Chip Vendors) ให้เลือกใช้ เช่น
-
วิธีการ (Methodologies) ต่าง ๆ ในการเขียนโค้ด การทดสอบการทำงานของโค้ด การจัดการและดูแลโค้ดสำหรับระบบสมองกลฝังตัว เป็นต้น
ในกรณีที่เลือกใช้ภาษา C/C++ สำหรับการเขียนโปรแกรมไมโครคอนโทรลเลอร์และไมโครโพรเซสเซอร์ ก็แบ่งได้เป็นหลายระดับ
- การเขียนโปรแกรมด้วยภาษา C/C++ ในรูปแบบที่เรียกว่า Bare-Metal
ซึ่งเกี่ยวข้องกับการทำคำสั่งเพื่อเข้าถึงรีจิสเตอร์ต่าง ๆ ของซีพียูและวงจรภายใน
ผ่านพอยน์เตอร์และโครงสร้างข้อมูลแบบ
struct
เป็นต้น- ในบางกรณีมีการใช้คำสั่งในภาษา Assembly ร่วมด้วย
- การเขียนโปรแกรมโดยใช้ SDK หรือ API ที่มีการพัฒนาโดยผู้ผลิตชิปหรือบอร์ดไมโครคอนโทรลเลอร์
เช่น
- STM32Cube HAL - MCU & MPU Packages (GitHub Repo)สำหรับชิป STM32 MCUs ของบริษัท STMicroelectronics
- Pico C/C++ SDK สำหรับชิป Raspberry Pi RP2040
- ESP-IDF สำหรับชิป Espressif SoCs: ESP32 / ESP32-S2/-S3 และ ESP32-C3
- การเขียนโปรแกรมโดยใช้คำสั่งต่าง ๆ ของ Arduino API โดยจะต้องติดตั้งและใช้งานซอฟต์แวร์ที่เรียกว่า Arduino Core สำหรับไมโครคอนโทรเลอร์แต่ละตัวเลือก
นอกจากนั้นแล้วยังสามารถแบ่งวิธีการเขียนโค้ดโดยพิจารณาจาก การใช้หรือไม่ใช้ระบบปฏิบัติการเวลาจริง (RTOS: Real-Time OS) และในปัจจุบัน ก็มีตัวเลือกซึ่งส่วนใหญ่ก็เป็น Open Source RTOS และใช้งานได้โดยไม่มีค่าใช้จ่าย เช่น
▷ ซอฟต์แวร์ประเภท IDE#
ซอฟต์แวร์ประเภท IDE ก็มีอยู่หลายตัวเลือก เช่น
- Eclipse IDE for C/C++ Developers)
- เป็นซอฟต์แวร์ประเภท Open Source และนิยมใช้ร่วมกับ GNU Arm Eclipse Plug-in สำหรับการเขียนโปรแกรมไมโครคอนโทรลเลอร์
- Arduino IDE
- สำหรับผู้ใช้ที่ต้องการเขียนโปรแกรม Arduino Sketch และใช้คำสั่งต่าง ๆ ของ Arduino API
- มีทั้งแบบ Desktop IDE และ Cloud-based IDE
- VS Code IDE + PlatformIO (PIO) extension:
- เขียนโปรแกรมโดยใช้ C/C++ Framework อย่างเช่น Arduino หรือ Mbed OS เป็นต้น
- Arm / Keil Studio Cloud IDE /
Mbed Studio Desktop IDE
- ใช้เฉพาะไมโครคอนโทรลเลอร์ตระกูล Arm Cortex-M Series และเขียนโค้ดด้วย Arm Mbed OS (RTOS)
- Arm Keil MDK + uVision IDE:
- เป็น Commercial Professional Software ไม่เป็น Open Source แต่เปิดให้ใช้งานได้ฟรีสำหรับ Non-commercial Use
- ใช้เฉพาะไมโครคอนโทรลเลอร์ตระกูล Arm Cortex-M Series
- มี Built-in Simulator / Debugger ให้ใช้งาน เพื่อจำลองการทำงานของโค้ด
- SEGGER Embedded Studio IDE
- เป็น Commercial Professional Software ไม่เป็น Open Source แต่เปิดให้ใช้งานได้ฟรีสำหรับ Non-commercial Use
- แบ่งเป็นเวอร์ชันสำหรับไมโครคอนโทรลเลอร์ตระกูล Arm Cortex-M Series หรือ RISC-V
- มี Built-in Simulator / Debugger ให้ใช้งาน เพื่อจำลองการทำงานของโค้ด
- STM32CubeIDE
- ใช้ได้กับไมโครคอนโทรลเลอร์ของบริษัท STMicroelectronics เท่านั้น
- AC6 SW4STM32 - System Workbench for STM32
- เจาะจงใช้เฉพาะกับชิปของบริษัท STMicroelectronics
- NXP MCUXpresso IDE + MCUXpresso SDK
- ใช้ได้เฉพาะกับไมโครคอนโทรลเลอร์ของบริษัท NXP / Freescale
- Microchip Studio IDE
- ใช้ได้เฉพาะกับชิปของบริษัท Atmel (ปัจจุบันรวมเป็นส่วนหนึ่งของบริษัท Microchip)
- Microchip MPLAB-X IDE
และ MPLAB Xpress Cloud-Based IDE
- ใช้ได้เฉพาะกับชิปของบริษัท Microchip
- TI CCS Code Composer Studio IDE
และ CCS Cloud IDE
- ใช้ได้เฉพาะกับชิปของบริษัท Texas Instruments
- Silicon Labs Simplicity Studio + Silicon Labs Gecko SDK (GSDK)
- ใช้ได้เฉพาะกับชิปของบริษัท Silicon Labs เช่น EFR32MG2x Series 2 MCUs
- Infineon Technologies DAVE for XMC 32-bit MCUs
- ใช้ซอฟต์แวร์ Eclipse-based IDE
- ใช้ได้เฉพาะกับชิป XMC1xxx, XMC4xxx และ XMC7xxx ของบริษัท Infineon Technologies
- Infineon Technologies ModusToolbox Software
- สามารถใช้งานได้ร่วมกับ Eclipse IDE เพื่อเขียนโปรแกรมสำหรับชิป Cypress PSoC
- Renesas Electronics e^2 studio
- เป็น Eclipse-based IDE
- ใช้สำหรับไมโครคอนโทรลเลอร์ในตระกูล เช่น RA / RZ / RL78 / RX
- Espressif IDE
- ใช้ซอฟต์แวร์ ** Eclipse CDT และมาพร้อมกับ ESP-IDF Framework**
- ใช้ได้เฉพาะกับชิปของบริษัท Espressif Systems ที่มีตัวประมวลผลเป็นตระกูล Xtensa LX6 / LX7 หรือ RISC-V
ข้อสังเกตเกี่ยวกับ IDE:
- Eclipse IDE มีหลายเวอร์ชันให้เลือกใช้งานมาไม่ต่ำกว่า 20 ปีแล้ว และที่ได้รับความนิยมในปัจจุบัน คือ Eclipse Theia Framework ซึ่งได้มีการพัฒนาโดย Eclipse Foundation และสามารถนำไปใช้ในการสร้างแอปพลิเคชัน IDE ทั้งแบบ Desktop IDE หรือ Web-based IDE
- บางบริษัทที่ผลิตชิปไมโครคอนโทรลเลอร์ ก็ได้เลือกใช้ Eclipse/CDT IDE หรือ Eclipse Theia เป็นพื้นฐานในการพัฒนาซอฟต์แวร์เพื่อใช้กับชิปไมโครคอนโทรลเลอร์ เช่น TI CCSTUDIO IDE, NXP MCUXpresso IDE และ STM32CubeIDE รวมไปถึง Arduino IDE 2.0 ด้วยเช่นกัน
- VS Code IDE ก็เริ่มได้รับความนิยมมากขึ้น เนื่องจากผู้ใช้สามารถติดตั้ง Extensions เพิ่มได้
- PlatformIO (PIO) extension สามารถนำไปใช้ร่วมกับ VS Code IDE รองรับการเขียนโค้ดภาษา C/C++ และ Arduino และมีบอร์ดไมโครคอนโทรลเลอร์ให้เลือกใช้ได้จำนวนมาก
- ในหลายปีที่ผ่านมา บริษัท Nordic Semiconductor ได้เลือกใช้ SEGGER Embedded Studio IDE สำหรับการเขียนโปรแกรมชิป เช่น nRF52 / nRF53 SoCs แต่เริ่มเปลี่ยนไปใช้ VS Code IDE + nRF Connect SDK (nRF Connect Extension Pack)
▷ Arm GNU Cross-Toolchain#
การเขียนโปรแกรม Embedded C/C++ ต้องอาศัยโปรแกรมที่เรียกว่า "Cross-Compilation Toolchain" กล่าวคือ ผู้ใช้จะเขียนโค้ดและคอมไพล์โค้ด ในคอมพิวเตอร์ของตนเอง แต่ไฟล์โปรแกรมที่ได้จะนำไปใช้กับชิปตัวประมวลผลอื่นที่ไม่ใช่คอมพิวเตอร์ของผู้ใช้
ในกรณีที่ใช้ชิปซีพียูตระกูล Arm Cortex สำหรับการเขียนโค้ดภาษา C/C++ ก็มีซอฟต์แวร์ Arm GNU Cross-Toolchain (ชื่อเดิมคือ "GNU Arm Embedded Toolchain") ให้ใช้งานได้ฟรี อยู่ภายใต้การพัฒนาและดูแลโดยบริษัท Arm และเครื่องมือที่เป็นซอฟต์แวร์ได้แก่ GCC, Binutils, glibc, Newlib, GDB เพื่อใช้กับซีพียู Arm Cortex-M และ Arm Cortex-A Series สามารถแบ่งออกเป็นตัวเลือกย่อยได้ดังนี้
- จำแนกตามสถาปัตยกรรมแบบ 32 บิต และ 64 บิต:
AArch32
และAArch64
ตามลำดับ - จำแนกตามลักษณะของแอปพลิเคชัน เช่น ไม่มี OS (หรือเรียกว่า
bare-metal
) และการใช้ร่วมกับ Linux และเรียกใช้ GNU C Library - จำแนกตามแพลตฟอร์มและระบบปฏิบัติการของเครื่องผู้ใช้:
x86_64
: Windows hosted | Linux hostedAArch64
(ARM 64-bit): Linux hosted
ในอดีต ได้มีการแยก ARM GNU Toolchain ออกเป็น 2 กลุ่ม หรือ Toolchain Profiles ดังนี้
- สำหรับ Arm Cortex-A: "GNU Toolchain for A-profile processors"
- สำหรับ Arm Cortex-R และ Cortex-M: "GNU Arm Embedded Toolchain"
ในปัจจุบัน มีการจัดการใหม่ จำแนกตามชื่อดังนี้
arm-none-eabi
หรือ "AArch32 bare-metal target" ใช้กับ Arm Cortex-M Series (32-bit)arm-none-linux-gnueabihf
หรือ "AArch32 GNU/Linux target with hard float" ใช้กับ Arm Cortex-A Series (32-bit) ที่มี FPU รองรับ Hard-float ABI (Application Binary Interface) และใช้สำหรับระบบสมองกลฝังตัวที่มีระบบปฏิบัติการ Embedded Linux (มีการใช้ฟังก์ชันจาก GNU C Library)aarch64-none-elf
หรือ "AArch64 bare-metal target" ใช้กับ Arm Cortex-A Series (64-bit) สำหรับระบบสมองกลฝังตัวที่ไม่มีระบบปฏิบัติการaarch64-none-linux-gnu
หรือ "AArch64 GNU/Linux target" ใช้กับ Arm Cortex-A Series (64-bit) สำหรับระบบสมองกลฝังตัวที่มีระบบปฏิบัติการ Embedded Linux และมีการใช้ฟังก์ชันจาก GNU C Library เช่น บอร์ด Rasbpberry Pi 4B หรือ Raspberry Pi 5
ผู้ใช้สามารถดาวน์โหลดไฟล์มาติดตั้งใช้งานได้จากเว็บ: ARM GNU Toolchain: Downloads
นอกจากคอมไพเลอร์ของ Arm GNU Toolchain ยังมีตัวเลือกอื่นอีก เช่น
- Arm C/C++ Compiler (ARMCC) v6 ซึ่งเป็นส่วนหนึ่งของซอฟต์แวร์ Arm Keil MDK และ Mbed Studio IDE
- IAR Embedded Workbench for ARM เป็นซอฟต์แวร์แบบ Commercial สำหรับชิป Arm Cortex-M MCUs
- MPLAB XC Compilers (XC8 / XC16 / XC32) เป็นซอฟต์แวร์ของบริษัท Microchip สำหรับไมโครคอนโทรลเลอร์ตระกูล PIC, dsPIC, AVR และ SAM (Arm-based MCUs)
- TI Arm Clang C/C++ Compiler Tools เป็นซอฟต์แวร์ของบริษัท Texas Instruments สำหรับชิป TI Arm-based SimpleLink MCUs (MSP432E4, CC13xx, CC26xx และ CC32xx)
▷ โปรแกรมที่ทำงานแบบ CLI สำหรับผู้ใช้ Windows#
ตัวอย่างโปรแกรมที่ใช้งานแบบ Command Line Interface และนิยมใช้ในการพัฒนาซอฟต์แวร์ด้วยภาษา C/C++ สำหรับไมโครคอนโทรลเลอร์ประเภท Arm Cortex-M MCUs มีดังนี้
โปรแกรมกลุ่มแรกเป็นซอฟต์แวร์ที่ได้มีการดูแลและจัดการโดย The xPack Project และมีไฟล์ไบนารีให้นำติดตั้งใช้งานในเครื่องคอมพิวเตอร์ของผู้ใช้ ซึ่งใช้ได้กับระบบปฏิบัติการ Windows,Linux และ mac OSX มีตัวอย่างโปรแกรมที่แนะนำให้ติดตั้งใช้งาน ได้แก่
- The xPack GNU Arm Embedded GCC
https://github.com/xpack-dev-tools/arm-none-eabi-gcc-xpack/releases - The xPack CMake
https://github.com/xpack-dev-tools/cmake-xpack/releases - The xPack Ninja-Build
https://github.com/xpack-dev-tools/ninja-build-xpack/releases - The xPack OpenOCD
https://github.com/xpack-dev-tools/openocd-xpack/releases - The xPack windows-build-tools (for Windows)
https://github.com/xpack-dev-tools/windows-build-tools-xpack/releases
สำหรับผู้ใช้ Windows เมื่อได้ดาวน์โหลดไฟล์ .zip (ทดลองใช้เวอร์ชัน v10.3.1) มาแล้วให้แตกไฟล์ในไดเรกทอรีที่ต้องการ
จากนั้นให้ตั้งค่าสำหรับตัวแปร PATH
ในส่วนที่เป็น Control Panel > Edit the environment variables
เช่น ถ้าดาวน์โหลดไฟล์ .zip ต่อไปนี้มา
xpack-arm-none-eabi-gcc-10.3.1-2.3-win32-x64.zip
แล้วนำไปแตกไฟล์และได้เป็นไดเรกทอรีใหม่ ภายใต้ C:\Tools\xpack\
(เลือกเป็นตัวอย่าง)
C:\Tools\xpack\xpack-arm-none-eabi-gcc-10.3.1-2.3
ดังนั้นให้เพิ่มรายการสำหรับตัวแปร PATH
ต่อไปนี้
C:\Tools\xpack\xpack-arm-none-eabi-gcc-10.3.1-2.3\bin
เพื่อให้สามารถเรียกใช้คำสั่งต่าง ๆ ของ GNU Arm Embedded GCC ที่อยู่ภายใต้ไดเรกทอรี bin
ได้
ข้อสังเกต: การเลือกใช้เวอร์ชันของ GNU Arm Embedded GCC อาจไม่จำเป็นต้องเป็นเวอร์ชันใหม่ล่าสุด และในบางกรณี การเลือกใช้เวอร์ชันใหม่ล่าสุดเพื่อคอมไพล์โค้ดโปรเจกต์ที่มีการพัฒนามาในอดีตหลายปี อาจจะเกิดปัญหาในการคอมไพล์โค้ดได้
นอกจากนั้นแล้ว ยังแนะนำให้ติดตั้งโปรแกรมเหล่านี้
VS Code Extensions ที่ได้รับความนิยมสำหรับการเขียนโค้ด C/C++ และดีบักโปรแกรมสำหรับไมโครคอนโทรลเลอร์ตระกูล Arm Cortex-M ได้แก่
- C/C++ Extension Pack (
ms-vscode.cpptools
) - CMake Tools (
ms-vscode.cmake-tools
) - Cortex-Debug (
marus25.cortex-debug
) - PlatformIO (PIO) (
platformio.platformio-ide
)
▷ กล่าวสรุป#
บทความนี้ได้นำเสนอมุมมองในภาพรวมเกี่ยวกับหัวข้อในการเรียนรู้ด้านการพัฒนาซอฟต์แวร์สำหรับระบบสมองกลฝังตัว ยกตัวอย่างตัวเลือกในประเด็นต่าง ๆ เช่น ภาษาคอมพิวเตอร์ ซอฟต์แวร์ประเภท IDE เป็นต้น
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
Created: 2023-03-04 | Last Updated: 2023-03-26