Tìm hiểu hệ điều hành nhúng FreeRTOS

Print

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:

Hình 1. Sơ đồ phân bổ các file trong project FreeRTOS
Project của chúng ta sẽ là mục Demo như trên hình. Trong đó có các khai báo tham chiếu đến các mục còn lại. Các file chính cần khai báo vào project gồm:

§  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:

int main( void )
{
        /* 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

Hình 2. Biên dịch project FreeRTOS bằng Keil và nạp lên KIT LPC2378

Kết quả demo hệ điều hành FreeRTOS chạy trên KIT với một số tác vụ minh  họa
Hình 3. Kết quả FreeRTOS chạy trên KIT

Bạn có đam mê ngành thiết kế vi mạch và bạn muốn có mức lương 1000 usd cùng lúc bạn

đang muốn tìm một Trung tâm để học vậy hãy đến với ngành vi mạch tại SEMICON

  HotLine: 0972 800 931 Ms Duyên