FreeRTOS 介绍

1. 学RTOS的作用

基础的单片机编程通常都是指裸机编程,即不加入任何 RTOS(Real Time Operating System 实时操作系统),但是处理的工作多了后,裸机开发就会很困难,所以需要使用RTOS。

RTOS 通常比通用操作系统体积更小、重量更轻,因此 RTOS 非常适用于 内存、计算和功率受限的设备。

1.1 裸机与RTOS对比

裸机的工作流程如下,在裸机系统中,所有的操作都是在一个无限的大循环里面实现, 支持中断检测,中断发生后会优先处理中断,同时中断也具有优先级,这里默认大家有这个知识基础,不再赘述。

RTOS的工作流程如下。在多任务系统中,根据程序的功能,把这个程序主体分割成一个个独立的,无限循环且不能返回的子程序,称之为任务。每个任务都是独立的,互不干扰的,且具备自身的优先级,它由操作系统调度管理。加入操作系统后,开发人员不需要关注每个功能模块之间的冲突,重心放在子程序的实现。

而任务之间的切换,称为调度, 调度器是内核中负责决定在特定时间应执行什么任务的部分。大家可以在网上自行查阅。

可以发现,其实两者工作流有相似之处,但是加入RTOS后,开发人员开发更加便捷。

1.2 RTOS构成关键要素

  1. 内核:作为RTOS的核心组件,内核负责任务调度、上下文切换以及系统资源的管理。它实现了定时任务处理、优先级调度机制和中断响应等功能,是整个操作系统运行的基础。

  2. 任务:在RTOS中,任务是最基本的独立执行单元,通常表现为线程、进程或可并发运行的一段代码。多个任务可以在系统中同时存在,并由内核进行统一调度与管理。

  3. 调度算法:调度算法决定了任务的执行顺序和时间,是RTOS实现高效实时响应的关键。常见的调度方式包括基于优先级的抢占式调度和轮转调度(Round Robin)等。

  4. 中断处理:中断机制使RTOS能够对外部事件做出快速响应。当发生中断时,系统会暂停当前任务,转而执行对应的中断服务程序。RTOS通常支持中断优先级管理,以确保高优先级事件能够被优先处理。

  5. 通信机制:为了协调多个任务之间的操作,RTOS提供了多种任务间通信与同步机制,例如信号量、消息队列、事件标志组以及共享内存等,用于保障数据的一致性与任务间的有序协作。

1.3 RTOS工作示例伪代码

以下RTOS示例代码可以实现LED工作的同时,读取传感器数据。如果使用裸机开发,全部放在while(1)中,你写代码和管理将会十分痛苦。

// LED控制任务
void vTask1(void *pvParameters) {
    while(1) {
        // 切换LED状态
        toggleLED();
        // 暂停100毫秒
        vTaskDelay(pdMS_TO_TICKS(100));
    }
}

// 传感器任务
void vTask2(void *pvParameters) {
    while(1) {
        // 读取数据
        float temperature = readTemperature();
        printf("Temperature: %.2f\n", temperature);
        // 暂停500毫秒
        vTaskDelay(pdMS_TO_TICKS(500));
    }
}

int main(void) {
    // 创建任务
    xTaskCreate(vTask1, "LED Task", 1000, NULL, 1, NULL);
    xTaskCreate(vTask2, "Temp Task", 1000, NULL, 2, NULL);

    // 开始调度
    vTaskStartScheduler();
    return 0;
}
Copyright © 油炸鸡开源硬件 | 渝ICP备2024035140号-2 | all right reserved,powered by Gitbook更新时间: 2025-06-04 15:37:43

results matching ""

    No results matching ""