[RTOS-2] TASK MANAGEMENT

 

Tại sao lại phải dùng RTOS ?

Chia sẻ tài nguyên một cách đơn giản: cung cấp cơ chế để phân chia các yêu cầu về bộ nhớ và ngoại vi của MCU

Dễ debug và phát triển: Mọi người trong nhóm có thể làm việc một cách độc lập, các lập trình viên thì có thể tránh được các tương tác với ngắt, timer, với phần cứng (cái này mình không khuyến khích lắm vì hiểu được phần cứng vẫn sẽ tốt hơn nhiều)

Tăng tính linh động và dễ dàng bảo trì: thông qua API của RTOS,…


Ở trong FreeRtos thì người ta coi “task” là “thread” nhưng bạn cần phải phân biệt chúng 1 cách rạch ròi:

·       Task: tập hợp các lệnh được tải vào bộ nhớ. Có thể hiểu đơn giản đây là 1 số đơn vị công việc hoặc mục tiêu cần phải hoàn thành.

·       Thread: là 1 đơn vị của CPU với bộ đếm chương trình và bộ nhớ ngăn xếp của riêng nó.




Task states:

Ready

Suspended: vTaskSuspend(), vTaskResume()

Running

Blocked


void Task(void *para) {

   

   while (1) {


   }

}

Nếu các lệnh của task ko có trong while (1) thì phải xóa task sau khi chạy hết task.

Tham số truyền vào:

Priority

Name, Size (stack), para, xTaskHandle ( con tro dai dien) 1 task muon dieu khien truc tiep task khac

1. Scheduler

3 status

Ready to run

Running

Blocked

RUNNING: đang thực thi

READY: sẵn sàng để thực hiện

WAITING: chờ sự kiện

INACTIVE: không được kích hoạt

A task can only move to the blocked state by making a blocking call, requesting that some blocking condition be met. A blocked task remains blocked until the blocking condition is met. (It probably ought to be called the un blocking condition, but blocking is the terminology in common use among real-time programmers.) Examples of how blocking conditions are met include the following:

  • a semaphore token (described later) for which a task is waiting is released,

  • a message, on which the task is waiting, arrives in a message queue, or

  • a time delay imposed on the task expires.



Some points to remember include the following:

  • Most real-time kernels provide task objects and task-management services that allow developers to meet the requirements of real-time applications.

  • Applications can contain system tasks or user-created tasks, each of which has a name, a unique ID, a priority, a task control block (TCB), a stack, and a task routine.

  • A real-time application is composed of multiple concurrent tasks that are independent threads of execution, competing on their own for processor execution time.

  • Tasks can be in one of three primary states during their lifetime: ready, running, and blocked.

  • Priority-based, preemptive scheduling kernels that allow multiple tasks to be assigned to the same priority use task-ready lists to help scheduled tasks run.

  • Tasks can run to completion or can run in an endless loop. For tasks that run in endless loops, structure the code so that the task blocks, which allows lower priority tasks to run.

  • Typical task operations that kernels provide for application development include task creation and deletion, manual task scheduling, and dynamic acquisition of task information

3 techniques:

co-operative scheduling: lần lượt

round-robin scheduling: chia nhỏ theo khe thời gian

preemtive scheduling: phân bổ thời gian cho task có mức ưu tiên cao, 256 mức ưu tiên, có thể có nhiều task cùng mức

Preemptive: Các task có mức ưu tiên cao nhất luôn được kiểm soát bởi CPU, khi phát sinh ISR thì hệ thống sẽ tạm dừng task đang thực thi, hoàn thành ISR sau đó hệ thống thực thi task có mức ưu tiên cao nhất tại thời điểm đó. Sau đó hệ thống mới tiến hành nối lại các task đang bị gián đoạn.

Non-preemptive: Ở chế độ non-preemptive thì các task được chạy cho đến khi nó hoàn tất. Khi phát sinh ISR thì hệ thống sẽ tạm dừng task đang thực thi và hoàn thành ISR , sau khi hoàn thành ISR thì hệ thống sẽ quay lại thực thi nốt phần việc còn lại của task bị gián đoạn

2. Realtim services

3. Synchronization and Messaging

Nhận xét

Bài đăng phổ biến từ blog này

[Linux Command] - Các lệnh cơ bản