当前位置: 首页 > article >正文

掌握 FreeRTOS:打造高效嵌入式系统的第一步

实例对比说明:

  • 手机: 点击相机 -> 操作系统 -> 打开摄像头

  • 无操作系统: 相机 -> 打开摄像头也能实现,但方式死板、不支持第三方应用

MCU 对比说明:

  • 裸机开发: MCU -> 直接控制硬件

  • 使用操作系统: MCU -> 操作系统 -> 硬件

定义:操作系统是管理和控制计算机硬件与软件资源的程序,是运行在裸机上的最基本系统软件,其功能是为应用程序提供运行平台。

为什么使用操作系统?

  1. 提高 CPU 利用效率

  2. 用更少代码实现更复杂功能

  3. 屏蔽硬件差异,提高上层软件移植性

1.1.2 常见操作系统分类
  1. 实时操作系统(RTOS)

    • 注重实时性,体积小,适用于嵌入式系统

    • 依赖任务优先级进行调度

    • 示例:UCOSII/III、FreeRTOS、RT-Thread 等

  1. 分时操作系统

    • 任务调度依据时间片轮转

    • 示例:Windows 95、Linux 2.6 前版本

  1. 半实时半分时操作系统

    • 大型系统的常见选择

    • 示例:Windows、HarmonyOS、Linux 2.6+等

操作系统选择依据平台而定

  • 嵌入式领域:RTOS

  • 高性能芯片平台:大型操作系统

1.2 FreeRTOS 操作系统概述

1.2.1 FreeRTOS 的调度原则
  • RTOS:基于优先级

  • 分时系统:基于时间片

1.2.2 FreeRTOS 的程序结构
  • FreeRTOS 中优先级数字越大,优先级越高(与 UCOS 相反)

  • 最小/最大优先级保留给空闲/紧急任务

1.2.3 FreeRTOS 的任务结构
  • 任务控制块(TCB):系统分配内存记录任务信息

  • 任务函数:普通函数,执行任务内容

  • 任务优先级:用于调度

  • 任务栈:保存任务上下文(寄存器、变量等)

  • 任务状态:停止、等待、就绪、运行、中断

1.2.4 系统调度与任务切换
  • 任务调度:选择下一个任务(A->B 或 B->B)

  • 任务切换:当前任务被切换为其他任务

1.2.5 任务状态说明
  • 五种状态:停止、等待、就绪、运行、中断

  • 任务切换逻辑:

    • 延时 (vTaskDelay) 和挂起函数使任务进入挂起态

    • 时间到或调用唤醒函数使任务回到就绪态

    • 仅就绪态任务可进入运行态

1.3 实时操作系统 FreeRTOS

1.3.1 FreeRTOS 概念
  • 免费开源轻量级 RTOS

  • 支持任务管理、时间管理、信号量、消息队列、定时器等功能

  • 优点:源码公开、可移植、可裁剪

1.3.2 实时操作系统要求
  • 支持优先级调度和时间片轮转

  • 可配置为可剥夺/不可剥夺型内核

  • 实现多任务调度、资源管理、任务通信

1.3.3 功能概述
  • 任务管理、时间管理、信号量、消息队列、内存管理、定时器、协程等

  • 可用于资源受限的 MCU

1.3.4 获取与版本信息
  • 官网下载:https://www.freertos.org/a00104.html

  • 当前版本:V202112.00

1.3.5 FreeRTOS 移植
  • 问题处理:

    • xTaskGetCurrentTaskHandle:配置宏 INCLUDE_xTaskGetCurrentTaskHandle = 1

    • vApplicationStackOverflowHook:需手动添加钩子函数

void vApplicationStackOverflowHook(TaskHandle_t xTask, char *pcTaskName) {while(1) {}
}
  • 配置参数说明(FreeRTOSConfig.h)

#define configCPU_CLOCK_HZ          ((unsigned long) 72000000)
#define configTICK_RATE_HZ          ((TickType_t) 1000)
#define configMAX_PRIORITIES        (5)
#define configMINIMAL_STACK_SIZE    ((unsigned short) 128)
 
 

1.4 FreeRTOS 下的任务管理与通信

1.4.1 任务创建与管理

任务创建函数原型:

BaseType_t xTaskCreate(TaskFunction_t pxTaskCode,const char * const pcName,configSTACK_DEPTH_TYPE usStackDepth,void * const pvParameters,UBaseType_t uxPriority,TaskHandle_t * const pxCreatedTask
);

删除任务:

vTaskDelete(TaskHandle_t xTaskToDelete);

挂起与唤醒:

vTaskSuspend(TaskHandle_t xTaskToSuspend);
vTaskResume(TaskHandle_t xTaskToResume);
1.4.2 队列
  • 先进先出(FIFO)

  • 创建队列:

QueueHandle_t xQueueCreate(UBaseType_t uxQueueLength, UBaseType_t uxItemSize);
  • 发送信息:

xQueueSend(QueueHandle_t xQueue, const void * pvItemToQueue, TickType_t xTicksToWait);

后续内容包括信号量、互斥量、定时器、事件组与任务通知等通信机制,可继续扩展完善。

http://www.lryc.cn/news/2396736.html

相关文章:

  • 性能优化 - 案例篇:数据一致性
  • Spring框架学习day6--事务管理
  • 免费酒店管理系统+餐饮系统+小程序点餐——仙盟创梦IDE
  • Git企业级项目管理实战
  • 【实例】事业单位学习平台自动化操作
  • 4.8.3 利用SparkSQL统计每日新增用户
  • 创建ipv6 only和ipv6+ip4的k8s集群的注意事项
  • Qt概述:基础组件的使用
  • 判断使用什么技术来爬取数据详细讲解
  • YOLOV7改进之融合深浅下采样模块(DSD Module)和轻量特征融合模块(LFI Module)
  • 【仿生机器人】仿生机器人认知-情感系统架构设计报告
  • 数学建模期末速成 多目标规划
  • 常见ADB指令
  • IoTGateway项目生成Api并通过swagger和Postman调用
  • sl4j+log4j日志框架
  • 小白的进阶之路系列之九----人工智能从初步到精通pytorch综合运用的讲解第二部分
  • 深度学习与神经网络 前馈神经网络
  • NLP学习路线图(十四):词袋模型(Bag of Words)
  • Oracle数据库事务学习
  • MySQL 全量 增量备份与恢复
  • 【仿生机器人系统设计】涉及到的伦理与安全问题
  • NodeJS全栈WEB3面试题——P5全栈集成与 DApp 构建
  • 鸿蒙进阶——Mindspore Lite AI框架源码解读之模型加载详解(一)
  • 【数据结构】图论核心算法解析:深度优先搜索(DFS)的纵深遍历与生成树实战指南​
  • Mysql数据库 索引,事务
  • RESTful APInahamcon Fuzzies-write-up
  • 安装DockerDocker-Compose
  • 2025年机械化设计制造与计算机工程国际会议(MDMCE 2025)
  • Java生态中的NLP框架
  • NVM,Node.Js 管理工具