FreeRTOS任务创建

2023-05-16

任务创建

操作

一、硬件初始化

static void Hardware_Init(void){
    /*中断优先级分组*/
    /*硬件初始化1*/
    /* ......*/
    /*硬件初始化n*/
}

1.使用初始化函数可以方便所有初始化函数的统一,以免遗漏需要初始化的函数,方便初始化的增删加减。

2.此处进行中断优先级分组,以防其他地方重复分组,扰乱系统运作。

3.用于分割硬件和软件,方便测试出错时,时硬件问题导致还是软件问题导致。

二、构建启动任务函数框架

static void AppCreateTask(void)
{
	taskENTER_CRITICAL();     /*进入临界态*/
    
    /*创建任务1*/
    /*......*/
    /*创建任务n*/
    
	vTaskDelete(/*创建任务的任务句柄*/);   /*删除任务*/
    
	taskEXIT_CRITICAL();	  /*退出临界态*/									
}

1.进入临界态是防止在创建任务时,高优先级任务和中断任务的运行打断任务创建,带来保护现场的麻烦问题。

2.在创建任务的函数中创建出所有有实际需求的任务。

3.在所有任务创建完毕,将创建任务的任务删除。

4.任务妥当后退出临界态。

三、创建启动任务

appTaskReturn = xTaskCreate((TaskFunction_t  ) AppCreateTask,            /*函数名称*/
							(const char *    ) "AppCreateTask",          /*任务名称*/
							(uint16_t        ) 512,                      /*任务栈大小*/
							(void *          ) NULL,                     /*传递参数*/
							(UBaseType_t     ) 3,                        /*任务优先级*/
							(TaskHandle_t *  ) &appCreateTask_handle );  /*任务句柄*/
if (appTaskReturn == pdPASS) vTaskStartScheduler();                      /*启动调度器*/

1.调用系统的动态创建任务函数。

2.将创建任务所需的参数一一写入(具体内容见代码块的注释)。

3.创建成功后启动调度器(东风)。

四、构建功能任务函数

static void TestCreateTask(void* parameters)
{
	while(1)
	{
        /*任务所需的功能*/
        
		vTaskDelay(/*时长*/);
	}
}

1.一定是一个无法返回的无线循环函数。

2.一定要有阻塞发生,可以是等待事件、消息、信号或使用延时函数。

五、创建功能任务

注:调用启动任务函数,操作与创建启动任务相同,但是无需启动调度器。

机制

一、优先级机制

1.优先级的数字越大(理论上可以是0到无限大),优先级越高(这与很多地方的优先级机制相反),高优先级有权先运行,高优先级任务可以抢占地优先级(此处说法只是个人用法选择),可做配置是否抢占,是否礼让。

2.所有创建后,只要是就绪任务,就将任务按照任务优先级挂载到就绪链表中,每个优先级下都有一个链表。

3.相同有限及的任务服从先来后到的原则排队。

4.空闲任务的优先级是0,如果将创建的任务优先级设置成0,将会受到空闲任务的礼让机制的干扰,导致排队的规则改变。

5.很不建议开发者将任务的优先级设置成0,以减少不必要的麻烦。

二、任务调度机制

1.任务调度是任务调度器,就绪链表中,从高优先级到底优先级寻找任务来执行。

2.相同优先级的任务执行运行后,乖乖到队尾排队(进入就绪态后)

三、阻塞机制

1.在等待延时、事件、消息或信号时,会将入任务放入延时链表。

2.在延时链表中任务是按照阻塞的时长来排列的。

3.延时结束后,将任务放入就绪链表,如果是最高优先级可以直接进入运行态。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FreeRTOS任务创建 的相关文章

  • 心跳跟随的心形灯(STM32(HAL)+WS2812+MAX30102)

    文章目录 前言 介绍 系统框架 原项目地址 本项目开发开源地址 硬件PCB 软件功能 详细内容 硬件外壳制作 WS2812级联及控制 MAX30102血氧传感器 0 96OLED FreeRTOS 效果视频 总结 前言 在好几年前 我好像就
  • 详解FreeRTOS中的软件定时器

    软件定时器用于让某个任务定时执行 或者周期性执行 比如设定某个时间后执行某个函数 或者每隔一段时间执行某个函数 由软件定时器执行的函数称为软件定时器的回调函数 参考资料 Mastering the FreeRTOS Real Time Ke
  • FreeRTOS config开始的宏

    FreeRTOSConfig h系统配置文件中可以自定义 FreeRTOS h中定义默认值 configAPPLICATION ALLOCATED HEAP 默认情况下FreeRTOS的堆内存是由编译器来分配的 将宏configAPPLIC
  • 【FreeRTOS 信号量】互斥信号量

    互斥信号量与二值信号量类似 但是互斥信号量可以解决二值信号量出现的优先级翻转问题 解决办法就是优先级继承 普通互斥信号量创建及运行 参阅安富莱电子demo 互斥信号量句柄 static SemaphoreHandle t xMutex NU
  • STM32F103移植FreeRTOS必须搞明白的系列知识---3(堆栈)

    STM32F103移植FreeRTOS必须搞明白的系列知识 1 Cortex CM3中断优先级 STM32F103移植FreeRTOS必须搞明白的系列知识 2 FreeRTOS任务优先级 STM32F103移植FreeRTOS必须搞明白的系
  • FreeRTOS 软件定时器的使用

    FreeRTOS中加入了软件定时器这个功能组件 是一个可选的 不属于freeRTOS内核的功能 由定时器服务任务 其实就是一个定时器任务 来提供 软件定时器是当设定一个定时时间 当达到设定的时间之后就会执行指定的功能函数 而这个功能函数就叫
  • 解决错误“ #error “include FreeRTOS.h“ must appear in source files before “include event_groups.““例子分享

    今天来给大家分享一下 关于之前自己在学习FreeRTOS过程中遇到的一个错误提示 话不多说 我们直接来看 错误分析 首先 我们看一下错误的提示 error 35 error directive include FreeRTOS h must
  • 一文教你学会keil软件仿真

    仿真在我们调试代码中是非常重要的 通过仿真 我们可以快速定位到错误代码 或者错误逻辑的地方 这里我就以上一篇博客为例 教大家如何软件仿真 软件仿真不需要单片机 直接通过keil软件进行代码调试 一 打开工具 二 选择软件仿真 三 开始仿真
  • freertos---软定时器

    一 软件定时器介绍 freeRTOS软件定时器的时基是基于系统时钟节拍实现的 可以创建很多个 在硬件定时器资源不充足的情况下非常有用 软件定时器一般用作周期性地执行函数 在创建软件定时器时指定软件定时器的回调函数 在回调函数中实现相应的功能
  • 【FreeRTOS】队列的使用

    作者主页 凉开水白菜 作者简介 共同学习 互相监督 热于分享 多加讨论 一起进步 专栏资料 https pan baidu com s 1nc1rfyLiMyw6ZhxiZ1Cumg pwd free 点赞 收藏 再看 养成习惯 订阅的粉丝
  • FreeRTOS学习笔记<中断>

    中断概念 Cortex M的NVIC最多支持240个IRQ 中断请求 1个不可屏蔽中断 NMI 1个Systick 滴答定时器 定时器中断和多个系统异常 Cortex M处理器有多个用于管中断和异常的可编程寄存器 这些寄存器大多数都在 NV
  • FreeRTOS临界区

    FreeRTOS临界区是指那些必须完整运行 不能被打断的代码段 比如有的外设的初始化需要严格的时序 初始化过程中不能被打断 FreeRTOS 在进入临界区代码的时候需要关闭中断 当处理完临界区代码以后再打开中断 FreeRTOS 系统本身就
  • freeRTOS使用uxTaskGetStackHighWaterMark函数查看任务堆栈空间的使用情况

    摘要 每个任务都有自己的堆栈 堆栈的总大小在创建任务的时候就确定了 此函数用于检查任务从创建好到现在的历史剩余最小值 这个值越小说明任务堆栈溢出的可能性就越大 FreeRTOS 把这个历史剩余最小值叫做 高水位线 此函数相对来说会多耗费一点
  • stm32f103zet6移植标准库的sdio驱动

    sdio移植 st官网给的标准库有给一个用于st出的评估板的sdio外设实现 但一是文件结构有点复杂 二是相比于国内正点原子和野火的板子也有点不同 因此还是需要移植下才能使用 当然也可以直接使用正点原子或野火提供的实例 但为了熟悉下sdio
  • FreeRTOS之软件定时器

    FreeRTOS之软件定时器 声明 本人按照正点原子的FreeRTOS例程进行学习的 欢迎各位大佬指责和批评 谢谢 include sys h include delay h include usart h include led h in
  • Arduino IDE将FreeRTOS用于STM32

    介绍 适用于STM32F103C8的FreeRTOS STM32F103C是一种能够使用FreeRTOS的ARM Cortex M3处理器 我们直接在Arduino IDE中开始使用STM32F103C8的FreeRTOS 我们也可以使用K
  • [FreeRTOS入门学习笔记]定时器

    定时器的使用步骤 1 定义一个handle xTimerCreate创建 2 启动定时器 在Task1中调用 通过队列通知守护任务来执行定时器任务 要再config头文件中定义守护任务相关配置 虽然定时器是在task1中启动 但是定时器的任
  • FreeRTOS实时操作系统(三)任务挂起与恢复

    系列文章 FreeRTOS实时操作系统 一 RTOS的基本概念 FreeRTOS实时操作系统 二 任务创建与任务删除 HAL库 FreeRTOS实时操作系统 三 任务挂起与恢复 FreeRTOS实时操作系统 四 中断任务管理 FreeRTO
  • FreeRTOS之系统配置

    1 FreeRTOS的系统配置文件为FreeRTOSConfig h 在此配置文件中可以完成FreeRTOS的裁剪和配置 在官方的demo中 每个工程都有一个该文件 2 先说一下 INCLUDE 开始的宏 使用 INCLUDE 开头的宏用来
  • 如何更改 FreeRTOS 中任务的最大可用堆大小?

    我通过以下方式在任务中创建元素列表 l dllist pvPortMalloc sizeof dllist dlllist 有 32 字节大 我的嵌入式系统有 60kB SRAM 所以我希望系统可以轻松处理我的 200 个元素列表 我发现在

随机推荐

  • CAN的ACK深入理解

    CAN信息发送成功后 xff0c 会有个应答间隙的 xff0c 在这个间隙内 xff0c 接收节点可以准备要回复的信息 xff0c 也就是把应答场填充为显性0 xff0c 在发送时其为隐性1 应答过程可能如下 xff1a 当信息传输到ACK
  • 二、Docker镜像使用和命令

    文章目录 Docker镜像使用和命令列出本机镜像查找镜像拉取镜像删除镜像删除所有镜像镜像的原理 Docker镜像使用和命令 镜像就是一个轻量级的 xff0c 可执行的独立软件包 xff0c 用来打包软件运行环境和基于运行环境开发的软件 xf
  • 阿里云ECS centos8连接可视化界面

    阿里云ECS centos8连接可视化界面 文章目录 阿里云ECS centos8连接可视化界面安装图形化界面安装VNC Server客户端设置界面为中文 安装图形化界面 使用以下命令安装图形桌面的软件包 yum groupinstall
  • DJI-OSDK开发

    DJI OSDK开发 一 简介 Onboard SDK xff0c 顾名思义就是跑在板子上的一套SDK接口 xff0c 通过串口与飞控进行通信 xff0c 通过调用这些接口 xff0c developer就可以实现对DJI A3 N3 M1
  • Linux 虚拟机centos /dev/mapper/cl-root 100% 解决方法

    1 在虚拟机中添加硬盘 一 添加新的磁盘 1 选择 虚拟机设置 并打开 xff0c 将光标定位在 硬盘 SCSI 选项上 xff0c 然后点击下方的 添加 按钮 2 点击下一步 3 选择SCSI 点击下一步 4 选择创建新虚拟机磁盘 xff
  • 解决ROS系统 rosdep update超时问题,省时又好用的方法,根本不需要修改什么文件这么麻烦

    直接使用小鱼提供的rosdepc 1 安装rosdepc wget http fishros com install O fishros amp amp bash fishros 2 输入数字3安装rosdepc 3 然后执行rosdepc
  • ubuntu安装kalibr,并进行相机和IMU(惯性测量单元)的内外参联合标定

    1 IMU内参的标定 参考我的另一篇博客 xff1a 4条消息 ubuntu安装imu utils xff0c 并进行IMU xff08 惯性测量单元 xff09 内参标定 xffe3 莫等闲 的博客 CSDN博客 https blog c
  • 华清远见电子词典

    1 服务器 include lt stdio h gt include lt sys types h gt include lt sys socket h gt include lt pthread h gt include lt sqli
  • 基于STM32F407的WIFI通信(使用的是ESP8266模块)

    基于STM32F407的WIFI通信 xff08 使用的是ESP8266模块 xff09 本次做的是WIFI通信所实现的功能是 xff1a 由单片机端向客户端发送数据 模式 xff1a STA模式 xff08 及连接路由器的方式 xff09
  • 腾讯云轻量级服务器Ubuntu系统搭建可视化界面

    前言 xff1a 以云服务器的方式搭建Linux workstation对比在电脑本地安装虚拟机的优势在于 xff0c 不需要占用本地电脑资源空间 xff0c 网络环境等相对稳定 xff0c 可以用手机等轻量移动设备连接管理等 本文主要介绍
  • gitee多人合作,上传push到别人的远程仓库

    首先要确保在别人的远程仓库中 第二步 xff1a 新建一个文件夹 xff0c 在里面点击右键 xff0c 选择 Git Bash Here进入操作界面 第三步 xff1a 先git init创建一个git文件 第四步 xff1a git r
  • 汽车CAN总线详解

    概述 CAN xff08 Controller Area Network xff09 总线协议是由 BOSCH 发明的一种基于消息广播模式的串行通信总线 xff0c 它起初用于实现汽车内ECU之间可靠的通信 xff0c 后因其简单实用可靠等
  • docker快速清理已停止的容器

    修剪所有不在运行的容器 xff0c 强制删除使用 f 或者 force docker container prune 使用 filter限制范围 xff0c 例如删除24小时前创建的已停止的容器 docker container prune
  • FreeRTOS学习笔记8(中断管理)

    1 中断管理的介绍 这里的中断管理主要是一些前面使用到的队列 信号量 互斥量等的在中断中使用的函数的封装 xff0c 为什么要从新封装这些函数 xff0c 这些函数有哪些优缺点 xff0c 这些函数是如何使用的 xff1f 这些问题后面会一
  • UCOSIII从官网(2021)下载

    官网地址 xff1a https www silabs com developers micrium 注意 xff1a 在进入下载前 可能 要注册一个账号 xff0c 如果可以直接下载的话不用注册也可以 xff0c 如果有小伙伴需要注册账号
  • dataX连接oracle报实例名错误

    oracleCDB数据库 xff1a 实例名CS 34 jdbcUrl 34 34 jdbc oracle thin 64 10 10 10 242 1521 xff1a CS 34 oraclePDB数据库 xff1a 实例名CS 34
  • 华清-周总结(2)(数据结构)

    数据结构类型 数据结构 xff1a 线性结构 xff0c 树形结构 xff0c 图形结构 线性结构 xff1a 在存储关系上 xff0c 每个元素最多有一个前驱 xff0c 一个后继 树形结构 xff1a 在存储关系上 xff0c 每个元素
  • 树莓派+新型混合无人机

    树莓派 43 新型混合无人机 产品设计缘由产品设计工作过程 xff1a 功能及成本预算 总结与鸣谢 产品设计缘由 我去设计这个树莓派 43 的一个产品 xff0c 是因为10月7日学校的创客训练营的招新选拔 xff0c 而选拔的题目是 xf
  • 树莓派frp内网穿透

    树莓派 43 frp内网穿透 一 frp二 frp作用三 安装与配置1 服务器端2 客户端 xff08 树莓派 xff09 一 frp frp 是一个高性能的反向代理应用 xff0c 支持 tcp udp http https 协议 二 f
  • FreeRTOS任务创建

    任务创建 操作 一 硬件初始化 span class token keyword static span span class token keyword void span span class token function Hardwa