FreeRTOS应用开发常用函数汇总

FreeRTOS知识及常用API函数(更新中) 1、简介RTOS全称为:Real Time OS,就是实时操作系统,强调的是:实时性,例如打游戏和回复信息,不需要等某一件事做完,可每间隔1ms(一个时间片时钟节拍),然后交替做这两件 事,因为速度很快,从宏观的意义上来看,类似同步执行! 阅读详情
AI摘要

本文详细介绍了FreeRTOS操作系统的关键功能,包括任务创建与调度、任务延时、中断处理、任务挂起与恢复、任务状态查询、队列操作、信号量机制、队列集、事件标志组、任务通知以及软件定时器的使用。此外,还提到了低功耗模式和内存管理的相关内容。

FreeRTOS学习笔记:

1.任务创建函数(动态):

BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,
                            const char * const pcName, //任务名字
                            const configSTACK_DEPTH_TYPE usStackDepth,//为该任务分配的栈大小
                            void * const pvParameters,//任务函数的参数
                            UBaseType_t uxPriority,//任务优先级
                            TaskHandle_t * const pxCreatedTask )//任务句柄

2.开启任务调度器函数:

void vTaskStartScheduler( void );

3.相对延时函数:

void vTaskDelay( const TickType_t xTicksToDelay );//单位:系统时钟节拍周期

调用之后,任务会在调用处进入阻塞状态,经过指定系统时钟节拍之后,解除阻塞


4.绝对延时函数:

#define vTaskDelayUntil( pxPreviousWakeTime, xTimeIncrement )

5.创建任务(静态):

TaskHandle_t xTaskCreateStatic( TaskFunction_t pxTaskCode,//任务函数
                                    const char * const pcName, //任务名字
                                    const uint32_t ulStackDepth,//任务栈大小(对于stm32为32位)
                                    void * const pvParameters,//任务函数参数
                                    UBaseType_t uxPriority,//任务优先级
                                    StackType_t * const puxStackBuffer,//为该任务静态分配的内存指针(大小要和参数三匹配)
                                    StaticTask_t * const pxTaskBuffer )//任务句柄

此函数使能需要两个条件

  • 开启configSUPPORT_STATIC_ALLOCATION宏
  • 实现vApplicationGetIdleTaskMemory函数,实现如下:
#if configSUPPORT_STATIC_ALLOCATION==1
static StaticTask_t xIdleTaskTCBBuffer;
static StackType_t xIdleStack[configMINIMAL_STACK_SIZE];
  
void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize )
{
   
   
  *ppxIdleTaskTCBBuffer = &xIdleTaskTCBBuffer;
  *ppxIdleTaskStackBuffer = &xIdleStack[0];
  *pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;
}
#endif

6.挂起任务:

void vTaskSuspend( TaskHandle_t xTaskToSuspend )

7.恢复任务:

void vTaskResume( TaskHandle_t xTaskToResume )

8.在中断函数中恢复任务:

BaseType_t xTaskResumeFromISR( TaskHandle_t xTaskToResume )

返回值:
pdTRUE:恢复后,需要进行任务切换(手动切换!)
pdFALSE:恢复后,不需要进行任务切换

当恢复后,正在执行的任务优先级小于被恢复的任务,被恢复的任务抢占正在执行的任务,发生任务切换

freertos规定:

如果要在中断服务函数里面调用freertos的API函数,必须保证中断优先级低于freertos所管理的最高优先级


9.关闭中断与打开中断:

portDISABLE_INTERRUPTS();//关闭中断
portENABLE_INTERRUPTS();//打开中断

注意:

这两个函数只能用于控制freertos控制范围之内的中断,即优先级在宏configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY与configLIBRARY_LOWEST_INTERRUPT_PRIORITY之间的中断


10.任务调度器的挂起与恢复:

注意:

挂起任务调度器不会关闭中断,只是禁止任务切换而已,而进入临界区会禁止中断和任务切换

函数原型:

void vTaskSuspendAll( void );//挂起任务调度器
BaseType_t xTaskResumeAll( void );//恢复任务调度器

使用示例:

vTaskSuspendAll();//挂起任务调度器
{
   
   
	......//内容
}
xAlreadyYielded = xTaskResumeAll();//恢复任务调度器

挂起任务调度器之后,执行内容部分,不会切换任务,但是会被中断打断
注意与临界区区分,临界区的代码既不会切换任务,也不会被中断打断


11.临界区:

(1)任务级临界区代码保护

taskENTER_CRITICAL();
{
   
   
	....../*临界区*/
}
taskEXIT_CRITICAL();

(2)中断级临界区代码保护

uint32_t  save_status;
save_status  = taskENTER_CRITICAL_FROM_ISR();//将中断状态保存在save_status变量中
{
   
   
	....
FreeRTOS常用函数清单 任务相关 // 创建任务函数 portBASE_TYPE xTaskCreate( pdTASK_CODE pvTaskCode, const signed portCHAR * const pcName, unsigned portSHORT usStackDepth, void *pvParameters, unsigned portB... 阅读详情

相关推荐

FreeRTOS内核控制函数全解析:吃透实时系统核心机制

本文聚焦FreeRTOS中最核心的13个内核控制函数,从`taskYIELD()`触发的PendSV异常机制,到`taskENTER_CRITICAL()`系列函数对中断的精细管理;从调度器的启动与暂停,到系统节拍的手动调整,逐一拆解源码实现与底层逻辑。

smart_boy__的博客 993

FreeRTOS基本函数说明

FreeRTOS基本函数说明1. 变量类型定义2. 任务函数1. 任务创建(xTaskCreate)2. 任务删除(vTaskDelete)3. 任务延时(vTaskDelay )4. 任务延迟到指定时间(vTaskDelayUntil )5. 获得任务优先级(uxTaskPriorityGet )6. 设置任务优先级(vTaskPrioritySet )7. 挂起任务(vTaskSuspend )8. 唤醒挂起的任务(vTaskResume )9. 从中断唤醒挂起的任务(xTaskResumeFromIS

chao-@的博客 4089

【FreeRTOS】常用函数总结

FreeRTOS系统常用的函数总结

Goforyouqp的博客 4923

FreeRTOS总结1:常用函数详解之消息队列、信号量、互斥锁与任务管理

功能常用函数应用场景注意事项任务多任务并行执行堆栈大小需足够,避免溢出互斥锁保护共享资源(如全局变量)必须成对调用Take/Give二进制信号量任务与中断同步中断中使用`FromISR`函数计数信号量资源池管理(如缓冲区初始值应等于最大可用资源数消息队列任务间传递结构化数据数据不宜过大,避免频繁复制虽然信号量和互斥锁在 FreeRTOS 中使用相同的函数接口,但它们的用途和行为完全不同:• 信号量用于任务同步或事件通知,可以由任意任务释放。

m0_75180351的博客 1352

FreeRTOS函数一览表,大家在写FreeRTOS时可以参考

主要是自我总结FreeRTOS的函数,大家在写FreeRTOS时可以参考,具体使用方法也可参考里面的《FreeRTOS相关API函数》。

FreeRTOS函数一览表.xls

FreeRTOS 要用到的函数其实不多, 用EXCEL整理成表格, 思路也清晰起来了. 好东西大家一起分享!

Axure RP9汉化+授权全攻略:从下载到激活一步到位(附最新授权码)

本文提供Axure RP9从下载安装到界面汉化的完整指南,帮助设计师和产品经理快速上手这款原型设计工具。详细讲解了如何安全获取软件、执行汉化操作、理解核心界面布局,并介绍了创建交互原型和生成HTML文件的基础步骤,助力用户高效开展设计工作。

cuda7parallel的博客 1141

全球最大光伏电池缺陷异常检测数据集PVELAD【发布】

下载地址 1:GitHub - binyisu/PVEL-AD 下载地址 2:http://aihebut.com/col.jsp?id=118 下载地址 3:NAVEDownload 竞赛测试系统:Photovoltaic cell anomaly detection | Kaggle 一、简介 PVEL-AD 数据集又叫做EL2021数据集是用于对光伏电池异常缺陷检测方法进行基准测试的数据集,重点是光伏电池工业检测。PVEL-AD包含 36,543 张具有各种内部缺陷和异构背...

苏打水的杯子的博客 2万+

OpenCV函数用法之calibrateCamera

参考链接:opencv中标定函数calibrateCamera_ychl87的专栏-优快云博客 世界坐标系的三维点投影到成像坐标系中的二维点的投影公式如下: 其中(X,Y,Z)为世界坐标系中的三维点; (u,v)为成像面坐标系中的二维点; A为相机的内参数矩阵:(cx,cy)为主光轴点,一般为图像的中心;fx和fy为焦距; [R|t]为相机的外参数矩阵:R为旋转矩阵,t为位移矩阵; 上述公式的简单推理过程如下 考虑到镜头畸变 其中,k1,k2,k3,k4,k5和k6为径向畸变,p1和.

tiger&sheep的博客 3万+

保姆级教程:在爱快iKuai虚拟机里装OpenWrt旁路由,实现去广告和特殊功能

本文提供在爱快iKuai虚拟机中安装OpenWrt旁路由的详细教程,帮助用户实现去广告和特殊功能扩展。通过分步指导,包括虚拟机配置、网络设置和功能优化,打造稳定高效的家庭网络环境,特别适合软路由爱好者和网络管理员。

weixin_31364787的博客 827

Visual Studio Git 使用指南

Visual Studio 2022深度集成了Git功能,提供了直观的图形界面管理源代码。本文详细介绍了VS中Git的使用方法:从环境准备、克隆/创建仓库开始,重点讲解了"Git更改"窗口的日常操作,包括查看修改、暂存文件、提交推送等。同时涵盖了分支管理、查看历史、解决冲突等核心功能,以及储藏、重置等高级操作。文章还提供了实用技巧,如提交规范、频繁提交等最佳实践。VS的Git集成覆盖了日常开发需求,图形界面与命令行可互补使用,适合各层次开发者高效管理代码版本。

guigenyi的专栏 1568

AI大模型助力现金流精准预测案例详解

因为它的“注意力机制”能像“人一样思考”——比如,当预测“下周现金流”时,模型会重点关注“最近7天的销售数据”“未来7天的天气”“竞品是否有促销”这些关键因素,而忽略“去年同期的无关数据”。AI大模型不是“取代”财务人员,而是“赋能”他们——把财务人员从“重复的Excel操作”中解放出来,专注于“战略决策”(比如如何优化资金结构、如何提升资金利用率)。比如,“促销力度”这个特征,不是简单的“折扣率”,而是“折扣率×促销天数×覆盖SKU数量”,这样能更准确反映促销对现金流的影响。这些问题的核心,其实是。

AIGC应用创新大全的博客 1258

【Mode】Mode expansion monitors

对于宽带仿真,因为被支持的模式可能是波长的函数,因此,推荐在波长范围内增加频率的采样点数量去计算支持的波导模式分布或者光纤模式分布。对于宽带仿真,如果在被计算模式上的频率点的数量与通过 frequency-domain monitors 被测量的频率点的数量不匹配,这种情况是正常的。Mode expansion monitors 对于仿真偏振转换器是十分有用的,比如,在偏振转换器中,当你想要提取从输入模式到输出模式的转换效率,或者提取一个装置的 S 参数。给出了进入到被选择模式中的合透射率,

u011699626的博客 2760

uniapp(微信小程序) - 实现uniapp小程序电子签名板,横屏手写姓名签名专用写字画板,客户专用签字板,手写签名签字画板组件,手写签名,(详细运行示例,一键复制开箱即用)

uniapp实现微信小程序的电子签名效果,uniapp微信小程序 电子签名 写字板,用uniapp实现微信小程序的电子签名,uniapp微信小程序canvans实现手写签名,记录一个uniapp写的小程序的手写板,横屏,用于签名,unniapp实现电子签名,uniapp怎么做横屏的手写签名,uniapp如何实现签字板,uniapp小程序平台下怎么做电子签名板组件,uniapp电子签名插件,uniapp最好用的电子写字板插件组件源码,实现uniapp 手写签名功能,手写板、签字板,uni-app插件市场最好的

✅ 精选推荐文章 1万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: 模电基础:一文彻底搞懂二极管击穿和结电容
下一篇: 运算放大器基本电路
GuiStar_李什么恩
博客等级 码龄5年 107粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GuiStar_李什么恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值