
FreeRTOS là một hệ điều hành nhúng thời gian thực (Real Time Operating System) mã nguồn mở được phát triển bởi Real Time Engineers Ltd, sáng lập và sở hữu bởi Richard
Barry. FreeRTOS được thiết kế phù hợp cho nhiều hệ nhúng nhỏ gọn vì nó chỉ triển khai rất ít các chức năng như: cơ chế quản lý bộ nhớ và tác vụ cơ bản, các hàm API quan trọng cho cơ chế đồng bộ. Nó không cung cấp sẵn các giao tiếp mạng, drivers, hay hệ thống quản lý tệp (file system) như những hệ điều hành nhúng cao cấp khác. Tuy vậy, FreeRTOS có nhiều ưu điểm, hỗ trợ nhiều kiến trúc vi điều khiển khác nhau, kích thước nhỏ gọn (4.3 Kbytes sau khi biên dịch trên ARM7), được viết bằng ngôn ngữ C và có thể sử dụng, phát triển với nhiều trình biên dịch C khác nhau (GCC, OpenWatcom, Keil, IAR, Eclipse, …), cho phép không giới hạn các tác vụ chạy đồng thời, không hạn chế quyền ưu tiên thực thi, khả năng khai thác phần cứng. Ngoài ra, nó cũng cho phép triển khai các cơ chế điều độ giữa các tiến trình như: queues, counting semaphore, mutexes.
FreeRTOS là một hệ điều hành nhúng rất phù hợp cho nghiên cứu, học tập về các kỹ thuật, công nghệ trong viết hệ điều hành nói chung và hệ điều hành nhúng thời gian thực nói riêng, cũng như việc phát triển mở rộng tiếp các thành phần cho hệ điều hành hành (bổ sung modules, driver, thực hiện porting). Embedded247 trân trọng giới thiệu một số bài viết liên quan tìm hiểu và khai thác hệ điều hành này.
Để tiếp cận nhanh nhất chúng ta sẽ porting FreeRTOS lên vi điều khiển ARM7
- Sử dụng bộ KIT MCB2300 (LPC2378)
- Công cụ biên dịch Keil for ARM (version 4)
- Mạch nạp U-Link Emulator
- Mã nguồn FreeRTOS (Tham khảo file đính kèm chứa project mã nguồn FreeRTOS cấu hình port cho LPC2378). Mã nguồn cơ bản có thể tải trên trang chủ www.freertos.org (download version 7.06)
Để thực hiện ứng dụng này, đầu tiên sẽ tùy chỉnh project để porting cho LPC2378, sau đó bổ sung thêm các mô đun (tác vụ) cần thiết để giao tiếp các ngoại vi trên KIT
Sơ đồ các file trong project và phân bổ chức năng như sau:

§ FreeRTOS.h: File này nhằm định hướng cho hệ điều hành xem sử dụng các chức năng như thế nào. Kiểm tra xem FreeRTOSconfig.h đã định nghĩa các ứng dụng macro phụ thuộc vào từng chương trình một cách rõ ràng hay chưa. Nếu hàm hoặc macro nào muốn sử dụng cần được đặt lên 1, ngược lại đặt ở 0.
§ Task.h: Gồm năm phần là các macro và các định nghĩa; Các task tạo API; Các task điều khiển API; Các task tiện ích; Bộ lập lịch
§ List.h: Trong file list.h, FreeRTOS định nghĩa các cấu trúc, các macro và các hàm phục vụ cho các tiện ích về danh sách. Chức năng của file là tạo mới, thêm, bớt cá c tác vụ vào danh sách các task đang chạy (running), sẵn sàng (ready), khoá (block), treo (suppend).
§ croutine.h: Tạo ra các hàm và các macro liên quan đến task và queue
Quá trình thực hiện khởi động xong hệ điều hành nhúng FreeRTOS nó sẽ trả quyền điều khiển cho chương trình viết trong main. Trong main chúng ta thực hiện các công việc:
§ Khởi tạo các task, khởi tạo cho các thiết bị ngoại vi như màn hình, thiết lập ngắt…
§ Tạo các task ứng dụng: điều khiển led và task đọc giá trị ADC hiển thị lên màn hình
§ Khởi động bộ lập lịch – Schedule
Hàm main có nội dung như sau:
{
/* cau hinh khoi tao */
prvSetupHardware();
//tao task
xTaskCreate(idleTask, "idleTask", configMINIMAL_STACK_SIZE, NULL, 2, NULL);
// khoi tao LCD
lcd_init();
lcd_clear();
// khoi tao ngat cho dieu khien Led
vInitIntContrlLed();
// khoi tao ADC
initADC();
// Thuc hien lap lich
vTaskStartScheduler();
while(1)
{
}
}
§ Trong đó idleTask chỉ là một task rỗng, nó có chức năng để duy trì hệ thống, trong hệ thống luôn phải có ít nhất một task;
§ Hàm prvSetupHardware thực hiện khởi tạo, cụ thể là thiết lập cổng P2 chức năng GPIO output để điều khiển dãy led;
§ Các hàm lcd thực hiện khởi tạo cho LCD, khởi tạo ADC.
§ Hàm vInitIntContrlLed() sẽ thực hiện modul điều khiển dãy led và hiển thị lên màn hình.
§ Cuối cùng là vTaskStartScheduler để lập lịch các task và đưa vào hoạt động
Biên dịch project bằng Keil và nạp lên KIT

