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

FreeRTOS概述

文章目录

  • 核心文件
  • 头文件
  • 内存管理文件
  • 入口函数
  • 数据类型
  • 前缀

核心文件

  • 最核心文件:task.c和list.c
文件作用
tasks.c必需,任务操作
list.c必须,列表
queue.c基本必需,提供队列操作、信号量(semaphore)操作
timer.c可选,software timer
event_groups.c可选,提供 event group 功能
croutine.c可选,过时了

头文件

头文件作用
FreeRTOSConfig.hFreeRTOS的配置文件,用于选择调度算法(如configUSE_PREEMPTION)
FreeRTOS.h使用FreeRTOS API函数时必须包含。包含此文件后,再引入task.h、queue.h、semphr.h、event_group.h等其他头文件

内存管理文件

文件优点缺点
heap_1.c内存分配逻辑简单,执行时间可确定仅能分配内存,无法回收已分配的内存
heap_2.c支持动态内存分配,能实现最佳匹配(找到最适合请求大小的空闲内存块)会产生内存碎片,内存分配和回收的执行时间不确定
heap_3.c通过调用标准库函数来管理内存,兼容性较好由于调用标准库,执行速度较慢,执行时间不确定
heap_4.c能够将相邻的空闲内存块合并,有效减少内存碎片可解决碎片问题,执行时间不确定
heap_5.c在heap_4.c基础上,支持不连续的、分隔的内存块管理,适应更复杂的内存布局可解决碎片问题,执行时间不确定

入口函数

/* Init scheduler */
osKernelInitialize(); /* 初始化FreeRTOS运行环境 */
MX_FREERTOS_Init();  /* 创建任务 */

/* Start scheduler */
osKernelStart();    /* 启动调度器 */

数据类型

  • TickType_t:
    FreeRTOS 配置了一个周期性的时钟中断:Tick Interrupt,每发生一次中断,中断次数累加,这被称为 tick count,tick count 这个变量的类型就是 TickType_t,TickType_t 可以是 16 位的,也可以是 32 位的,FreeRTOSConfig.h 中定义 configUSE_16_BIT_TICKS 时,TickType_t 就是 uint16_t,否则 TickType_t 就是 uint32_t,对于 32 位架构,建议把 TickType_t 配置为 uint32_t

  • BaseType_t:
    这是该架构最高效的数据类型,32 位架构中,它就是 uint32_t,16 位架构中,它就是 uint16_t,8 位架构中,它就是 uint8_t,BaseType_t 通常用作简单的返回值的类型,还有逻辑值,比如 pdTRUE/pdFALSE

前缀

变量名前缀含义
cchar
sint16_t, short
lint32_t, long
xBaseType_t,其他非标准的类型:结构体、task handle、queue handle等
uunsigned
p指针
ucuint8_t, unsigned char
pcchar 指针

函数名的前缀有2部分:返回值类型、在哪个文件定义。

函数名前缀含义
vTaskPrioritySet返回值类型:void
在task.c中定义
xQueueReceive返回值类型:BaseType_t
在queue.c中定义
pvTimerGetTimerID返回值类型:pointer to void
在tmer.c中定义

宏的名字是大写,可以添加小写的前缀。前缀是用来表示:宏在哪个文件中定义。

宏的前缀含义:在哪个文件里定义
port(如portMAX_DELAY)portable.h或portmacro.h
task(如taskENTER_CRITICAL())task.h
pd(如pdTRUE)projdefs.h
config(如configUSE_PREEMPTION)FreeRTOSConfig.h
err(如errQUEUE_FULL)projdefs.h

通用的定义

pdTRUE1
pdFALSE0
pdPASS1
pdFAIL0

相关文章:

  • SpringBoot 接入 豆包 火山方舟大模型
  • 共享内存的原理和创建
  • #函数探幽
  • 《深度解析DeepSeek-M8:量子经典融合,重塑计算能效格局》
  • Zemax 中的 CAD 文件性能比较
  • LeetCode hot 100—爬楼梯
  • Android 线程池实战指南:高效管理多线程任务
  • leetcode日记(91)二叉树的最大深度
  • E1-106.租车骑绿道(贪心)
  • PDF文件中的颜色是什么原理?
  • 拉取gitlab项目时出现500的错误的权限问题
  • vue3通过render函数实现一个菜单下拉框
  • PIMPL模式
  • 深入理解 GPU 渲染加速与合成层(Composite Layers)
  • 008-生成不重复9位随机数
  • C++ 链表List使用与实现:拷贝交换与高效迭代器细致讲解
  • 分布式数据库OceanBase
  • 面试基础--高并发高可用架构深度实践:降级熔断(Hystrix vs Sentinel)核心原理与源码解析
  • 南昌长空STONE 60A-M 无人机电调深度测评:轻量化设计与工业级安全的融合典范
  • 使用服务器搭建开源建站工具Halo 2.0
  • 中日有关部门就日本水产品输华问题进行第三次谈判,外交部回应
  • 19岁女生注射头孢离世后续:院方道歉,医生停职,监管介入
  • 来论|建设性推进缅北和平进程——中国的智慧与担当
  • 公示!17个新职业、42个新工种亮相
  • 中消协点名新能源汽车行业:定金退款争议频发
  • 马新民卸任外交部条约法律司司长