ตัวเลือกที่เป็นซอฟต์แวร์สำหรับการพัฒนาระบบสมองกลฝังตัว#


การพัฒนาระบบสมองกลฝังตัว#

การพัฒนาระบบสมองกลฝังตัว (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 เป็นต้น
  • วิธีการ (Methodologies) ต่าง ๆ ในการเขียนโค้ด การทดสอบการทำงานของโค้ด การจัดการและดูแลโค้ดสำหรับระบบสมองกลฝังตัว เป็นต้น

ในกรณีที่เลือกใช้ภาษา C/C++ สำหรับการเขียนโปรแกรมไมโครคอนโทรลเลอร์และไมโครโพรเซสเซอร์ ก็แบ่งได้เป็นหลายระดับ

  • การเขียนโปรแกรมด้วยภาษา C/C++ ในรูปแบบที่เรียกว่า Bare-Metal ซึ่งเกี่ยวข้องกับการทำคำสั่งเพื่อเข้าถึงรีจิสเตอร์ต่าง ๆ ของซีพียูและวงจรภายใน ผ่านพอยน์เตอร์และโครงสร้างข้อมูลแบบ struct เป็นต้น
    • ในบางกรณีมีการใช้คำสั่งในภาษา Assembly ร่วมด้วย
  • การเขียนโปรแกรมโดยใช้ SDK หรือ API ที่มีการพัฒนาโดยผู้ผลิตชิปหรือบอร์ดไมโครคอนโทรลเลอร์ เช่น
  • การเขียนโปรแกรมโดยใช้คำสั่งต่าง ๆ ของ 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 hosted
    • AArch64 (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 ยังมีตัวเลือกอื่นอีก เช่น


โปรแกรมที่ทำงานแบบ CLI สำหรับผู้ใช้ Windows#

ตัวอย่างโปรแกรมที่ใช้งานแบบ Command Line Interface และนิยมใช้ในการพัฒนาซอฟต์แวร์ด้วยภาษา C/C++ สำหรับไมโครคอนโทรลเลอร์ประเภท Arm Cortex-M MCUs มีดังนี้

โปรแกรมกลุ่มแรกเป็นซอฟต์แวร์ที่ได้มีการดูแลและจัดการโดย The xPack Project และมีไฟล์ไบนารีให้นำติดตั้งใช้งานในเครื่องคอมพิวเตอร์ของผู้ใช้ ซึ่งใช้ได้กับระบบปฏิบัติการ Windows,Linux และ mac OSX มีตัวอย่างโปรแกรมที่แนะนำให้ติดตั้งใช้งาน ได้แก่

สำหรับผู้ใช้ 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 ได้แก่


กล่าวสรุป#

บทความนี้ได้นำเสนอมุมมองในภาพรวมเกี่ยวกับหัวข้อในการเรียนรู้ด้านการพัฒนาซอฟต์แวร์สำหรับระบบสมองกลฝังตัว ยกตัวอย่างตัวเลือกในประเด็นต่าง ๆ เช่น ภาษาคอมพิวเตอร์ ซอฟต์แวร์ประเภท IDE เป็นต้น


This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Created: 2023-03-04 | Last Updated: 2023-03-26