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

Embedded System (ระบบสมองกลฝังตัว) คือระบบคอมพิวเตอร์เฉพาะทางที่ถูกออกแบบมาให้ทำหน้าที่เฉพาะอย่างในงานหนึ่งๆ โดยมักจะฝังตัวอยู่ในอุปกรณ์หรือเครื่องมือที่เราพบเจอในชีวิตประจำวัน เช่น เครื่องใช้ไฟฟ้า อุปกรณ์อิเล็กทรอนิกส์ ยานพาหนะ ระบบควบคุมอุตสาหกรรม หรืออุปกรณ์ทางการแพทย์

1. ส่วนประกอบของ Embedded System

Embedded System ประกอบด้วยส่วนสำคัญ 3 ส่วน ได้แก่ :

  1. Hardware Architecture (โครงสร้างฮาร์ดแวร์):
  • ไมโครคอนโทรลเลอร์ (Microcontroller): ตัวประมวลผลแบบครบวงจรที่รวม CPU, RAM, ROM และพอร์ตอินพุต/เอาต์พุตไว้ในชิปเดียว เช่น ATmega328 (ใช้ใน Arduino) หรือ RP2040 (ใช้ใน Raspberry Pi Pico)ประกอบด้วยไมโครคอนโทรลเลอร์ (Microcontroller) หรือช้สำหรับงานที่ต้องการประสิทธิภาพสูง เช่น การประมวลผลภาพในสมาร์ทโฟน
  • หน่วยความจำ (Memory) เช่น Nonvolatile Memory (ROM, Flash Memory) สำหรับเก็บโปรแกรมถาวร และ Volatile Memory ( SRAM : static RAM , DRAM: Dynamic RAM ใช้สำหรับเก็บข้อมูลชั่วคราว
  • ตัวรับรู้ หรือ เซ็นเซอร์ (Sensors) เพื่อรับข้อมูลจากสภาพแวดล้อม
  • ตัวกระตุ้น (Actuators) เช่น มอเตอร์หรือส่วนควบคุม เพื่อดำเนินการตอบสนอ
  • อุปกรณ์อินพุต/เอาต์พุต เช่น ปุ่มกด, จอแสดงผล, หรือพอร์ตเชื่อมต่อ

2. ซอฟต์แวร์ (Software) ซอฟต์แวร์ในระบบฝังตัวจะทำงานแบบเรียลไทม์ (Real-time) โดยออกแบบมาเฉพาะงาน

  • ใช้ระบบปฏิบัติการเฉพาะทาง (Real-Time Operating System: RTOS) หรือไม่มีระบบปฏิบัติการ (Bare Metal Programming)
  • โปรแกรมถูกเขียนในภาษาระดับสูง เช่น C, C++ หรือ Python สำหรับงานบางประเภท

3. เฟิร์มแวร์ (Firmware) เป็นโปรแกรมที่ฝังตัวอยู่ในฮาร์ดแวร์ ซึ่งทำหน้าที่ควบคุมและประสานงานระหว่างฮาร์ดแวร์และซอฟต์แวร์

  • เฟิร์มแวร์มักจะถูกเก็บในหน่วยความจำแบบไม่ลบเลือน เช่น Flash Memory หรือ EEPROM

2. ประเภทของ Embedded System

Embedded System แบ่งออกเป็นประเภทหลักตามการทำงานและความซับซ้อน ดังนี้:

  • Small-Scale Embedded Systems
    – 
    ใช้ไมโครคอนโทรลเลอร์ขนาดเล็ก เช่น Arduino หรือ Raspberry Pi Pico
    – ใช้พลังงานน้อยและเหมาะสำหรับงานง่ายๆ เช่น เครื่องจับเวลา หรือเซ็นเซอร์วัดอุณหภูมิ
  • Medium-Scale Embedded Systems
    – 
    ใช้ไมโครโปรเซสเซอร์ที่ทรงพลังขึ้น พร้อม RAM และ ROM ที่มากขึ้น
    – เหมาะสำหรับงานซับซ้อน เช่น ระบบควบคุมรถยนต์ หรือระบบสมาร์ทโฮม
  • Complex Embedded Systems
    – 
    ใช้ระบบบนชิป (System on Chip: SoC) เช่น Qualcomm Snapdragon
    – รวมการประมวลผลภาพ เสียง และการเชื่อมต่อเครือข่าย เช่น สมาร์ทโฟน หรือระบบ IoT

ประเภทของ Embedded System แบ่งตามลักษณะการใช้งาน

  • Standalone Embedded Systems:
    – 
    ใช้ระบบบนชิป (System on Chip: SoC) เช่น Qualcomm Snapdragon
    – ระบบที่ทำงานได้โดยไม่ต้องพึ่งพาระบบอื่น เช่น เครื่องคิดเลข นาฬิกาดิจิทัล
  • Networked Embedded Systems:
    – 
    ระบบที่เชื่อมต่อกับเครือข่ายเพื่อส่งข้อมูล เช่น IoT Sensors, Smart Thermostats
  • Embedded Systems:
    – 
    ระบบฝังตัวที่เคลื่อนย้ายได้ เช่น สมาร์ทโฟน และอุปกรณ์พกพา
  • Real-Time Embedded Systems:
    – 
    ระบบที่ต้องตอบสนองในเวลาจำกัด เช่น ระบบถุงลมนิรภัยในรถยนต์

3. ความสำคัญของ Embedded System ในชีวิตประจำวัน

ระบบฝังตัวเป็นพื้นฐานของเทคโนโลยีสมัยใหม่ที่พบได้ในทุกอุตสาหกรรม ตัวอย่างที่ชัดเจนได้แก่:

  • ระบบสมาร์ทโฮม (Smart Home Systems):
    – 
    อุปกรณ์ที่เชื่อมต่ออินเทอร์เน็ต เช่น หลอดไฟอัจฉริยะ กล้องวงจรปิดที่สามารถเชื่อมกับสมาร์ทโฟน หรือเครื่องปรับอากาศที่ควบคุมผ่านแอปพลิเคชัน
    – ใช้ระบบฝังตัวที่ทำหน้าที่รับคำสั่งผ่าน Wi-Fi หรือ Bluetooth เพื่อควบคุมฮาร์ดแวร์
  • ระบบยานยนต์ (Automotive Systems):
    – 
    รถยนต์สมัยใหม่มีระบบฝังตัวหลายส่วน เช่น เซ็นเซอร์จอดรถ กล้องมองหลัง ระบบ GPS และระบบช่วยเบรกฉุกเฉิน
    – ระบบเหล่านี้ทำให้การขับขี่ปลอดภัยและสะดวกสบายยิ่งขึ้น
  • อุตสาหกรรมการผลิต:
    – 
    ระบบฝังตัวถูกใช้งานในเครื่องจักรอัตโนมัติ หุ่นยนต์อุตสาหกรรม และระบบตรวจสอบคุณภาพสินค้าในสายการผลิต
    – ช่วยเพิ่มความแม่นยำและลดต้นทุนแรงงาน

4. ข้อดีและข้อเสียของ Embedded System

ข้อดีของ Embedded System

  • ประหยัดพลังงานและมีขนาดเล็ก
  • มีประสิทธิภาพสูงในงานเฉพาะทาง
  • ต้นทุนต่ำในการผลิตจำนวนมาก
  • เชื่อถือได้และใช้งานง่าย

ข้อเสียของ Embedded System

  • ยากต่อการอัปเกรดหรือปรับปรุง
  • ความยืดหยุ่นน้อย
  • การพัฒนาอาจต้องใช้ความเชี่ยวชาญสูง

5. เปรียบเทียบ Embedded System กับ Desktop Computer

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

การพัฒนาโปรแกรมบนระบบประมวลผลแบ่งออกเป็น 2 ประเภทคือ

  1. Native Development หมายถึงการพัฒนาโปรแกรมที่รันโดยตรงบนระบบปฏิบัติการที่คอมพิวเตอร์ใช้งาน เช่น Windows, macOS หรือ Linux โดยโปรแกรมที่พัฒนาจะถูกคอมไพล์ให้เหมาะสมกับ สถาปัตยกรรม และ ระบบปฏิบัติการ ของเครื่องที่โปรแกรมจะทำงาน มีลักษณะสำคัญดังนี้
  • การคอมไพล์เฉพาะเจาะจง: โปรแกรมจะถูกคอมไพล์ให้เหมาะสมกับระบบปฏิบัติการและสถาปัตยกรรมฮาร์ดแวร์ที่ใช้ ตัวอย่างเช่น หากพัฒนาด้วยภาษา C++ บน Windows โปรแกรมที่คอมไพล์จะเป็นไฟล์ .exe ที่สามารถรันได้เฉพาะบนระบบ Windows
  • เข้าถึงฟังก์ชันของระบบปฏิบัติการ: โค้ดที่เขียนจะสามารถเข้าถึง API (Application Programming Interface) ของระบบปฏิบัติการเพื่อเข้าถึงฟังก์ชันต่าง ๆ เช่น การจัดการไฟล์, การจัดการหน้าต่าง UI, การเข้าถึงอุปกรณ์เสริม (เช่น พอร์ต USB หรือการ์ดจอ) ฯลฯ
  • ไม่ต้องการเครื่องมือเพิ่มเติม: โปรแกรมที่พัฒนาสำหรับ Native สามารถทำงานได้โดยตรงบนเครื่องที่รันระบบปฏิบัติการนั้น ๆ โดยไม่จำเป็นต้องใช้อุปกรณ์เสริมหรือเครื่องมือพิเศษในการจำลองระบบ
  • ตัวอย่างของ Native Development
    – การพัฒนา Desktop Applications เช่น โปรแกรม Microsoft Word หรือ Adobe Photoshop ที่รันโดยตรงบน Windows, macOS หรือ Linux
    – โปรแกรมที่เขียนด้วยภาษา C, C++, Java บนเครื่องคอมพิวเตอร์ที่มีระบบปฏิบัติการ Windows หรือ Linux ที่คอมไพล์เพื่อให้ทำงานบนเครื่องนั้น ๆ

2Cross Platform Development เป็นกระบวนการพัฒนาโปรแกรมที่เขียนและคอมไพล์บนเครื่องคอมพิวเตอร์ที่มีทรัพยากรสูง (เช่น PC หรือ Mac) แต่โค้ดนั้นจะถูกใช้งานบนฮาร์ดแวร์อื่นที่มีข้อจำกัดด้านทรัพยากร (เช่น ระบบ Embedded หรือ ไมโครคอนโทรลเลอร์) โดยโค้ดที่เขียนบนเครื่องคอมพิวเตอร์จะถูกคอมไพล์ให้เหมาะสมกับฮาร์ดแวร์เป้าหมาย และสุดท้ายจะต้องถูกโอนย้ายไปยังฮาร์ดแวร์เพื่อทดสอบการทำงานจริง มีลักษณะที่สำคัญคือ

  • เครื่องคอมพิวเตอร์ที่พัฒนาโปรแกรม (host machine) จะมี ทรัพยากรสูง เช่น CPU ที่เร็วและหน่วยความจำที่มากกว่า ในขณะที่โปรแกรมที่พัฒนา target hardware (เช่น Embedded system หรือ Microcontroller) จะมี ข้อจำกัดด้านทรัพยากร เช่น พื้นที่จัดเก็บข้อมูลที่จำกัด หรือพลังงานต่ำ
  • คอมไพล์ให้เหมาะสมกับฮาร์ดแวร์เป้าหมาย: โค้ดที่เขียนบนเครื่องคอมพิวเตอร์จะถูกคอมไพล์ให้เหมาะสมกับสถาปัตยกรรมของฮาร์ดแวร์ที่มีข้อจำกัดนั้นๆ เช่น การคอมไพล์โปรแกรมบนเครื่องคอมพิวเตอร์ที่มี Linux แล้วนำไปใช้งานบน ไมโครคอนโทรลเลอร์ หรือ เซิร์ฟเวอร์ที่ใช้ Embedded OS เช่น FreeRTOS
  • การโอนย้ายและทดสอบ: หลังจากที่โปรแกรมคอมไพล์เสร็จสิ้นจะต้องมีการ โอนย้าย ไปยัง ฮาร์ดแวร์เป้าหมาย เพื่อทำการทดสอบการทำงานจริง (เช่น การโอนย้ายโค้ดจาก PC ไปยัง Microcontroller เพื่อทดสอบ)
  • ตัวอย่างของ Cross Platform Development
    – การพัฒนาโปรแกรมสำหรับ Embedded Systems เช่น การควบคุมเครื่องจักร, ระบบอัตโนมัติ, หรือ IoT Devices ที่ใช้ ไมโครคอนโทรลเลอร์หรือ Single Board Computers (SBC) เช่น Raspberry Pi
    – การพัฒนาโปรแกรมสำหรับ เซ็นเซอร์อัจฉริยะ หรือ ระบบตรวจจับ ที่ทำงานในสภาพแวดล้อมที่มีทรัพยากรจำกัด ซึ่งโปรแกรมจะต้องคอมไพล์ให้ทำงานบนฮาร์ดแวร์ที่มีข้อจำกัดในด้านหน่วยความจำและพลังงาน

6.1 กระบวนการในการพัฒนา Embedded System แบบ Cross Platform

การพัฒนาระบบสมองกลฝังตัวจัดเป็นการพัฒนาข้ามแพลตฟอร์ม ซึ่งเป็น กระบวนการพัฒนาโปรแกรมที่เขียนและคอมไพล์บนเครื่องคอมพิวเตอร์ที่มีทรัพยากรสูง (เช่น PC หรือ Mac) แต่โค้ดนั้นจะถูกใช้งานบนฮาร์ดแวร์อื่นที่มีข้อจำกัดด้านทรัพยากร (เช่น ระบบ Embedded หรือ Microcontroller) โดยโค้ดที่เขียนบนเครื่องคอมพิวเตอร์จะถูกคอมไพล์ให้เหมาะสมกับฮาร์ดแวร์เป้าหมาย และสุดท้ายจะต้องถูกโอนย้ายไปยังฮาร์ดแวร์เพื่อทดสอบการทำงานจริง ในการพัฒนาแบบข้ามแพลตฟอร์มมีกระบวนการดังนี้

⦾ เตรียมเครื่องมือและเครื่องคอมไพล์ (Cross Compiler)
การพัฒนาระบบแบบข้ามแพลตฟอร์ม จำเป็นต้องมีเครื่องมือที่รองรับการคอมไพล์โค้ดให้สามารถทำงานบนฮาร์ดแวร์ที่เราต้องการ เช่น หากเราพัฒนาสำหรับไมโครคอนโทรลเลอร์ที่ใช้สถาปัตยกรรม ARM (เช่น STM32, Raspberry Pi Pico) เราจะใช้ GCC ARM Compiler หรือ ARM Keil MDK เป็นเครื่องมือในการคอมไพล์โค้ดให้เหมาะสมกับสถาปัตยกรรมของฮาร์ดแวร์นั้น

⦾ เขียนโปรแกรมบนเครื่องคอมพิวเตอร์
ในขั้นตอนนี้ เราจะเขียนโค้ดโปรแกรมบนเครื่องคอมพิวเตอร์โดยใช้ภาษาการเขียนโปรแกรมที่เหมาะสมกับระบบ Embedded เช่น C หรือ C++ ซึ่งสามารถใช้ IDE (Integrated Development Environment) เช่น EclipseVSCodeSTM32CubeIDE, หรือ Arduino IDE เป็นต้น

⦾ คอมไพล์โค้ดด้วย Cross Compiler
เมื่อเขียนโค้ดเสร็จแล้ว โปรแกรมจะถูกคอมไพล์ให้เป็นไฟล์ที่สามารถรันบนฮาร์ดแวร์เป้าหมาย เช่น .bin.hex หรือ .elf โดยใช้ Cross Compiler ที่เหมาะสมกับฮาร์ดแวร์เป้าหมาย (เช่นการใช้ GCC ARM Compiler สำหรับระบบ ARM)

⦾ โอนไฟล์เฟิร์มแวร์ไปยังฮาร์ดแวร์
หลังจากที่โค้ดคอมไพล์เสร็จแล้ว ไฟล์เฟิร์มแวร์จะถูกโอนไปยังฮาร์ดแวร์เป้าหมาย โดยสามารถใช้เครื่องมือเช่น JTAGSWD (Serial Wire Debug)USB หรือ Bootloader ที่เชื่อมต่อกับฮาร์ดแวร์เป้าหมาย

⦾ ทดสอบและดีบักบนฮาร์ดแวร์
หลังจากที่โค้ดถูกโหลดเข้าสู่ฮาร์ดแวร์เป้าหมายแล้ว ต้องทำการทดสอบการทำงานจริง บนฮาร์ดแวร์นั้น การทดสอบนี้อาจใช้เครื่องมือดีบัก (Debugging Tools) เช่น GDB หรือ OpenOCD เพื่อทำการติดตามการทำงานและตรวจสอบข้อผิดพลาดที่อาจเกิดขึ้นในระหว่างการทำงานของระบบบนฮาร์ดแวร์

⦾ การดีบักและปรับปรุงโค้ด
หากพบข้อผิดพลาดในระหว่างการทดสอบหรือการทำงาน ระบบดีบักจะช่วยให้สามารถหาสาเหตุของข้อผิดพลาดและแก้ไขโค้ดได้ เช่น การติดตามค่าของตัวแปรต่าง ๆ หรือการทดสอบข้อผิดพลาดที่เกิดขึ้นในระหว่างการทำงานบนฮาร์ดแวร์

6.2 เครื่องมือในการพัฒนาสมองกลฝังตัวแบบข้ามแพลตฟอร์ม
⦾ Cross Compiler
เครื่องมือที่ใช้แปลงโค้ดที่เขียนบนเครื่องคอมพิวเตอร์ให้เหมาะสมกับฮาร์ดแวร์เป้าหมาย ตัวอย่างของ Cross Compiler ได้แก่:

  • GCC (GNU Compiler Collection) สำหรับการคอมไพล์โค้ดให้เหมาะกับไมโครคอนโทรลเลอร์ที่ใช้สถาปัตยกรรม ARM
  • Keil MDK (Microcontroller Development Kit): สำหรับพัฒนาโปรแกรมในระบบ Embedded โดยเฉพาะ

⦾ IDE (Integrated Development Environment)
ใช้ในการเขียนโค้ดและคอมไพล์โปรแกรม ตัวอย่างของ IDE ที่ใช้ในการพัฒนาแบบ ข้ามแพลตฟอร์มได้แก่:

  • Eclipse: ใช้สำหรับการพัฒนาโค้ดบนหลากหลายแพลตฟอร์ม
  • VSCode: ใช้สำหรับการพัฒนาโปรแกรมที่รองรับหลายภาษาและสามารถตั้งค่าด้วย Cross Compiler
  • Keil µVision: IDE ที่ทรงพลังสำหรับการพัฒนา ARM Cortex-M
  • STM32CubeIDE: ใช้ในการพัฒนาระบบที่ใช้ไมโครคอนโทรลเลอร์ STM32
  • IAR Embedded Workbench: IDE เป็นเครื่องมือที่ครบวงจรและได้รับความนิยมในวงการพัฒนาระบบฝังตัว ใช้ได้กับไมโครคอนโทรลเลอร์ หลากหลายตระกูล เช่น ARM, AVR, MSP430 และอื่น ๆ

⦾ Emulator/Simulator
ช่วยจำลองการทำงานของระบบ Embedded ก่อนที่จะทำการทดสอบบนฮาร์ดแวร์จริง ตัวอย่างเช่น:

  • QEMU: สำหรับการจำลองฮาร์ดแวร์ ARM
  • Proteus: ใช้ในการจำลองวงจรอิเล็กทรอนิกส์และการทำงานของไมโครคอนโทรลเลอร์

⦾ เครื่องมือดีบัก
เครื่องมือที่ใช้ในการติดตามการทำงานของโค้ดบนฮาร์ดแวร์จริง เช่น

  • GDB (GNU Debugger): ใช้ในการดีบักโปรแกรมบนฮาร์ดแวร์
  • OpenOCD: ใช้สำหรับเชื่อมต่อกับฮาร์ดแวร์ผ่านโปรโตคอลต่าง ๆ เช่น JTAG หรือ SWD
  • ST-LINK: เครื่องมือดีบักและโปรแกรมเฉพาะของ STMicroelectronics
  • J-Link: อุปกรณ์ดีบักและโปรแกรมจาก Segger

6.3 จุดเด่นจุดด้อยของการพัฒนาแบบข้ามแพลตฟอร์ม
⦾ จุดเด่น

  • ใช้ทรัพยากรที่มีประสิทธิภาพ: สามารถใช้เครื่องคอมพิวเตอร์ที่มีความสามารถสูงในการพัฒนาและคอมไพล์โค้ด
  • การพัฒนารวดเร็ว: การเขียนโค้ดและการดีบักทำได้ง่ายและรวดเร็วบนเครื่องคอมพิวเตอร์ที่มีเครื่องมือช่วยเหลือ
  • การทดสอบที่มีประสิทธิภาพ: สามารถจำลองการทำงานหรือทดสอบโค้ดก่อนนำไปใช้จริง
  • ใช้เครื่องมือดีบักที่มีประสิทธิภาพ: เครื่องมือดีบักที่มีอยู่ในตลาดสามารถช่วยให้การพัฒนาเป็นไปได้อย่างรวดเร็วและมีประสิทธิภาพ

⦾ จุดด้อย

  • ความแตกต่างระหว่างการจำลองและฮาร์ดแวร์จริง: การทดสอบบน Emulator หรือ Simulator อาจไม่สะท้อนการทำงานจริงบนฮาร์ดแวร์เป้าหมาย
  • ความซับซ้อนของเครื่องมือ: การตั้งค่าเครื่องมือเช่น Cross Compiler และ Debugger อาจซับซ้อนและต้องใช้เวลาในการเรียนรู้
  • ต้องอาศัยการโอนย้ายโค้ด: การต้องโอนไฟล์เฟิร์มแวร์จากเครื่องพัฒนาไปยังฮาร์ดแวร์อาจเป็นกระบวนการที่ช้า

การพัฒนาแบบ Cross Platform เป็นกระบวนการที่ใช้เครื่องมือจากระบบคอมพิวเตอร์ที่มีทรัพยากรสูงเพื่อพัฒนาโปรแกรมสำหรับระบบ Embedded ที่มีข้อจำกัดด้านทรัพยากร โดยการใช้ Cross Compiler, IDE, และเครื่องมือดีบัก ทำให้สามารถพัฒนาและทดสอบโค้ดได้รวดเร็วและสะดวก ก่อนที่จะโอนไปยังฮาร์ดแวร์เป้าหมายสำหรับการทดสอบและการใช้งานจริง

“Nameless, seeking neither fame nor recognition, even their existence remains concealed.
Their presence is acknowledged only through the results of their actions.
This is truly a challenge of the times.”

“ ไร้นาม ไม่ถามหาชื่อเสีpง กระทั่งตัวตนยังถูกเก็บงำ
ตระหนักถึงการมีอยู่ ด้วยผลแห่งการกระทำ
นับเป็นความท้าทายแห่งยุคสมัย ”

Naturvirtus

XXV Novembris MMXXIV