FreeRTOS常用API接口函数

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

提示:FreeRTOS常用API接口函数:并对部分参数附上自己的解释,后面继续补充


TaskHandle_t 任务句柄的类型
XXXXType_t 都可以输入数字为uint32
函数名的前缀有2部分:返回值类型、在哪个文件定义。
在这里插入图片描述

1.任务相关的API

TaskHandle_t    task1;//任务句柄  表示任务
TaskHandle_t * const pxCreatedTask//    应该传入  &task1  

1.1 创建任务:xTaskCreate

BaseType_t xTaskCreate( 	TaskFunction_t pxTaskCode,//对应任务函数
                            const char * const pcName, //给任务取名字 字符串
                 			//FreeRTOS中有限制任务取名字最大长度为configMAX_TASK_NAME_LEN
                            const configSTACK_DEPTH_TYPE usStackDepth,//为该任务分配的栈大小,单位为word,10表示40字节
                            void * const pvParameters,//调用任务函数时传入的参数
                            UBaseType_t uxPriority,//任务优先级
                            TaskHandle_t * const pxCreatedTask )// 以后使用它来操作这个任务
//返回值:

1.2 开启任务调度器函数:vTaskStartScheduler

void vTaskStartScheduler( void );

1.3 任务的删除:vTaskDelete

功能:删除任务

void vTaskDelete( TaskHandle_t 任务句柄P );//删除任务句柄代表的任务
//任务句柄P来指定任务,值为NULL时,表示暂停自己。

1.3 任务的挂起:vTaskSuspend

功能:挂起任务

void vTaskSuspend( TaskHandle_t 任务句柄P );//挂起任务句柄代表的任务
//用任务句柄P来指定任务,值为NULL时,表示暂停自己。

1.3 任务的恢复:vTaskResume & xTaskResumeFromISR

功能:重新启动被Suspend(挂起)的任务

void vTaskResume( TaskHandle_t 任务句柄P );//恢复 任务句柄P代表的任务
//使用任务句柄P来指定任务,值为NULL时,表示暂停自己。

1.3获取任务的任务句柄:xTaskGetHandle

xTaskGetHandle("创建任务是取的名字:字符串")

2.优先级的API

2.1 获得任务的优先级:uxTaskPriorityGet

UBaseType_t uxTaskPriorityGet( const TaskHandle_t 任务句柄P );
//使用参数xTask来指定任务,设置为NULL表示获取自己的优先级。

2.2 设置任务的优先级:uxTaskPrioritySet

void vTaskPrioritySet( TaskHandle_t xTask,
                       UBaseType_t uxNewPriority );
//使用参数xTask来指定任务,设置为NULL表示获取自己的优先级。   
//参数uxNewPriority表示新的优先级,取值范围是0~(configMAX_PRIORITIES – 1)                

3.阻塞延迟函数

3.1 相对延迟函数:vTaskDelay

void vTaskDelay( const TickType_t xTicksToDelay ); /* xTicksToDelay: 等待多少给Tick */
//vTaskDelay(100);100个tick
//vTaskDelay(pdMS_TO_TICKS(100)); // 延迟 100 毫秒

3.2 绝对延迟函数:xTaskDelayUntil

BaseType_t xTaskDelayUntil( TickType_t * const pxPreviousWakeTime,
                            const TickType_t xTimeIncrement );
/* pxPreviousWakeTime: 上一次被唤醒的时间
 * xTimeIncrement: 要阻塞到(pxPreviousWakeTime + xTimeIncrement)
 * 单位都是Tick Count
 * vTaskDelayUntil(&preTime, 500)
 */

示例代码:需要配合 xTaskGetTickCount()使用

void LcdPrintTask(void *params)
{
	//变量的定义和初始化
	struct TaskPrintInfo *pInfo = params;
	uint32_t cnt = 0;
	int len;
	BaseType_t preTime;
	uint64_t t1, t2;
	preTime = xTaskGetTickCount();//###################关键点,第一次进入循环时候记录
	//FreeRTOS调度器启动之后,任务会在循环里面一直运行,其实调度器启动后调用过一次该任务函数,只是在频繁切换任务,任务函数从头到尾就运行过一次,为了防止任务函数停止,需要在里面加入死循环while(1){};
	//why:
	while (1)//while里面为真正的业务代码。
	{
		/* 打印信息 */
		if (g_LCDCanUse)
		{
			g_LCDCanUse = 0;
			len = LCD_PrintString(pInfo->x, pInfo->y, pInfo->name);
			len += LCD_PrintString(len, pInfo->y, ":");
			LCD_PrintSignedVal(len, pInfo->y, cnt++);
			g_LCDCanUse = 1;
			mdelay(cnt & 0x3);
		}
		
		t1 = system_get_ns();
		//vTaskDelay(500);  // 500000000
		
		vTaskDelayUntil(&preTime, 500);///关键代码
		t2 = system_get_ns();
		
		LCD_ClearLine(pInfo->x, pInfo->y+2);
		LCD_PrintSignedVal(pInfo->x, pInfo->y+2, t2-t1);
	}
}

4.队列

队列(queue)可以用于"任务到任务"、“任务到中断”、"中断到任务"直接传输信息。

在这里插入图片描述
在这里插入图片描述

4.1创建队列 xQueueCreate

QueueHandle_t xQueueCreate( UBaseType_t uxQueueLength, UBaseType_t uxItemSize );
//uxQueueLength:队列长度,最多能存放多少个数据(item)
//uxItemSize:以字节为单位
//返回值:非0:成功,返回句柄,以后使用句柄来操作队列 NULL:失败,因为内存不足

4.1复位队列 xQueueReset

队列刚被创建时,里面没有数据;使用过程中可以调用 xQueueReset() 把队列恢复为初始状态

/*  pxQueue : 复位哪个队列;
 * 返回值: pdPASS(必定成功)
*/
BaseType_t xQueueReset( QueueHandle_t pxQueue);

4.1删除队列 xQueueDelete

删除队列的函数为 vQueueDelete() ,只能删除使用动态方法创建的队列,它会释放内存。

void vQueueDelete( QueueHandle_t xQueue );

4.1写队列

可以把数据写到队列头部,也可以写到尾部,这些函数有两个版本:在任务中使用、在ISR中使用。

4.1队列尾部写入数据:xQueueSend & xQueueSendToBackFromISR(中断)

/* 等同于xQueueSendToBack
 * 往队列尾部写入数据,如果没有空间,阻塞时间为xTicksToWait
 */
BaseType_t xQueueSend(
QueueHandle_t    xQueue,//队列句柄
const void       *pvItemToQueue,//数据指针,这个数据的值会被复制进队列, 复制多大的数据?在创建队列时已经指定了数据大小
TickType_t       xTicksToWait//如果队列满则无法写入新数据,可以让任务进入阻塞状态, xTicksToWait表示阻塞的最大时间(Tick Count)。 如果被设为0,无法写入数据时函数会立刻返回; 如果被设为portMAX_DELAY,则会一直阻塞直到有空间可写
);
/* 
 * 往队列尾部写入数据,此函数可以在中断函数中使用,不可阻塞
 */
BaseType_t xQueueSendToBackFromISR(
QueueHandle_t xQueue,//队列句柄
const void *pvItemToQueue,//数据指针,这个数据的值会被复制进队列, 复制多大的数据?在创建队列时已经指定了数据大小
BaseType_t *pxHigherPriorityTaskWoken//处中断前,是否执行比当前任务更高优先级的任务
//设置为TRUE 表示出中断时,立刻切换该函数
//设置为Flase 表示出中断时,在下一个tick处,在切换该函数
                                      
                                   );
FreeRTOS应用开发常用函数汇总 阅读详情

相关推荐

【RTOS】快速体验FreeRTOS所有常用API(11)打印空闲栈、CPU占用比

是一个 FreeRTOS 函数,用于获取系统中每个任务的运行时间统计信息。这个函数允许你了解每个任务在系统中的运行时间百分比,以及每个任务实际运行的时钟滴答数。此外,FreeRTOS 还提供了与空闲任务关联的钩子函数,空闲任务的循环每执行一次,就会调用一次钩子函数。在FreeRTOS中,要打印任务的空闲栈(空余空间),可以使用任务状态查询函数。要打印所有任务的栈信息,你可以使用FreeRTOS的任务列表查询函数。FreeRTOS 中的空闲任务是一个特殊的任务,优先级为0。

xifan的博客 2935

FreeRTOS简介及API函数使用方法

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

园长QwQ 4252

FreeRTOS基础(十):FreeRTOS任务状态查询API函数介绍

此函数用于获取指定任务的任务优先级,使用该函数需将宏置12.2.2 改变某个任务的任务优先级此函数用于改变某个任务的任务优先级,使用该函数需将宏为12.2.3 获取系统中任务的任务数量此函数用于获取系统中任务的任务数量。

weixin_47040031的博客 2184

FreeRTOS相关API函数

FreeRTOS相关API函数

weixin_45969007的博客 3265

Matlab:常见涡旋光束仿真

代码: clc clear all close all %% 环形涡旋光束 N = 200; lambda = 632e-9; %波长为632nm k = 2*pi/lambda; %波数 w0 = 3; %束腰半径 x = linspace(-10,10,N); y = linspace(-10,10,N); [X,Y] = meshgrid(x,y); [t...

zzz997的博客 3万+

网易数智CoreAgent实战:5步教你打造企业级AI数字员工(附避坑指南)

本文以网易数智CoreAgent智能体协作中枢为核心,提供了一份企业级AI数字员工的实战部署指南。文章详细拆解了从环境准备、智能体配置、业务集成、安全合规到效果评估的五个关键步骤,并分享了部署过程中的常见“避坑”经验,旨在帮助企业技术团队高效、安全地将AI智能体落地于实际业务场景,解决AI落地难题。

rice5的博客 954

FreeRTOS操作系统常用函数接口

FreeRTOS操作系统常用函数接口

一年之内毫无半点成绩,想起来做人真是没趣。 575

Python的单元测试之unittest

是一个功能类似 unittest 的库,它集合众家标准测试库之所长,和 unittest 相比,功能更为强大,使用更为简单,OpenStack 广泛的利用它编写单元测试。unittest 提供了自动匹配发现并执行测试用例的功能,随着项目代码结构越发庞大,势必有多个测试文件,自动匹配发现并测试用例的功能在此就显得非常有用,只要满足。unittest 提供了丰富的命令行入口,可以根据需要执行某些特定的用例。的测试用例都会被 unittest 发现并执行,测试用例文件的默认匹配规则为 test*.py。

1、测试博主技术知识分享 2、pos行业知识技术分享 3、java后端技术知识分享 4、嵌入式技术知识分享 5、运维部署相关知识分享 283

FreeRTOS常用API函数

freeRTOS学习笔记

2301_76950640的博客 1623

GEE:连续变化检测 CCD 第一步(导出ee.Algorithms.TemporalSegmentation.Ccdc函数的结果)

连续变化检测与分类(Continuous Change Detection and Classification, CCDC)主要有两个组件,一个连续变化检测 CCD,另外一个分类。在 Google Earth Engine (GEE)平台上进行 CCD 时间序列变化检测的时候,为了防止内存超限问题,将代码分为2阶段执行。第一阶段是运行 `ee.Algorithms.TemporalSegmentation.Ccdc` 函数,本文将详细介绍 CCD 的第一阶段的代码。

养乐多的博客 2495

手把手教你学PCIE(2.1.23)--PCIe基本概念:链路速率协商

链路速率协商是一个多步骤的过程,确保发送端和接收端之间的链路速率设置一致。通过初始化链路速率寄存器、发送和接收 TS2 序列、检测链路对端的存在、交换链路速率信息、确定最大链路速率和配置链路速率,可以确保 PCIe 设备之间的数据传输速度最大化,从而提高数据传输效率。初始化链路速率寄存器:设置支持的最大链路速率。发送和接收 TS2 序列:检测链路对端的存在。交换链路速率信息:发送和支持的最大链路速率。确定最大链路速率:选择最小值作为最终链路速率。配置链路速率:更新链路速率寄存器。

MHD0815的博客 1816

【FreeRTOS】消息队列——简介、常用API函数、注意事项、项目实现

队列又称消息队列,是一种常用于任务间通信的数据结构,队列可以在任务与任务间中断和任务间传递信息,实现了任务接收来自其他任务或中断的不固定长度的消息。

Goforyouqp的博客 3644

【AI智能体】Spring AI Tool 从使用到实战详解

Spring AI Tool

congge 5865

FreeRTOS常用API

FreeRTOS常用API 一、任务[task.h] 1、任务创建 如果任务成功创建并加入就绪列表函数返回pdPASS,否则函数返回错误码,具体参见projdefs.h。 xTaskCreate((TaskFunction_t) master_task_main, /* 任务入口函数 */ “MASTER”, /* 任务名字 */ 64*1024, /* 任务栈大小 */ NULL,

qq_40604302的博客 1856

Playwright实战:打造绕过全维度前端反爬的无头浏览器爬虫(2026实战版)

Playwright绕过前端反爬的核心是模拟真实:真实的设备指纹、真实的行为轨迹、真实的网络请求;2025年前端反爬的核心检测维度是设备指纹+行为轨迹+网络请求,三者缺一不可;实战中需重点关注WebGL/Canvas指纹模拟、行为随机性、请求头完整性,这是绕过反爬的关键;性能优化需以“不触发反爬”为前提,优先选择浏览器复用、资源拦截,而非无限制并发。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2094

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Freertos中其他常用的API

补充FREERTOS相关API函数

weixin_45854148的博客 1048

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【RTOS】快速体验FreeRTOS所有常用API(1)工程创建

使用STM32CubeMX,可以手工添加任务、队列、信号量、互斥锁、定时器等等。FreeRTOS的参数包括时基频率、任务堆栈大小、是否使能互斥锁等等,需要开发者根据自己对FreeRTOS的了解以及项目开发的需求,来定制参数。添加MCU-F103等用户自己的代码,包含LED、UART、OLED驱动等。修改 默认任务 的代码为下图,用于测试LED、UART、OLED程序。选择下载器类型,我用的是DAP。该代码尽量做到最简,不添加多余的、不规范的代码。这次用的外设有:LED、串口调试、OLED显示。

xifan的博客 2232

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

FreeRTOS常用接口函数

任务删除:。任务暂停:。任务恢复:。任务切换:taskYIELD。任务统计:。任务调度:。任务延时:vTaskDelay。创建队列:。队列入队:xQueueSend。队列出队:xQueuePeekxQueuePeekFromISR二值信号量创建:。技术信号量创建:。互斥信号量创建:。递归互斥信号量创建:。信号量释放:。信号量获取:。信号量删除:。软件定时器创建:。软件定时器复位:。软件定时器开启:。软件定时器停止:

corlin6688的博客 518

04_FreeRTOS任务信息常用API

主要对任务的优先级、数量、状态等信息进行配置与查询。

Zero_092的博客 1399

FREERTOS笔记(二) 中断及常用任务api

FREERTOS笔记(二) 文章目录FREERTOS笔记(二)一、freertos中断二、freertos任务优先级三、创建一个最简单的任务四、其它常见基础任务api使用(持续更新中) 一、freertos中断 关于中断freertos还是较为复杂的,主要还和m3/m4内核有关,这里主要讲关键一些的(用户有必要了解的),过于底层的就跳过。 //FreeRTOSConfig.h /* The highest interrupt priority that can be used by any interru

gxt_kt的博客 1517

Freertos 实用API汇总

——————————————————————————————————————————— 作者:soupllen 一、任务创建与删除 任务的创建 任务的删除 二、系统内核控制函数 三、其他任务 API 函数 四、时间管理(延迟) 五、消息队列 创建队列 发送队列消息 接收队列消息 六、信号量 定义信号量句柄 创建信号量 释放和等待互斥量 七、定时器 创建定时器 启动定时器 获取定时器ID,根据ID进行任务回调使用 八、 调 度 锁、临界段、任务控制 (..

weixin_42895086的博客 6711

FreeRTOS之其他常用API函数

•。

luoyanglook的博客 860

FreeRTOS常用API函数详细说明使用(FreeRTOS从入门到放弃)

1. 任务的创建与删除 2. 任务调度 3. 队列 4. 二值信号量 5. 计数型信号量 6. 互斥量 7. 事件标志位 8. 任务通知(可以用来模拟) 9. 延迟函数 10. 软件定时器 11. 中断管理 12. STM32小车+FreeRTOS

m0_63211938的博客 5276

FreeRTOS API速查

FreeRTOS API速查

qq_53381910的博客 1398
上一篇: 温湿度传感器 Datasheet SHT20 (I2C)
下一篇: 关于FreeRTOS知识点总结
物语系列
博客等级 码龄6年 582粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值