แนะนำ Zephyr Real-Time Operating System (RTOS)#
▷ Zephyr RTOS#
Zephyr (ออกเสียงว่า "เซฟเฟอร์" ZEF-er) เป็นระบบปฏิบัติการเรียลไทม์ (Real-Time Operating System: RTOS) และเป็นซอฟต์แวร์ประเภทโอเพนซอร์สที่ถูกพัฒนาขึ้นเพื่อรองรับการใช้งานสำหรับระบบสมองกลฝังตัว (Embedded Systems) และอุปกรณ์ประเภท Internet of Things (IoT) ซึ่งมีทรัพยากรในระดับฮาร์ดแวร์ที่ค่อนข้างจำกัด
ประวัติความเป็นมา
- Zephyr RTOS มีจุดเริ่มต้นมาจากระบบปฏิบัติการเรียลไทม์ที่มีชื่อว่า Virtuoso RTOS ซึ่งพัฒนาโดยบริษัทในเบลเยียม
- ต่อมาในปี 2011 ระบบนี้ถูกซื้อกิจการโดยบริษัท Wind River Systems และได้เปลี่ยนชื่อเป็น Rocket RTOS
- ในปี 2015 ระบบถูกเผยแพร่เป็นโอเพนซอร์ส และในปี 2016 ได้เข้าร่วมเป็นโครงการหนึ่งของ Linux Foundation ภายใต้ชื่อใหม่คือ Zephyr และนับเป็นจุดเริ่มต้นที่เป็นทางการของโครงการ Zephyr RTOS
- ในขณะที่เขียนบทความนี้ เวอร์ชันล่าสุดของ Zephyr RTOS คือ v4.0.0
รูป: Zephyr Ecosystem (Source: zephyr.org)
จุดเด่นของ Zephyr RTOS ที่พอจะสรุปมาเป็นตัวอย่าง มีดังนี้
- เป็นซอฟต์แวร์ประเภทโอเพนซอร์ส (Apache 2.0 license)
- รองรับสถาปัตยกรรมของซีพียูที่หลากหลาย เช่น ARM, x86, RISC-V, MIPS, Xtensa และอื่น ๆ และบอร์ดไมโครคอนโทรลเลอร์หลายร้อยรายการ (สามารถค้นดูรายการได้จาก "Supported Boards and Shields")
- รองรับการทำงานของซีพียูแบบแกนเดียวและหลายแกน (Multi-core system support)
- มีผู้สนับสนุนหลักจากบริษัทใหญ่ เช่น Intel, Nordic Semiconductor, NXP และอื่น ๆ
- มีการพัฒนาอย่างต่อเนื่อง เช่น ดูจากจำนวนผู้มีส่วนร่วมและจำนวน Git Commits ในแต่ละเดือน
- มีการดูแลซอฟต์แวร์และสนับสนุนในระยะยาว ในรูปแบบของ Long Term Support (LTS)
- รองรับการทำงานของ Secure boot เช่น MCUboot secure bootloader
Zephyr RTOS มีไลบรารีที่ครอบคลุมการทำงานหลากหลาย เช่น:
- การเชื่อมต่อเครือข่าย:
- Bluetooth 5.0+ & BLE
- Wi-Fi / Ethernet (IPv4/IPv6 stack)
- CANbus
- โปรโตคอลสำหรับงาน IoT:
- CoAP & MQTT
- IEEE 802.15.4 / OpenThread & 6LoWPAN
- LoRa
- การรองรับ USB 2.0 และ USB-C
- การอัปเกรดเฟิร์มแวร์แบบ OTA (Over-the-Air upgrade)
- การรองรับ Secure Boot: เช่น MCUboot secure bootloader
รูป: Zephyr Architecture (Source: zephyr.org)
▷แนวทางและหัวข้อการเรียนรู้สำหรับ Zephyr RTOS#
สำหรับผู้ที่สนใจ ก็มีตัวอย่างหัวข้อที่สำคัญมานำเสนอ และเป็นแนวทางสำหรับการเริ่มต้นศึกษาและใช้งาน Zephyr RTOS ดังนี้
- การติดตั้งและใช้งานซอฟต์แวร์ อย่างเช่น West, CMake และ Zephyr SDK
- การตั้งค่าใช้งานด้วย Kconfig และ Devicetree / device tree overlay สำหรับ Zephyr RTOS project
- หลักการทำงานของ Zephyr Kernel & Kernel Services
- การเขียนโปรแกรมแบบ Multi-threading ด้วย Zephyr Kernel
- การจำแนกประเภทของ "เธรด"
- เธรดของระบบ (System Threads) เช่น Main Thread และ Idle Thread
- การสร้าง User Threads
- การกำหนดคุณสมบัติของ Threads เช่น Thread Stack Size และ Thread Priority
- สถานะการทำงานของเธรด (Thread States) และการควบคุมหรือเปลี่ยนสถานะของเธรด
- การสื่อสารกันระหว่างเธรด (Inter-Thread Synchronization & Communication) เช่น
- Semaphores
- Mutexes
- SpinLocks
- Critical Sections
- Events / Event Bits
- Message Queues
- Mailboxes
- Pipes
- การจัดการหน่วยความจำ (Memory Management)
- การจัดการอินเทอร์รัพท์ (Interrupt Handling)
- การจัดการเวลาของระบบและการใช้งาน Software Timers
- การจัดการและการประหยัดพลังงาน (Low Power Management)
▷ การเลือกบอร์ดไมโครคอนโทรลเลอร์สำหรับ Zephyr RTOS#
สำหรับผู้เริ่มต้นการเลือกบอร์ดไมโครคอนโทรลเลอร์สำหรับการนำมาทดลองและใช้งานร่วมกับ Zephyr RTOS ก็เป็นอีกหนึ่งประเด็นที่สำคัญ ตัวอย่างบอร์ดไมโครคอนโทรลเลอร์ที่มีราคาไม่แพง และนำมาใช้ได้ เช่น
- Raspberry Pi Pico / Pico-W (RP2040)
- Micro:bit v1 (nRF51822) & v2 (nRF52833)
- ESP32 Boards (Espressif ESP32 SoC)
- STM32 Nucleo Boards
หากเลือกใช้บอร์ด ESP32 ก็มีซอฟต์แวร์อย่างเช่น Wokwi ให้ทดลองเขียนโค้ดในเบื้องต้น และสามารถจำลองการทำงานของโปรแกรมเสมือนจริงได้ โดยใช้เว็บเบราว์เซอร์และยังไม่ต้องติดตั้งซอฟต์แวร์ของ Zephyr ในเครื่องคอมพิวเตอร์ของผู้ใช้
รูป: ตัวอย่างการเขียนโค้ด Zephyr-ESP32 และจำลองการทำงานด้วย Wokwi
ตัวอย่างโค้ดสำหรับ ESP32 ซึ่งสาธิตการสร้าง "เธรด" เพื่อทำให้ LED กระพริบด้วยอัตราคงที่
#include <stdio.h>
#include <zephyr/kernel.h>
#include <zephyr/drivers/gpio.h>
// Use the led0 alias for the onboard LED
#define LED0_NODE DT_ALIAS(led0)
static const struct gpio_dt_spec led = GPIO_DT_SPEC_GET(LED0_NODE, gpios);
#define SLEEP_TIME_MS (1000)
#define THREAD_STACK_SIZE (512)
#define THREAD_PRIORITY (5)
void led_blink_func(void *, void *, void *);
K_THREAD_DEFINE(led_blink_tid, THREAD_STACK_SIZE,
led_blink_func, NULL, NULL, NULL,
THREAD_PRIORITY, 0, 0);
void main(void) {
printk("Zephyr OS on %s\n", CONFIG_SOC);
while(1) {
k_sleep(K_FOREVER); // The main thread sleeps forever
}
}
void led_blink_func(void *p1, void *p2, void *p3) {
int value, state = 0;
if (gpio_pin_configure_dt(&led, GPIO_OUTPUT_ACTIVE) < 0) {
return;
}
for(;;) {
(void) gpio_pin_set_dt(&led, state^= 1);
printk("LED toggle: %d\n", state );
k_msleep(SLEEP_TIME_MS);
}
}
ซอฟต์แวร์อีกตัวเลือกหนึ่งที่แนะนำให้ใช้งานคือ VS Code IDE + Zephyr Extension Pack
รูป: VS Code IDE + Zephyr Extension Pack
รูป: ตัวอย่างการใช้งาน VS Code IDE + Zephyr สำหรับบอร์ด Raspberry Pi Pico (RP2040)
รูป: ตัวอย่างการใช้งาน VS Code IDE + Zephyr สำหรับบอร์ด ESP32
▷ กล่าวสรุป#
บทความนี้นำเสนอเนื้อหาในเบื้องต้นเกี่ยวกับระบบปฏิบัติการเวลาจริง ที่มีชื่อว่า Zephyr RTOS ซึ่งถือว่าเป็นตัวเลือกที่น่าสนใจ และเป็นอันดับต้น ๆ สำหรับระบบปฏิบัติการ RTOS ที่เป็น Open Source
แหล่งข้อมูลอ้างอิงและศึกษาเพิ่มเติม
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
Created: 2024-12-14 | Last Updated: 2024-12-14