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

news2025/6/4 23:06:26

实例对比说明:

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

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

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.coloradmin.cn/o/2396736.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

性能优化 - 案例篇:数据一致性

文章目录 Pre引言1. 分布式缓存概念2. Redis 与 Memcached 区别概览3. Spring Boot 中使用 Redis3.1 引入依赖与常用客户端3.2 RedisTemplate 的基本用法3.3 Spring Cache 注解式缓存 4. 秒杀业务简介及挑战5. Lua 脚本实现原子库存扣减5.1 准备阶段:数据预加载5.2 …

Spring框架学习day6--事务管理

Spring事务管理 Spring事务管理是在AOP的基础上,当我们的方法完全执行成功后,再提交事务,如果方法中有异常,就不提交事务 Spring中的事务管理有两种方式: ​ 1.编程式事务 ​ 需要我们在业务代码中手动提交 ​ 2.声明式…

免费酒店管理系统+餐饮系统+小程序点餐——仙盟创梦IDE

酒店系统主屏幕 房间管理 酒店管理系统的房间管理,可实现对酒店所有房间的实时掌控。它能清晰显示房间状态,如已预订、已入住、空闲等,便于高效安排入住与退房,合理分配资源,提升服务效率,保障酒店运营有条…

Git企业级项目管理实战

目录 1. 准备工作 2. 添加成员 2.1 添加企业成员 2.2 添加项目成员 2.3 添加仓库开发人员 3. 开发场景 - 基于git flow模型的实践 3.1 新需求加入 3.2 修复测试环境 Bug 3.3 修改预发布环境Bug 3.4 修改正式环境 Bug 3.5 紧急修复正式环境 Bug 4. 拓展阅读 4.1 其…

【实例】事业单位学习平台自动化操作

目录 一、创作背景: 二、实现逻辑: 三、代码分析【Deepseek分析】: 1) 主要功能 2)核心组件 2.1 GUI界面 (AutomationApp类) 2.2 浏览器自动化 2.3 平台特定处理 3) 关键技术 4)代码亮点 5)总结 四、运行截图: 五、程序代码: 特别声明:***本代码仅限编程学…

4.8.3 利用SparkSQL统计每日新增用户

在本次实战中,我们的任务是利用Spark SQL统计每日新增用户数。首先,我们准备了用户访问历史数据,并将其上传至HDFS。然后,通过Spark的交互式编程环境,我们读取了用户文件并将其转换为结构化的DataFrame。接着&#xff…

YOLOV7改进之融合深浅下采样模块(DSD Module)和轻量特征融合模块(LFI Module)

目录 一、研究背景​ 二. 核心创新点​ ​2.1 避免高MAC操作​ ​2.2 DSDM-LFIM主干网络​ 2.3 P2小目标检测分支​ ​3. 代码复现指南​ 环境配置 关键修改点 ​4. 实验结果对比​ 4.1 VisDrone数据集性能 4.2 边缘设备部署 4.3 检测效果可视化 ​5. 应用场景​ …

深度学习与神经网络 前馈神经网络

1.神经网络特征 无需人去告知神经网络具体的特征是什么,神经网络可以自主学习 2.激活函数性质 (1)连续并可导(允许少数点不可导)的非线性函数 (2)单调递增 (3)函数本…

NLP学习路线图(十四):词袋模型(Bag of Words)

在自然语言处理(NLP)的广阔天地中,词袋模型(Bag of Words, BoW) 宛如一块历经岁月沉淀的基石。它虽非当今最耀眼的明星,却为整个领域奠定了至关重要的基础,深刻影响了我们让计算机“理解”文本的…

鸿蒙进阶——Mindspore Lite AI框架源码解读之模型加载详解(一)

文章大纲 引言一、模型加载概述二、核心数据结构三、模型加载核心流程 引言 Mindspore 是一款华为开发开源的AI推理框架,而Mindspore Lite则是华为为了适配在移动终端设备上运行专门定制的版本,使得我们可以在OpenHarmony快速实现模型加载和推理等功能&…

【数据结构】图论核心算法解析:深度优先搜索(DFS)的纵深遍历与生成树实战指南​

深度优先搜索 导读:从广度到深度,探索图的遍历奥秘一、深度优先搜索二、算法思路三、算法逻辑四、算法评价五、深度优先生成树六、有向图与无向图结语:深潜与回溯,揭开图论世界的另一面 导读:从广度到深度,…

RESTful APInahamcon Fuzzies-write-up

RESTful API 路径详解 RESTful API(Representational State Transfer)是一种 基于 HTTP 协议的 API 设计风格,它通过 URL 路径 和 HTTP 方法(GET、POST、PUT、DELETE 等)来定义资源的访问方式。它的核心思想是 将数据…

2025年机械化设计制造与计算机工程国际会议(MDMCE 2025)

2025年机械化设计制造与计算机工程国际会议(MDMCE 2025) 2025 International Conference on Mechanized Design, Manufacturing, and Computer Engineering 一、大会信息 会议简称:MDMCE 2025 大会地点:中国贵阳 审稿通知&#…

Jmeter逻辑控制器、定时器

目录 一、Jmeter逻辑控制器 ①IF(如果)控制器 作用: 位置: 参数介绍: 步骤: ②循环控制器 作用: 位置: 步骤: 线程组属性VS循环控制器 ③ForEach控制器 作用: 位置&am…

R3GAN利用配置好的Pytorch训练自己的数据集

简介 简介:这篇论文挑战了"GANs难以训练"的广泛观点,通过提出一个更稳定的损失函数和现代化的网络架构,构建了一个简洁而高效的GAN基线模型R3GAN。作者证明了通过合适的理论基础和架构设计,GANs可以稳定训练并达到优异性能。 论文题目:The GAN is dead; long l…

吴恩达机器学习笔记(1)—引言

目录 一、欢迎 二、机器学习是什么 三、监督学习 四、无监督学习 一、欢迎 机器学习是当前信息技术领域中最令人兴奋的方向之一。在这门课程中,你不仅会学习机器学习的前沿知识,还将亲手实现相关算法,从而深入理解其内部机理。 事实上&…

【笔记】Windows 部署 Suna 开源项目完整流程记录

#工作记录 因篇幅有限,所有涉及处理步骤的详细处理办法请参考文末资料。 Microsoft Windows [Version 10.0.27868.1000] (c) Microsoft Corporation. All rights reserved.(suna-py3.12) F:\PythonProjects\suna>python setup.py --admin███████╗██╗…

【Elasticsearch】Elasticsearch 核心技术(一):索引

Elasticsearch 核心技术(一):索引 1.索引的定义2.索引的命名规范3.索引的增、删、改、查3.1 创建索引3.1.1 创建空索引 3.2 删除索引3.3 文档操作3.3.1 添加/更新文档(指定ID)3.3.2 添加文档(自动生成ID&am…

Fullstack 面试复习笔记:操作系统 / 网络 / HTTP / 设计模式梳理

Fullstack 面试复习笔记:操作系统 / 网络 / HTTP / 设计模式梳理 面试周期就是要根据JD调整准备内容(挠头),最近会混合复习针对全栈这块的内容,目前是根据受伤的JD,优先选择一些基础的操作系统、Java、Nod…

中科院报道铁电液晶:从实验室突破到多场景应用展望

2020年的时候,相信很多关注科技前沿的朋友都注意到,中国科学院一篇报道聚焦一项有望改写显示产业格局的新技术 —— 铁电液晶(FeLC)。这项被业内称为 "下一代显示核心材料" 的研究,究竟取得了哪些实质性进展…