FreeRTOS学习4-任务创建和删除

2023-05-16

关于任务创建有3个函数

1.动态创建一个任务。可以自动分配任务堆栈和TCB。FreeRTOSConfig.h中,需要定义

#define configSUPPORT_DYNAMIC_ALLOCATION        1            //支持动态内存申请

    BaseType_t xTaskCreate(    TaskFunction_t pxTaskCode,//函数指针,入口地址
                            const char * const pcName,//函数名字,自己取
                            const uint16_t usStackDepth,//堆栈大小,最后实际大小要*4
                            void * const pvParameters,//参数
                            UBaseType_t uxPriority,//优先级,值越大,优先级越高
                            TaskHandle_t * const pxCreatedTask )// 任务句柄

返回值:任务创建成功pdPASS;errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY任务创建失败

2.静态创建一个任务。需要手动分配堆栈大小和任务控制块(TCB),像ucos一样。

TaskHandle_t xTaskCreateStatic(    TaskFunction_t pxTaskCode,
                                    const char * const pcName,
                                    const uint32_t ulStackDepth,
                                    void * const pvParameters,
                                    UBaseType_t uxPriority,
                                    StackType_t * const puxStackBuffer,//堆栈指针,如在前面定义StackType_t   TaskSTK[256];
                                    StaticTask_t * const pxTaskBuffer )//任务控制块指针,如定义StaticTask_t    TaskTCB;

返回值:类型为TaskHandle_t,说明是任务句柄。

需要自己定义这2个任务的堆栈和TCB
static StackType_t IdleTaskStack[configMINIMAL_STACK_SIZE];//空闲任务任务堆栈
static StaticTask_t IdleTaskTCB;//空闲任务控制块
static StackType_t TimerTaskStack[configTIMER_TASK_STACK_DEPTH];//定时器服务任务堆栈
static StaticTask_t TimerTaskTCB;//定时器服务任务控制块

同时还需要对两个函数进行定义:

//获取空闲任务的堆栈和TCB地址

void vApplicationGetIdleTaskMemory(StaticTask_t **ppxIdleTaskTCBBuffer, //二级TCB指针
                                   StackType_t **ppxIdleTaskStackBuffer, //二级堆栈指针
                                   uint32_t *pulIdleTaskStackSize)//堆栈大小

{    *ppxIdleTaskTCBBuffer=&IdleTaskTCB;
    *ppxIdleTaskStackBuffer=IdleTaskStack;
    *pulIdleTaskStackSize=configMINIMAL_STACK_SIZE;}

//获取定时器的堆栈和TCB地址

void vApplicationGetTimerTaskMemory(StaticTask_t **ppxTimerTaskTCBBuffer, //同上
                                    StackType_t **ppxTimerTaskStackBuffer, //同上
                                    uint32_t *pulTimerTaskStackSize)//同上

{    *ppxTimerTaskTCBBuffer=&TimerTaskTCB;
    *ppxTimerTaskStackBuffer=TimerTaskStack;
    *pulTimerTaskStackSize=configTIMER_TASK_STACK_DEPTH;}

3.创建一个有MPU(内存保护单元)的任务。其他功能和xTaskCreate创建的任务一样

BaseType_t xTaskCreateRestricted( const TaskParameters_t * const pxTaskDefinition, TaskHandle_t *pxCreatedTask )

TaskParameters_t 类型如下:

typedef struct xTASK_PARAMETERS
{
    TaskFunction_t pvTaskCode;
    const char * const pcName;   //名字
    uint16_t usStackDepth;//堆栈大小
    void *pvParameters;//参数
    UBaseType_t uxPriority;//优先级
    StackType_t *puxStackBuffer;//堆栈指针
    MemoryRegion_t xRegions[ portNUM_CONFIGURABLE_REGIONS ];
} TaskParameters_t;

typedef struct xMEMORY_REGION
{
    void *pvBaseAddress;//基地址
    uint32_t ulLengthInBytes;//大小
    uint32_t ulParameters;//参数,这个是什么参数,溢出参数吗
} MemoryRegion_t;

TaskHandle_t 任务句柄类型。

删除一个任务:

void vTaskDelete( TaskHandle_t xTaskToDelete ),会释放掉堆栈和控制块,该任务就相当于不存在了。

真正删除任务是在空闲任务中,所以会有些延迟。

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

FreeRTOS学习4-任务创建和删除 的相关文章

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

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

    FreeRTOS使用 一 源码下载和移植文件提取 1 1 源码下载 在网站https sourceforge net projects freertos 可以找到freertos最新的源码 1 2 移植文件提取 根据第一步 我们会得到一个f
  • 【FreeRTOS 信号量】互斥信号量

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

    STM32F103移植FreeRTOS必须搞明白的系列知识 1 Cortex CM3中断优先级 STM32F103移植FreeRTOS必须搞明白的系列知识 2 FreeRTOS任务优先级 STM32F103移植FreeRTOS必须搞明白的系
  • FreeRTOS记录(七、FreeRTOS信号量、事件标志组、邮箱和消息队列、任务通知的关系)

    我们在前面单独介绍过FreeRTOS的任务通知和消息队列 但是在FreeRTOS中任务间的通讯还有信号量 邮箱 事件组标志等可以使用 这篇文章就这些成员与消息队列和任务通知的关系进行说明分析 增加邮箱部分 任务通知发送消息 Demo 202
  • FreeRTOS 软件定时器的使用

    FreeRTOS中加入了软件定时器这个功能组件 是一个可选的 不属于freeRTOS内核的功能 由定时器服务任务 其实就是一个定时器任务 来提供 软件定时器是当设定一个定时时间 当达到设定的时间之后就会执行指定的功能函数 而这个功能函数就叫
  • FreeRTOS学习(八) 延时函数

    声明及感谢 跟随正点原子资料学习 在此作为学习的记录和总结 环境 keil stm32f103 FreeRTOS延时函数有两个 分别是 vTaskDelay vTaskDelayUntil 1 vTaskDelay 任务相对延时 函数原型
  • Freertos中vTaskDelay()是怎么用的

    1 常见的使用场景 void vLED Task void pvParameters while 1 Heartbeat LED vTaskDelay 1000 portTICK RATE MS 说明 上面这段代码的意思是 led翻转后经过
  • 基于HAL库的FREERTOS----------一.任务

    FreeROTS 就是一个免费的 RTOS 类系统 这里要注意 RTOS 不是指某一个确定的系统 而是指一类系统 比如 UCOS FreeRTOS RTX RT Thread 等这些都是 RTOS 类操作系统 FreeRTOS 是 RTOS
  • freeRTOS使用uxTaskGetStackHighWaterMark函数查看任务堆栈空间的使用情况

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

    传送门 博客汇总帖 传送门 Cortex M3 中断 异常 传送门 Cortex M3笔记 基础 笔记内容参考 正点原子的FreeRTOS开发手册 cortex m3权威指南 Cortex M3和Cortex M4权威指南等 文中stm32
  • 【FreeRTOS】任务通知的使用

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

    软件定时器简介 软件定时器的作用 在指定的时间到来时执行指定的函数 或者以某个频率周期性地执行某个函数 被执行的函数叫做软件定时器回调函数 软件定时器由FreeRTOS内核实现 不需要硬件支持 软件定时器只有在软件定时器回调函数被调用时才需
  • FreeRTOS,串口中断接收中使用xQueueOverwriteFromISR()函数,程序卡死在configASSERT

    原因 UART的中断优先级设置的太高 高于了configMAX SYSCALL INTERRUPT PRIORITY宏定义的安全中断等级 UART的中断等级小于等于宏定义的优先等级即可
  • stm32f103zet6移植标准库的sdio驱动

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

    最近在做一个产品二代升级的项目 代码是上一任工程师留下的 很多BUG 而且融合了HAL库和LL库 以及github上下载的GSM源码 很不好用 我这边是将2G模块换成了4G 且添加了单独的BLE模块 因此只在源码的基础上 去除2G和BLE代
  • FreeRTOS笔记(二)

    FreeRTOS笔记 二 静态任务 文章目录 FreeRTOS笔记 二 静态任务 一 任务定义 二 任务创建 2 1 定义任务栈 2 2 定义任务函数 2 3 定义任务控制块 2 4 实现任务创建函数 三 实现就绪列表 3 1 定义就绪列表
  • STM32 Freertos 添加 外部sram heap_5.c

    1 添加外部SRAM 初始化 2 添加heap 5 c 3 初始化heap 5 c 外部堆栈 Define the start address and size of the two RAM regions not used by the
  • 如何更改 FreeRTOS 中任务的最大可用堆大小?

    我通过以下方式在任务中创建元素列表 l dllist pvPortMalloc sizeof dllist dlllist 有 32 字节大 我的嵌入式系统有 60kB SRAM 所以我希望系统可以轻松处理我的 200 个元素列表 我发现在
  • 如何将 void* 转换为函数指针?

    我在 FreeRTOS 中使用 xTaskCreate 其第四个参数 void const 是传递给新线程调用的函数的参数 void connect to foo void const task params void on connect

随机推荐

  • 【Pytorch学习笔记】1.Python的yield和next是什么?为什么常用来读取数据(DataLoader)?

    初学Pytorch xff0c 先讲讲我在代码中遇到的在Python本身用的不太多的知识点 xff0c 比如yield和next 文章目录 定义数据读取的函数时常用yield什么是yielditerable 可迭代对象 iterator 迭
  • 【Pytorch学习笔记】6.关于Tensor、Module内参数的dtype类型转换

    本文继续刨刨代码背后的含义 文章目录 问题引入Module 的float 方法是对模型所有参数进行的float转换疑问解答1 buffer是另一种模型参数2 浮点型参数 指代 float64 xff0c float32 xff0c floa
  • 玩转肺癌目标检测数据集Lung-PET-CT-Dx ——③整理、验证数据,建立Dataset对象

    文章目录 数据整理整理出所有的dcm文件整理出所有的xml标注文件整理数据 舍弃错误的标注文件整理数据 两个标注文件指向同一个目标图片的情况封装函数 xff0c 传入xml文件 xff0c 显示标注效果 整理数据 将PETCT的三通道图像转
  • Java_求 1+11+111+1111+11111+111111+1111111+11111111

    span class token keyword package span cn span class token punctuation span myAlgorithm span class token punctuation span
  • Ubuntu22.04安装CUDA、cudnn详细步骤

    文章目录 安装CUDA安装cudnn下载安装文件安装验证是否安装成功 在Ubuntu系统中 xff0c 使用nvidia smi命令可以看到当前GPU信息 xff0c 在右上角可以看到CUDA Version xff0c 意思是最大支持的C
  • Ubuntu22.04部署Pytorch2.0深度学习环境

    文章目录 安装Anaconda创建新环境安装Pytorch2 0安装VS CodeUbuntu下实时查看GPU状态的方法小实验 xff1a Ubuntu Windows10下GPU训练速度对比 Ubuntu安装完显卡驱动 CUDA和cudn
  • 玩转肺癌目标检测数据集Lung-PET-CT-Dx ——④转换成PASCAL VOC格式数据集

    文章目录 关于PASCAL VOC数据集目录结构 创建VOC数据集的几个相关目录XML文件的形式 读取dcm文件与xml文件的配对关系 创建VOC格式数据集 创建训练 验证集 本文所用代码见文末Github链接 关于PASCAL VOC数据
  • Ubuntu与win10 修改开机启动顺序

    lfg 64 lfg ubuntu cd boot grub 打开grub cfg所在文件夹 lfg 64 lfg ubuntu boot grub sudo chmod a 43 w grub cfg 修改权限为所有可写 sudo pas
  • 小觅双目相机标准彩色版SDK的环境配置

    一 初用MYNTEYE双目相机标准彩色版 xff08 SC xff09 1 小觅相机目前标准版有三款 xff0c 详见 xff1a 小觅双目摄像头标准版系列参数比较 2 彩色工程版有以下7种分辨率可选 xff0c 数据输出格式为YUYV x
  • 小觅双目摄像头标准版系列产品参数比较

  • java for无限循环

    for无限循环的几个情况 判断条件为true 会无限循环 省略了判断条件 会无限循环 判断条件为true 会无限循环 package test010 public class Main nbsp nbsp nbsp public stati
  • 计数器与定时器有何区别

    计数器是当你开始从0开始计数时一直不停的开始记数 除非你让他停下来要不他会不停的记下去 而定时器则是不一样的 是需要你自己先设定一个时间然后开始倒计时 当你的所定时间倒计完以后 他就自动停止下来了 懂了吗 至于用哪个就要看你干什么而定了 8
  • C++基础知识

    1 面向对象的程序设计思想是什么 xff1f 答 xff1a 把数据结构和对数据结构进行操作的方法封装形成一个个的对象 2 什么是类 xff1f 答 xff1a 把一些 具有共性的对象归类后形成一个集合 xff0c 也就是所谓的类 3 对象
  • 【开关电源】降压变换器(BUCK)的断续模式建模

    1 前言 在DCDC变换器中BUCK变换器是最基础的一类降压型变换器 xff0c 它可以将输入电压降低后输出 在连续模式CCM下 xff0c 输出和输入之间的比值是D xff08 D为占空比 xff09 这种开关变换器是一种通过电子开关周期
  • 变量命名规范

    本文转载于https blog csdn net ZCF1002797280 article details 51495229 是我见过的描述最精炼 最好懂的命名文档 xff0c 故收藏转载推荐 1 驼峰命名法 1 1 小驼峰法 除第一个单
  • C++实现websocket服务器握手协议(使用Qt)

    前提 xff1a 笔者在开发server程序时 xff0c 要求websocket与server连接 websocket的机制是在第一次连接时进行握手协议 xff0c 协议通过 xff0c 才可以进行正常的通信 xff0c 否则websoc
  • 00011__ARM和STM32的区别

    https blog csdn net qq 34385566 article details 79668280
  • linux中查看系统资源占用情况的命令

    size 61 large top size 主要参数 d xff1a 指定更新的间隔 xff0c 以秒计算 q xff1a 没有任何延迟的更新 如果使用者有超级用户 xff0c 则top命令将会以最高的优先序执行 c xff1a 显示进程
  • 关于PendSV异常和SVC异常

    这里先说什么是异常 xff0c 什么是中断 xff1f 请下这张图 颜色加深的表项为异常 xff0c 这些属于cm3内核自带的 其中 3 xff0c 2 xff0c 1异常的优先级固定 xff0c 是不可更改的 xff0c 其余的异常中断优
  • FreeRTOS学习4-任务创建和删除

    关于任务创建有3个函数 1 动态创建一个任务 可以自动分配任务堆栈和TCB FreeRTOSConfig h中 xff0c 需要定义 define configSUPPORT DYNAMIC ALLOCATION 1 支持动态内存申请 Ba