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

河南住房和城乡建设网站/旺道网站优化

河南住房和城乡建设网站,旺道网站优化,网站建设怎么样做账,做ppt的动图下载哪些网站写在最前 由于工作需要,需要开始学习freertos的相关知识,本专题主要记录freertos的相关内容 参考: https://www.bilibili.com/video/BV19g411p7UT 正点原子视频 1. 简介 和一般的OS不同(linux/windows),在…

写在最前

由于工作需要,需要开始学习freertos的相关知识,本专题主要记录freertos的相关内容

参考:

https://www.bilibili.com/video/BV19g411p7UT 正点原子视频

1. 简介

和一般的OS不同(linux/windows),在freertos中,每个执行线程都被称为任务,freertos任务创建和删除的本质就是调用相关的API函数去实现

API函数描述
xTaskCreate()动态方式创建任务
xTaskCreateStatic()静态方式创建任务
vTaskDelete()删除任务

2. 任务控制块TCB介绍

学过操作系统的都知道,进程有个PCB来存储进程的各种信息,这里的TCB类似,每个任务都有属于自己的任务控制块,类似于我们人的身份证,它是由一个c语言的结构体实现

typedef struct tskTaskControlBlock       
{volatile StackType_t 		* pxTopOfStack; 					ListItem_t 					xStateListItem;           				  ListItem_t 					xEventListItem;					 UBaseType_t 				uxPriority;                					StackType_t 				* pxStack;						char 				pcTaskName[ configMAX_TASK_NAME_LEN ]; 		…省略很多条件编译的成员
} tskTCB;

成员

  • pxTopOfStack:一个指针指向任务栈栈顶,必须为TCB的第一个成员,在任务切换时的任务上下文保存、任务恢复息息相关

  • xStateListItem:任务状态列表项,你当前任务处于什么状态,就绪态/堵塞态/挂起态

  • xEventListItem:任务事件列表项,

  • uxPriority:任务优先级,数值越大,优先级越大

  • pxStack:指针指向任务栈起始地址

  • pcTaskName[ configMAX_TASK_NAME_LEN ]; :任务名字

3. 动态创建任务函数

3.1 函数介绍

BaseType_t xTaskCreate
( 	TaskFunction_t 					pxTaskCode,		/* 指向任务函数的指针 */				const char * const 				pcName, 		/* 任务名字,最大长度configMAX_TASK_NAME_LEN */const 	configSTACK_DEPTH_TYPE 	usStackDepth, 	/* 任务堆栈大小,注意字为单位 */void * const 					pvParameters,	/* 传递给任务函数的参数 */UBaseType_t 					uxPriority,		/* 任务优先级,范围:0 ~ configMAX_PRIORITIES - 1 */TaskHandle_t * const 			pxCreatedTask 	/* 任务句柄,就是任务的任务控制块 */
)

参数

  • pxTaskCode:指向任务函数的指针
  • pcName:任务名字,最大长度configMAX_TASK_NAME_LEN
  • usStackDepth:任务堆栈大小,注意字为单位,系统自动分配
  • pvParameters:传递给任务函数的参数,一般设置为NULL
  • uxPriority:任务优先级,范围:0 ~ configMAX_PRIORITIES - 1
  • pxCreatedTask:任务句柄,就是任务的任务控制块

返回值

  • 成功:pdPASS
  • 失败:errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY,可能是因为你申请的堆栈实在时太大了

3.2 动态任务创建

3.2.1 实践操作

  1. 将宏configSUPPORT_DYNAMIC_ALLOCATION配置为 1
  2. 定义函数入口参数
  3. 编写任务函数

此函数创建的任务会立刻进入就绪态,由任务调度器调度运行

3.2.2 内核实现流程

  1. 申请堆栈内存&任务控制块内存
  2. TCB结构体成员赋值
  3. 添加新任务到就绪列表中(就绪态)

4. 静态创建任务

3.1 函数介绍

TaskHandle_t xTaskCreateStatic
(TaskFunction_t		pxTaskCode,				/* 指向任务函数的指针 */const char * const		pcName,				/* 任务函数名 */const uint32_t			ulStackDepth, 			/* 任务堆栈大小注意字为单位 */void * const			pvParameters, 			/* 传递的任务函数参数 */UBaseType_t			uxPriority, 				/* 任务优先级 */StackType_t * const		puxStackBuffer, 			/* 任务堆栈,一般为数组,由用户分配 */StaticTask_t * const		pxTaskBuffer				/* 任务控制块指针,由用户分配 */
); 	

参数

  • pxTaskCode:指向任务函数的指针
  • pcName:任务名字,最大长度configMAX_TASK_NAME_LEN
  • usStackDepth:任务堆栈大小,注意字为单位,系统自动分配
  • pvParameters:传递给任务函数的参数,一般设置为NULL
  • uxPriority:任务优先级,范围:0 ~ configMAX_PRIORITIES - 1
  • puxStackBuffer:任务堆栈,一般为数组,由用户分配
  • pxTaskBuffer:任务控制块指针,由用户分配

返回值

  • 成功:其他值,任务句柄,任务创建成功
  • 失败:NULL,用户没有提供相应的内存,任务创建失败

3.2 静态创建任务使用流程

3.2.1 实践操作

  1. 需将宏configSUPPORT_STATIC_ALLOCATION 配置为 1
  2. 定义空闲任务&定时器任务的任务堆栈及TCB
  3. 实现两个接口函数(vApplicationGetIdleTaskMemory( )vApplicationGetTimerTaskMemory ( ))
  4. 定义函数入口参数
  5. 编写任务函数

3.2.2 内核实现

  1. TCB结构体成员赋值
  2. 添加新任务到就绪列表中

此函数创建的任务会立刻进入就绪态,由任务调度器调度运行

5. 删除任务

5.1 任务删除函数

void vTaskDelete(TaskHandle_t xTaskToDelete);

作用:

用于删除已被创建的任务,被删除的任务将从就绪态任务列表、阻塞态任务列表、挂起态任务列表和事件列表中移除

参数:

xTaskToDelete:待删除任务的任务句柄

注意:

  1. 当传入的参数为NULL,则代表删除任务自身(当前正在运行的任务)
  2. 当任务是动态创建空闲任务会负责释放被删除任务中由系统分配的内存,
  3. 当任务是静态创建时则需要由用户在任务被删除前提前释放,否则将导致内存泄露

5.2 任务删除流程

5.2.1 实践操作

  1. 使用删除任务函数,需将宏INCLUDE_vTaskDelete 配置为 1
  2. 入口参数输入需要删除的任务句柄(NULL代表删除本身)

5.2.2 内核实现流程

  1. 获取所要删除任务的控制块:通过传入的任务句柄,判断所需要删除哪个任务,NULL代表删除自身

  2. 将被删除任务,移除所在列表:将该任务在所在列表中移除,包括:就绪、阻塞、挂起、事件等列表

  3. 判断所需要删除的任务

    1. 删除任务自身,需先添加到等待删除列表,内存释放将在空闲任务执行
    2. 删除其他任务,释放内存,任务数量–
  4. 更新下个任务的阻塞时间:更新下一个任务的阻塞超时时间,以防被删除的任务就是下一个阻塞超时的任务

总结

本文主要简要介绍了freertos的任务的创建和删除的实现,包括实践和内核,以及TCB介绍,属于纯理论部分,并未涉及任何实践操作。

相关文章:

freertos学习之路6-任务创建和删除

写在最前 由于工作需要,需要开始学习freertos的相关知识,本专题主要记录freertos的相关内容 参考: https://www.bilibili.com/video/BV19g411p7UT 正点原子视频 1. 简介 和一般的OS不同(linux/windows),在…...

科都电气创业板IPO终止:曾计划募资约6亿元,郑春开等学历较低

近日,深圳证券交易所披露的信息显示,科都电气股份有限公司(下称“科都电气”)提交了撤回首次公开发行股票并在创业板上市申请文件的申请,同时保荐机构撤回对该公司的保荐。 因此,深圳证券交易所决定终止对…...

【MySQL】第十六部分 MySQL数据类型详解

【MySQL】第十六部分 MySQL数据类型详解 文章目录【MySQL】第十六部分 MySQL数据类型详解16. MySQL数据类型详解16.1 整数类型16.2 浮点类型16.3 定点数类型16.4 位类型 BIT16.5 日期和时间类型16.6 文本字符串类型16.6.1 CHAR VS VARCHAR类型16.6.2 TEXT类型16.6.3 ENUM类型16…...

Linux手工创建新用户

准备工作(配置流程的理解) Linux中useradd命令即一系列文件操作的结合体,所以我们可以通过查看useradd命令来确认我们手工创建新用户需要完成的文件配置 找到man useradd中涉及的文件部分 对于手工创建用户有用的文件: /etc/pas…...

K_A12_003 基于STM32等单片机采集光敏二极管模块参数 串口与OLED0.96双显示

K_A12_003 基于STM32等单片机采集光敏二极管模块参数 串口与OLED0.96双显示一、资源说明二、基本参数参数引脚说明三、驱动说明IIC地址/采集通道选择/时序对应程序:四、部分代码说明1、接线引脚定义1.1、STC89C52RC光敏二极管模块1.2、STM32F103C8T6光敏二极管模块五、基础知识…...

天才少年稚晖君

稚晖君 简介主要成就华为天才少年简介 彭志辉,1993年出生于江西吉安,科技圈知名KOL,人称“稚晖君”“野生钢铁侠”,原华为天才少年。 2015年本科毕业于电子科技大学生命科学与技术学院;2018年研究生毕业于电子科技大学信息与通信工程学院;毕业后就职于OPPO研究院AI实验…...

【Linux command 09】tcpdump 命令

tcp一款sniffer工具,是Linux上的抓包工具,嗅探器语法tcpdump (选项)选项-c: 指定要抓取的包数量。注意,是最终要获取这么多个包。例如,指定"-c 10"将获取10个包,但可能已经处理了100个包&#xf…...

初始结构体

🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀 目录 🏡前言 🐰结构体的基础知识 🐰结构体的声明 &#x…...

English Learning - Day56 作业打卡 2023.2.10 周五

English Learning - Day56 作业打卡 2023.2.10 周五引言1. 他把车停错了地方,因此被罚了款。2. 这个事我越想越生气。3.他在这工作的时间比我长。4. 没有奋斗,就不会变强大。5.我一到北京就给你打电话。6. 直到我有了孩子,才意识到我的父母有…...

Python中五个不常见的隐晦用法小结

1. 引言 我已经用Python编程5年了(从2017年开始),直到最近才知道以下几个Python中不常见的用法,确实和人们对直观理解有所出入。 闲话少说,我们直接开始吧! 2. 类中的私有变量不是真正的私有 我们直接上…...

SharkTeam:Move合约开发与合约安全

近期,围绕 Aptos 和 Sui,新兴的高性能 L1链 以及这些新链背后的 Move 智能合约编程语言引起了很多关注,社区也非常活跃,很多开发者和项目已经开始积极转向 Move。但Move相对Solidity差别较大,即使是相对比较接近的Rust…...

一篇文章学习什么是进程(万字解析,超多知识点)

目录进程概念进程控制块-PCBPCB的内容分类标识符查看进程信息的方法状态fork函数进程状态R运行状态(running)S睡眠状态(sleeping)D磁盘休眠状态(Disk sleep)T停止状态(stopped)X死亡…...

第01章_数据库概述

第01章_数据库概述 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 1. 为什么要使用数据库 持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。大多数情况下&#x…...

我所理解的高通UEFI之display的流程和移植

UEFI的流程UEFI跟uboot一样在OS加载启动之前,正确的指定启动服务,并向内核传递信息,代替原先的uboot。它包含了上电、驱动实现,以及os环境的建立和应用程序(类似于fastboot)。这个os是UEFI自己独立运行独有…...

iozone -a fsync: I/O error

iozone -a fsync: I/O error iozone: interrupted exit iozone 问题表现是手机老化后重启不开机。检查不开机Log,发现/data/system/packages.xml文件有损坏,pull 离线日志,发现出问题前后的日志也不能pull,pull出来的离线日志解压…...

Element UI框架学习篇(五)

Element UI框架学习篇(五) 1 准备工作 1.1 在zlz包下创建数据传输对象类EmpDTO package com.zlz.dto;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;//根据前台来的 Data public class EmpDTO {private String name;private Stri…...

SpringBoot 全局异常处理用法及原理

SpringBoot 全局异常处理用法及原理 Springboot或springMVC项目中, 我们一般会设置一个全局异常处理, 来对异常进行兜底。 业务代码执行过程中抛出的异常, 如果业务逻辑没有主动捕获,那么异常就会一直往上抛,最后进入…...

浏览器中HTTP请求流程是如何处理的

HTTP 是一种允许浏览器向服务器获取资源的协议,是 Web 的基础,通常由浏览器发起请求,用来获取不同类型的文件,例如 HTML 文件、CSS 文件、JavaScript 文件、图片、视频等。 浏览器端发起 HTTP 请求流程: 1. 构建请求…...

【Pytorch项目实战】之语义分割:U-Net、UNet++、U2Net

文章目录博主精品专栏导航一、前言1.1、什么是图像分割?1.2、语义分割与实例分割的区别1.3、语义分割的上下文信息1.4、语义分割的网络架构二、网络 数据集2.1、经典网络的发展史(模型详解)2.2、分割数据集下载三、算法详解3.1、U-Net3.1.1、…...

七、插件机制

Interceptor MyBatis 插件模块中最核心的接口就是 Interceptor 接口,它是所有 MyBatis 插件必须要实现的接口,其核心定义如下: public interface Interceptor {// 插件实现类中需要实现的拦截逻辑Object intercept(Invocation invocation) …...

kmp算法

前缀函数 π[i]max⁡k0,⋯,i{k∣s[0,⋯,k−1]s[i−(k−1),⋯,i]}\pi\left[i\right] \max\limits_{k 0,\cdots, i}\left\{k|s\left[0,\cdots,k-1\right] s\left[i-\left(k-1\right) ,\cdots, i\right]\right\} π[i]k0,⋯,imax​{k∣s[0,⋯,k−1]s[i−(k−1),⋯,i]} 简单来说…...

【Python】正则表达式简单教程

0x01 正则表达式概念及符号含义 掌握正则表达式,只需要记住不同符号所表示的含义,以及对目标对象模式(或规律)的正确概括。 1、基础内容 字符匹配 在正则表达式中,如果直接给出字符,就是精确匹配。\d 匹…...

SAP ABAP Odata

GetEntity和GetEntitys GetEntitys 创建Odata Project 导入结构 选择需要的字段 设定Key 勾选字段的creatable、updatable、sortable、nullable、filterable属性值。 再依上述步骤创建ZPOITEM结构和实体集 3. 创建ZPOHEADER和ZPOITEM的Association 两个实体集的关联字段&…...

Android native ASAN 排查内存泄漏

一、概述 android 对native - c/c 的调试和排查是比较难受的一件事。我看周遭做window , linux 甚至ios的调试排查起c的代码都比较方便。习惯了app开发去熟悉native是各种痛苦,最主要是排查问题上。后续有时间打算整理下native 的错误排查使用&#xff…...

Django项目开发

一.认识NoSQL 1.SQL 关系型数据库 结构化: 定义主键,无符号型数据等关联的:结构化表和表之间的关系通过外键进行关联,节省存储空间SQL查询:语法固定 SELECT id,name,age FROM tb_user WHERE id1 ACID 2.NoSQL 非关系型数据库 Re…...

Debezium系列之:深入理解Debezium Server和Debezium Server实际应用案例详解

Debezium系列之:深入理解Debezium Server和Debezium Server实际应用案例详解 一、认识Debezium Server二、下载Debezium Server三、解压Debezium Server四、查看Debezium Server目录五、Debezium Server配置六、Debezium Server启动输出样式七、源配置八、格式配置九、Transfo…...

IDE2022源码编译tomcat

因为学习需要,我需要源码编译运行tomcat对其源码进行一个简单的追踪分析。由于先前并未接触过java相关的知识,安装阻力巨大。最后请教我的开发朋友才解决了最后的问题。将其整理出来,让大家能够快速完成相关的部署。本文仅解决tomcat-8.5.46版…...

214 情人节来袭,电视剧 《点燃我温暖你》李峋同款 Python爱心表白代码,赶紧拿去用吧

大家好,我是徐公,六年大厂程序员经验,今天为大家带来的是动态心形代码,电视剧 《点燃我温暖你》同款的,大家赶紧看看,拿去向你心仪的对象表白吧,下面说一下灵感来源。 灵感来源 今天&#xff…...

数据库范式

基本概念 函数依赖 x→yx\rightarrow yx→y,当确定xxx的时候,yyy也可以确定 例: 学号→\rightarrow→姓名,当知道了学号,就知道了学生姓名 学号,课程号→\rightarrow→成绩,当知道了学号和课程号&#xff…...

CUDA中的底层驱动API

文章目录CUDA底层驱动API1. Context2. Module3. Kernel Execution4. Interoperability between Runtime and Driver APIs5. Driver Entry Point Access5.1. Introduction5.2. Driver Function Typedefs5.3. Driver Function Retrieval5.3.1. Using the driver API5.3.2. Using …...