พื้นฐานการพัฒนาระบบสมองกลฝังตัว
Embedded System (ระบบสมองกลฝังตัว) คือระบบคอมพิวเตอร์เฉพาะทางที่ถูกออกแบบมาให้ทำหน้าที่เฉพาะอย่างในงานหนึ่งๆ โดยมักจะฝังตัวอยู่ในอุปกรณ์หรือเครื่องมือที่เราพบเจอในชีวิตประจำวัน เช่น เครื่องใช้ไฟฟ้า อุปกรณ์อิเล็กทรอนิกส์ ยานพาหนะ ระบบควบคุมอุตสาหกรรม หรืออุปกรณ์ทางการแพทย์
1. ส่วนประกอบของ Embedded System
Embedded System ประกอบด้วยส่วนสำคัญ 3 ส่วน ได้แก่ :
- 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 ประเภทคือ
- 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 ที่คอมไพล์เพื่อให้ทำงานบนเครื่องนั้น ๆ
2. Cross 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) เช่น Eclipse, VSCode, STM32CubeIDE, หรือ Arduino IDE เป็นต้น
⦾ คอมไพล์โค้ดด้วย Cross Compiler
เมื่อเขียนโค้ดเสร็จแล้ว โปรแกรมจะถูกคอมไพล์ให้เป็นไฟล์ที่สามารถรันบนฮาร์ดแวร์เป้าหมาย เช่น .bin, .hex หรือ .elf โดยใช้ Cross Compiler ที่เหมาะสมกับฮาร์ดแวร์เป้าหมาย (เช่นการใช้ GCC ARM Compiler สำหรับระบบ ARM)
⦾ โอนไฟล์เฟิร์มแวร์ไปยังฮาร์ดแวร์
หลังจากที่โค้ดคอมไพล์เสร็จแล้ว ไฟล์เฟิร์มแวร์จะถูกโอนไปยังฮาร์ดแวร์เป้าหมาย โดยสามารถใช้เครื่องมือเช่น JTAG, SWD (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