FreeRTOS源码阅读笔记1--task.c

        在FreeRTOS中,创建任务有两种方式:动态创建和静态创建。区别就是:动态创建任务的栈和任务TCB是由操作系统动态分配(malloc)内存空间,任务删除时可以释放内存(free);而静态创建任务的任务栈和TCB是由程序员预先分配好内存空间,是静态内存,在任务删除时内存空间不可以释放。

1.1 动态创建任务-xTaskCreate()

1.1.1TCB结构体(主要成员)

  • pxTopOfStack:栈顶指针;
  • xStateListItem:任务状态列表项,用来表示任务的状态,挂在对应的状态列表中;
  • xEventListItem:事件列表项,用于从事件列表中引用任务;
  • uxPriority:优先级,数值越大,优先级越高;
  • pxStack:栈起始指针;
  • pcTaskName[ configMAX_TASK_NAME_LEN ]:任务名称。
1.1.2函数原型

  • pxTaskCode:任务函数;
  • pcName:任务名称;
  • usStackDepth:栈大小;
  • pvParameters:参数;
  • uxPriority:优先级;
  • pxCreatedTask:句柄指针,TaskHandle_t就是TCB_t*,句柄将指向被创建函数的TCB;
1.1.3函数框架

动态创建任务的流程:

  1. 为任务TCB分配空间
  2. 为任务栈分配空间
  3. 初始化任务TCB成员
  4. 把任务TCB挂到就绪列表中

  • pxCurrentTCB 是一个在 task.c 定义的全局指针,用于指向当前正在运行或者即将要运行的任务的任务控制块。
1.1.3.1任务栈初始化pxPortInitialiseStack

1.2 静态创建任务-xTaskCreateStatic()

1.2.1函数原型

  • (2):任务函数名称
  • (3):任务名称
  • (4):栈大小
  • (5):任务形参
  • (6):任务栈起始地址
  • (7):任务TCB起始地址
1.2.2函数框架

       大体上与动态创建任务一致,静态创建任务的任务栈及任务TCB需要自己定义,然后传参给xTaskCreateStatic()函数。

1.3删除任务-xTaskDelete()

1.3.1函数原型

        void vTaskDelete( TaskHandle_t xTaskToDelete )

  • xTaskToDelet:句柄,传入要删除任务的句柄,删除自身传入NULL。
1.3.2函数框架

简单来说,删除任务的流程:

  1. 从任务当前所处的状态列表中移除;
  2. 判断任务是否在等待事件,若正在等待,从事件列表中移除;
  3. 释放内存空间,包括任务TCB和任务栈。如果是任务删除自身,由空闲任务来释放内存;如果是其他任务删除指定任务,直接释放内存。

1.4挂起任务vTaskSuspend()

1.4.1函数原型

void vTaskSuspend( TaskHandle_t xTaskToSuspend )

  • xTaskToSuspend:任务句柄,传入要挂起任务的句柄,挂起自身传入NULL。
1.4.2函数框架

1.5恢复任务vTaskResume()

1.5.1函数原型

void vTaskResume( TaskHandle_t xTaskToResume )

  • xTaskToResume:任务句柄,传入要恢复任务的句柄,不能为NULL。
1.5.2函数框架

1.6启动调度器vTaskStartScheduler()

1.6.1函数原型

void vTaskStartScheduler( void )

1.6.2函数框架

1.7任务通知通用发送xTaskGenericNotify()

1.7.1函数原型

  • xTaskToNotify:目标任务的句柄,即接收通知的任务的句柄;
  • uxIndexToNotify:任务的指定通知;
  • ulValue:通知值
  • eAction:定义了如何修改目标任务当前的通知值;
  • pulPreviousValue:可保存之前的通知值,传入NULL则不保存。
1.7.2函数框架

1.8任务通知接收ulTaskNotifyTake()

1.8.1函数原型

uint32_t ulTaskNotifyTake( BaseType_t xClearCountOnExit, TickType_t xTicksToWait )

  • xClearCountOnExit:指定函数退出前是否要清楚通知值,如果为pdTRUE,当函数返回时,通知值将被清零;如果为pdFALSE,通知值将减去已经获取到的信号量数量。

  • xTicksToWait:等待时间
  • 返回值:如果成功接收到通知并取得信号量,返回从通知值中获取到的信号量数量(可能大于1);如果在xTicksToWait时间内未接收到通知,则返回0。
1.8.2函数框架

1.9全能的任务通知接收xTaskNotifyWait()

1.9.1函数原型

  • ulBitsToClearOnEntry:表示在使用通知之前,将任务通知值的哪些位清 0;
  • ulBitsToClearOnExit:表示在函数退出前,决定任务接收到的通知值的哪些位会被清 0;
  • pulNotificationValue:用于保存接收到的任务通知值;
  • xTicksToWait:等待超时时间。

  • 返回值:如果获取任务通知成功则返回 pdTRUE,失败则返回 pdFALSE。 

1.9.2函数框架

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/118163.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

无需专线、无需固定公网IP,各地安防数据如何高效上云?

某专注于安防领域的企业,供机场、金融、智慧大厦等行业,包括门禁系统、巡更系统、视频监控在内的整体解决方案。 在实际方案交付过程中,往往需要在多地分支机构分别部署相应的安防设备,并将产生的数据实时统一汇总至云平台进行管理…

【ICN综述】信息中心网络隐私安全

ICN基本原理: 信息中心网络也是需要实现在不可信环境下可靠的信息交换和身份认证 信息中心网络采用以数据内容为中心的传输方式代替现有IP 网络中以主机为中心的通信方式,淡化信息数据物理或逻辑位置的重要性,以内容标识为代表实现数据的查找…

Centos 7.x上利用certbot申请Let‘s Encrypt的SSH证书(HTTPS证书)

目录 01-安装Certbot02-在网站的根目录依次新建文件夹.well-known和acme-challenge03-申请证书 要在CentOS 7.x上为域名申请Let’s Encrypt证书,你可以使用Certbot工具,它是一个自动化证书颁发工具,用于管理Let’s Encrypt证书。以下是在Cent…

有限域的Fast Multiplication和Modular Reduction算法实现

1. 引言 关于有限域的基础知识,可参考: RISC Zero团队2022年11月视频 Intro to Finite Fields: RISC Zero Study Club 有限域几乎是密码学中所有数学的基础。 ZKP证明系统中的所有运算都是基于有限域的: 使用布尔运算的数字电路&#xf…

分布式系统之BASE理论

BASE理论是对分布式系统设计和处理的一种理论指导,相对于ACID(原子性、一致性、隔离性和持久性)这一强一致性模型,BASE更强调在分布式系统中牺牲强一致性以获得可用性和性能的平衡。 BASE理论的核心概念包括: Basica…

ucharts 图表

<template><view><cu-custom bgColor"bg-gradual-blue" :isBack"true"><block slot"content">出库统计图</block></cu-custom><view><uni-segmented-control :current"current" :values…

Redis01-缓存击穿、穿透和雪崩

目录 开场白-追命3连 使用场景 01缓存穿透场景与方案 02布隆过滤器 03缓存击穿场景与方案 04缓存雪崩场景与方案 开场白-追命3连 看你项目中有说用到Redis&#xff0c;都是哪些场景使用了Redis呢&#xff1f; 如果发生了缓存穿透、击穿、雪崩如何应对呢&#xff1f;缓存…

微信小程序获取剪切板的内容到输入框中

xml代码 <navigation-bar title"Weixin" back"{{false}}" color"black" background"#FFF"></navigation-bar> <view><input placeholder"请输入内容" name"content" type"text" …

ansible安装和常见模块

文章目录 ansible的安装1.1 yum install epel-release.noarch1.2配置epel源的baseurl1.3安装ansible1.4安装ansible报错问题1.5 yum卸载 ansible的安装 ansible是由epel源提供的&#xff0c;所以需要配置epel源。要么通过配置好的baseos源直接执行“yum install epel-release.…

常用设计模式——策略模式

策略模式是什么 策略模式&#xff08;Strategy&#xff09;&#xff1a;针对一组算法&#xff0c;将每一个算法封装起来&#xff0c;从而使得它们可以相互替换。 比如我们一个软件的会员等级&#xff0c;每一个等级都会有对应的一些等级权益&#xff0c;那么每一个等级权益就…

Docker 安装ELK7.7.1

(注&#xff1a;在安装之前&#xff0c;本方法必须安装jdk1.8以上版本) (注&#xff1a;如果在虚拟机下用可以直接按方法走即可&#xff0c;如果是想进行备份后在别的机器上进行相关操作&#xff0c;必须把所有带有172.17.0.6、192.168.8.166:9200和端口号都改成你自己的方可使…

windows下使用FCL(Flexible-collision-library)

windows下使用FCL&#xff08;The Flexible-collision-library&#xff09; FCL做为一款开源的碰撞检测库&#xff0c;支持多种基础的几何体&#xff0c;及支持C和python&#xff0c;在windows和linux平台均可以使用。是一款计算高效的碰撞检测工具。在机械臂规划控制框架movei…

LeetCode热题100——链表

链表 1. 相交链表2. 反转链表3. 回文链表4. 环形链表5. 合并两个有序链表 1. 相交链表 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 // 题解&#xff1a;使用A/B循环遍…

Windows桌面便签工具推荐使用哪一款?

电脑桌面上张贴便利贴可以将近期需要完成的工作计划逐一添加到便利贴中&#xff0c;电脑桌面悬挂便利贴工具可以督促日常各项事务的完成。当前可悬挂在电脑桌面上的便利贴工具是比较多的&#xff0c;其中桌面小工具便签软件敬业签可满足各行业的办公需求。 建议大家在Windows桌…

SHEIN要求卖家完成德国EPR合规,逾期将强制下架——站斧浏览器

EPR是卖家在欧盟自由销售的通行证之一&#xff0c;如果没有&#xff0c;是不允许在欧盟国家销售产品的。 近期根据SHEIN官方邮件通知&#xff0c;卖家需要在收到邮件后5天内完成申报&#xff0c;逾期申报产品将会在德国站点下架。 因此&#xff0c;建议卖家尽快通过合规的服务…

Spring Security OAuth 2.0 资源服务器— JWT

目录 一、JWT的最小依赖 二、JWT的最基本配置 1、指定授权服务器 2、初始预期&#xff08;Startup Expectations&#xff09; 3、运行时预期&#xff08;Runtime Expectations&#xff09; 三、JWT认证是如何工作的 四、直接指定授权服务器 JWK Set Uri 五、提供 audie…

MIPI-CSI-2 RAW10笔记

好文&#xff1a; 【精选】摄像头的MIPI接口、DVP接口和CSI接口-CSDN博客【精选】摄像头的MIPI接口、DVP接口和CSI接口-CSDN博客 (56 封私信 / 24 条消息) 显示器的 VGA、HDMI、DVI 和 DisplayPort 接口有什么区别&#xff1f; - 知乎 (zhihu.com) 嵌入式工程师必备&#x…

0基础2小时搭建自己的网站

​作者主页 &#x1f4da;lovewold少个r博客主页 ⚠️本文重点&#xff1a;0基础2小时搭建个人网站 &#x1f449;【C-C入门系列专栏】&#xff1a;博客文章专栏传送门 &#x1f604;每日一言&#xff1a;宁静是一片强大而治愈的神奇海洋&#xff01; 目录 前言 第一步 环境…

云尘靶场 Medium_Socnet 内网为docker 无站代理 不存在gcc的提权方式 解决ldd过高无法执行exp 指定so文件

首先我们可以通过 arp-scan 扫描当前内网中的存活 但是不知道为什么扫不出来 然后我们使用fscan可以获取存活 这里大致扫描只开了22端口 所以我们使用nmap进行信息收集扫描 nmap -sS -sV -A -p- 172.25.0.13通过tcp 进行 版本服务扫描 并且检测系统版本 全端口 这里我们可以…

技术分享 | 想做App测试就一定要了解的App结构

app 的结构包含了 APK 结构和 app 页面结构两个部分 APK结构 APK 是 Android Package 的缩写&#xff0c;其实就是 Android 的安装包。通过将 APK 文件直接传到 Android 模拟器或 Android 手机中执行即可安装。 APK 文件其实是 zip 格式&#xff0c;但后缀名被修改为 apk&am…