FreeRTOS常用API接口函数
提示:FreeRTOS常用API接口函数:并对部分参数附上自己的解释,后面继续补充
FreeRTOS常用API接口函数
- 1.任务相关的API
- 1.1 创建任务:xTaskCreate
- 1.2 开启任务调度器函数:vTaskStartScheduler
- 1.3 任务的删除:vTaskDelete
- 1.3 任务的挂起:vTaskSuspend
- 1.3 任务的恢复:vTaskResume & xTaskResumeFromISR
- 1.3获取任务的任务句柄:xTaskGetHandle
- 2.优先级的API
- 2.1 获得任务的优先级:uxTaskPriorityGet
- 2.2 设置任务的优先级:uxTaskPrioritySet
- 2.阻塞延迟函数
- 2.1 相对延迟函数:vTaskDelay
- 2.2 绝对延迟函数:xTaskDelayUntil
- 3.队列
- 3.1创建队列 xQueueCreate
- 3.1复位队列 xQueueReset
- 3.1删除队列 xQueueDelete
- 3.1写队列
- 3.1队列尾部写入数据:xQueueSend & xQueueSendToBackFromISR(中断)
TaskHandle_t 任务句柄的类型
XXXXType_t 都可以输入数字
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_LENconst 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)
2.阻塞延迟函数
2.1 相对延迟函数:vTaskDelay
void vTaskDelay( const TickType_t xTicksToDelay ); /* xTicksToDelay: 等待多少给Tick */
//vTaskDelay(100);100个tick
//vTaskDelay(pdMS_TO_TICKS(100)); // 延迟 100 毫秒
2.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); // 500000000vTaskDelayUntil(&preTime, 500);///关键代码t2 = system_get_ns();LCD_ClearLine(pInfo->x, pInfo->y+2);LCD_PrintSignedVal(pInfo->x, pInfo->y+2, t2-t1);}
}
3.队列
队列(queue)可以用于"任务到任务"、“任务到中断”、"中断到任务"直接传输信息。
3.1创建队列 xQueueCreate
QueueHandle_t xQueueCreate( UBaseType_t uxQueueLength, UBaseType_t uxItemSize );
//uxQueueLength:队列长度,最多能存放多少个数据(item)
//uxItemSize:以字节为单位
//返回值:非0:成功,返回句柄,以后使用句柄来操作队列 NULL:失败,因为内存不足
3.1复位队列 xQueueReset
队列刚被创建时,里面没有数据;使用过程中可以调用 xQueueReset() 把队列恢复为初始状态
/* pxQueue : 复位哪个队列;* 返回值: pdPASS(必定成功)
*/
BaseType_t xQueueReset( QueueHandle_t pxQueue);
3.1删除队列 xQueueDelete
删除队列的函数为 vQueueDelete() ,只能删除使用动态方法创建的队列,它会释放内存。
void vQueueDelete( QueueHandle_t xQueue );
3.1写队列
可以把数据写到队列头部,也可以写到尾部,这些函数有两个版本:在任务中使用、在ISR中使用。
3.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//????作用???);
相关文章:
FreeRTOS常用API接口函数
提示:FreeRTOS常用API接口函数:并对部分参数附上自己的解释,后面继续补充 FreeRTOS常用API接口函数 1.任务相关的API1.1 创建任务:xTaskCreate1.2 开启任务调度器函数:vTaskStartScheduler1.3 任务的删除:vTaskDelete1…...
DesignPattern设计模式
1 前言 1.1 内容概要 理解使用设计模式的目的掌握软件设计的SOLID原则理解单例的思想,并且能够设计一个单例理解工厂设计模式的思想,能够设计简单工厂,理解工厂方法了解建造者模式的思想,掌握其代码风格理解代理设计模式的思想&a…...
3.ChatGPT在教育领域的应用:教学辅助与案例分享(3/10)
ChatGPT在教育领域的应用:教学辅助与案例分享 引言 在21世纪的教育领域,技术革新正以前所未有的速度改变着传统的教学和学习方式。随着人工智能(AI)的快速发展,教育技术(EdTech)领域迎来了新的…...
Kafka+PostgreSql,构建一个总线服务
之前开发的系统,用到了RabbitMQ和SQL Server作为总线服务的传输层和存储层,最近一直在看Kafka和PostgreSql相关的知识,想着是不是可以把服务总线的技术栈切换到这个上面。今天花了点时间试了试,过程还是比较顺利的,后续…...
电脑怎么录屏?四款录屏工具分享
作为一个刚刚踏入视频创作领域的新手,我一直在寻找一款适合自己的录屏软件。最近,我尝试了四款市面上比较热门的录屏工具。今天,就让我来分享一下我的使用体验,希望能给同样在寻找录屏软件的朋友们一些参考。 一、福昕录屏大师 …...
Java代码审计篇 | ofcms系统审计思路讲解 - 篇4 | XXE漏洞审计
文章目录 Java代码审计篇 | ofcms系统审计思路讲解 - 篇4 | XXE漏洞审计0. 前言1. XXE代码审计【有1处】1.1. 搜索JRXmlLoader1.1.1. JRAntApiWriteTask1.1.2. JRAntUpdateTask1.1.3. TableReportContextXmlRule1.1.4. JasperCompileManager【存在漏洞】 1.2. 搜索XMLReader1.2…...
Leetcode 每日一题:Word Ladder
写在前面: 今天我们来看一道图论的题,这道题目是我做过目前最难与图论联想到的一道题目之一。如果没有提示的话,我们很容易往 dp 等解决 array 问题的方向去解决它,经过我超过 2个小时的思考我觉得这种方向是没前途的~…...
c++ 编辑器 和 编译器 的详细解释
在 C 开发中,编辑器 和 编译器 是两个不同的工具,分别在编写代码和生成可执行文件的过程中起着不同的作用。下面是它们的详细介绍: 1. 编辑器(Editor) 编辑器 是用来编写和编辑代码的工具。C 代码就是通过编辑器编写…...
计算机视觉(二)—— MDPI特刊推荐
特刊征稿 01 期刊名称: Applied Computer Vision and Pattern Recognition: 2nd Volume 截止时间: 摘要提交截止日期:2024年10月30日 投稿截止日期:2024年12月30日 目标及范围: 包括但不限于以下领域:…...
交叉编译工具链的安装及带wiringPi库的交叉编译实现
交叉编译工具链的安装及带wiringPi库的交叉编译实现 交叉编译的概念交叉编译工具链的安装下载交叉编译工具链配置环境遍变量编译程序到ARM平台 带wiringPi库的交叉编译下载编译wiringPi库调用树莓派的wringPi库 交叉编译的概念 交叉编译是在一个平台上生成另一个平台上的可执行…...
java: 程序包org.junit.jupiter.api不存在
明明idea没有报错,引用包也没问题,为啥提示java: 程序包org.junit.jupiter.api不存在? 配置!还TMD是配置! 如果是引用包的版本不对或者其他,直接就是引用报错或者pom里面飘红了。 这个应该是把generat…...
代码随想录刷题day32丨动态规划理论基础,509. 斐波那契数, 70. 爬楼梯, 746. 使用最小花费爬楼梯
代码随想录刷题day32丨动态规划理论基础,509. 斐波那契数, 70. 爬楼梯, 746. 使用最小花费爬楼梯 1.动态规划理论基础 动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题…...
为什么矩阵特征值之和等于主对角线元素之和,特征值乘积等于行列式值
首先给出特征值和特征向量的定义。 设A是n阶矩阵,如果数λ和n维非零向量x使关系式 Axλx (1) 成…...
学生学籍管理系统可行性分析报告
引言 一、编写目的 随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。而学籍管理系统软件,可广泛应用于全日制大、中小学及其他各类学校,系统涵盖了小学、初中、高中学籍…...
C#排序算法新境界:深度剖析与高效实现基数排序
基数排序(Radix Sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数进行比较。具体来说,基数排序有两种方法: 最低位优先(LSD, Least Significant Digit f…...
玩机搞机-----如何简单的使用ADB指令来卸载和冻结系统应用 无需root权限 详细操作图示教程
同类博文: 玩机搞机---卸载内置软件 无root权限卸载不需要的软件 安全卸载_无需root卸载彻底内置软件-CSDN博客 在很多时候我们需要卸载一些系统级的app。但如果直接手机端进行卸载的话。是无法正常卸载的。其实我们可以通过有些成品工具或者完全靠ADB指令来进行卸…...
如何通过 Apache Camel 将数据导入 Elasticsearch
作者:来自 Elastic Andre Luiz 使用 Apache Camel 将数据提取到 Elasticsearch 的过程将搜索引擎的稳健性与集成框架的灵活性相结合。在本文中,我们将探讨 Apache Camel 如何简化和优化将数据提取到 Elasticsearch。为了说明此功能,我们将实…...
打造民国风格炫酷个人网页:用HTML和CSS3传递民国风韵
附源码!!! 感谢支持 小弟不断创作网站demo感兴趣的可以关注支持一下 对了 俺在结尾带上了自己用的 背景 大家可以尝试换一下效果更好哦~~~ 如何创建一个民国风格的炫酷网页 在这篇博客中,我们将展示如何制作一个结合民国风格和…...
豆包MarsCode编程助手:产品功能解析与应用场景探索!
随着现代技术的不断进化升级,人工智能正在逐步改变着我们的日常工作方式。特别是对于复杂的项目,代码编写、优化、调试、测试等环节充满挑战。为了简化这些环节、提高开发效率,许多智能编程工具应运而生,豆包MarsCode 编程助手就是…...
爬虫全网抓取
爬虫全网抓取是指利用网络爬虫技术,通过自动化的方式遍历互联网上各个网站、论坛、博客等,从这些网页中提取所需的数据。它通常涉及以下几个步骤: 目标设定:确定要抓取哪些类型的网页内容,比如新闻、商品信息、用户评论…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)
一、OpenBCI_GUI 项目概述 (一)项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台,其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言,首次接触 OpenBCI 设备时,往…...
Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...
在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...
Qt 事件处理中 return 的深入解析
Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...
