RTOS Fundamentals
A Real-Time Operating System (RTOS) is designed to manage hardware resources and run multiple tasks with precise timing constraints.
[Diagram: Task States - Ready, Running, Blocked, Suspended]
Why use an RTOS?
For simple applications, a "Super Loop" (while(1)) is sufficient. However, as complexity grows, managing timing for multiple sensors, displays, and communication interfaces becomes difficult. An RTOS solves this by allowing you to write separate "Tasks" for each function.
Key Concepts
- Task: An independent thread of execution.
- Scheduler: The kernel component that decides which task runs at any given time.
- Context Switch: The process of saving the state of the current task and restoring the state of the next task.
- Tick: The time slice allocated to the scheduler (usually 1ms).
Inter-Task Communication
- Semaphore: Used for signaling between tasks or locking resources.
- Mutex: A special semaphore for mutual exclusion (preventing two tasks from accessing the same resource simultaneously).
- Queue: A thread-safe way to send data between tasks.
Example: FreeRTOS Tasks
void
Task1(void
*pvParameters) { for (;;) {
// Do something
vTaskDelay(1000 / portTICK_PERIOD_MS);
// Wait 1 sec
} }
void
Task2(void
*pvParameters) { for (;;) {
// Do something else
vTaskDelay(500 / portTICK_PERIOD_MS);
// Wait 0.5 sec
} }
int main()
{ xTaskCreate(Task1, "Task1", 100, NULL, 1, NULL); xTaskCreate(Task2,
"Task2", 100, NULL, 1, NULL); vTaskStartScheduler();
while(1); }