【正点原子】手把手教你学FreeRTOS-02

2023-05-16

 内容为:正点原子FreeRTOS的视频第9-10节

 一个任务所需要的资源这些东西在标准库需要我们自己写,但是在MX软件中可以自己生成

四项基本:优先级、堆栈大小、句柄、任务函数声明

//一个XXX任务需要的资源
//任务优先级
#define XXX_TASK_PRIO		1    //初始的时候,都使用1,到了最后再开始改变任务优先级
//任务堆栈大小	
#define XXX_STK_SIZE 		128  //初始大一点,默认为128
//任务句柄
TaskHandle_t XXXTask_Handler = NULL; 
void XXX_Task(void *pvParameters);  //这个声明需要写,不然会出现错误

void Create_XXX_Task(void)
{
	
	BaseType_t xReturned;
	
	  //创建XXX任务
	xReturned = xTaskCreate((TaskFunction_t )XXX_Task,             
							(const char*    )"XXX_Task",           
							(uint16_t       )XXX_STK_SIZE,        
							(void*          )NULL,                  
							(UBaseType_t    )XXX_TASK_PRIO,        
							(TaskHandle_t*  )&XXXTask_Handler);
							
	//判断任务是否正常创建						
	if( xReturned != NULL )
    {
        /* 任务创建失败  一般原因是栈空间不够,此时打印栈空间不足 */
		vTaskDelete( XXXTask_Handler );
		/* 打印创建失败消息---使用宏定义选择性使用,一般就是调试的时候使用 */
#if 0
		printf("xxxx失败");
#endif
		
    }							
}

//XXX任务函数 
void XXX_Task(void *pvParameters)
{
    while(1)
    {
		
    }
}   

几个建议:

                初始的时候,任务优先级都使用1,到了最后再开始改变任务优先级

                初始的堆栈大小大点,最后监测然后更改

容易忽略的点:句柄的初始化、任务函数未声明出现的错误、任务函数的传参使用(默认一般是NULL)、

typedef void (*TaskFunction_t)( void * );是一个地址,用来跳转到我们定义的任务函数中,

而const char*    )"XXX_Task",是打印任务的,前者要求需要与你定义的函数名一样,后者能分清楚就可以了、参数的返回值判断

这里的写法其实是参考了官方的,官方在每一个函数上面都写了模板与使用方法

 注意:pvParameters的使用,但是目前我还没有使用到

// Task to be created.
 void vTaskCode( void * pvParameters )
 {
	 for( ;; )
	 {
		 // Task code goes here.
	 }
 }

 // Function that creates a task.
 void vOtherFunction( void )
 {
 static uint8_t ucParameterToPass;
 TaskHandle_t xHandle = NULL;

	 // Create the task, storing the handle.  Note that the passed parameter ucParameterToPass
	 // must exist for the lifetime of the task, so in this case is declared static.  If it was just an
	 // an automatic stack variable it might no longer exist, or at least have been corrupted, by the time
	 // the new task attempts to access it.
	 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, &ucParameterToPass, tskIDLE_PRIORITY, &xHandle );
     configASSERT( xHandle );

	 // Use the handle to delete the task.
     if( xHandle != NULL )
     {
	     vTaskDelete( xHandle );
     }
 }
   </pre>
 * \defgroup xTaskCreate xTaskCreate
 * \ingroup Tasks
 */
#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
	BaseType_t xTaskCreate(	TaskFunction_t pxTaskCode,
							const char * const pcName,
							const uint16_t usStackDepth,
							void * const pvParameters,
							UBaseType_t uxPriority,
							TaskHandle_t * const pxCreatedTask ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
#endif

 

4的解释:

                更新任务的阻塞超时时间,假如现在是任务1,2,3,而2的阻塞时间20ms,3的是50ms,假如现在2被删除了,那么现在最新的阻塞时间是50ms了,那么你就需要更新了

 关于栈使用的情况,可以获取任务堆栈的剩余最小值,就知道它使用了多少

 删除任务模板,防止多次删除任务,输出错误信息(错误信息来自于断言-此功能可以关闭)

/*  删除任务模板 */
if( XXXTask_Handler != NULL )
{
	vTaskDelete( XXXTask_Handler );
	printf("任务删除");
	XXXTask_Handler = NULL;  //然后此任务会在空闲任务中回收资源
	
}

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

【正点原子】手把手教你学FreeRTOS-02 的相关文章

  • FreeRTOS记录(七、FreeRTOS信号量、事件标志组、邮箱和消息队列、任务通知的关系)

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

    目录 1 创建 2 获取 3 释放 4 测试 FreeRTOS不支持调度方式的设置 所以下面2个宏定义可以随意设置值 define RTOS IPC FLAG FIFO 0x00 define RTOS IPC FLAG PRIO 0x01
  • 一文教你学会keil软件仿真

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

    1 RTOS简介 RTOS全称为 Real Time Operation System 即实时操作系统 RTOS强调的是实时性 又分为硬实时和软实时 硬实时要求在规定的时间内必须完成操作 不允许超时 而软实时里对处理过程超时的要求则没有很严
  • FreeRTOS学习笔记<中断>

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

    以下文章来源于 公 众 号开源电子网 读取更多技术文章 请扫码关注 如何在VS2019中配置OpenCV 1 下载OpenCV SDK 与安装 进入OpenCV官网 https opencv org 点击左上角Library 选择相应的版本
  • 基于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笔记(一)简介

    这个笔记主要依据韦东山freertos快速入门系列记录 感谢韦东山老师的总结 什么是实时操作系统 操作系统是一个控制程序 负责协调分配计算资源和内存资源给不同的应用程序使用 并防止系统出现故障 操作系统通过一个调度算法和内存管理算法尽可能把
  • 基于STM32的FreeRTOS学习之中断测试实验(五)

    记录一下 方便以后翻阅 本章内容是接着上一章节进行的实际演练 1 实验目的 FreeRTOS可以屏蔽优先级低于configMAX SYSCALL INTERRUPT PRIORITY的中断 不会屏蔽高于其的中断 本次实验就是验证这个说法 本
  • 【正点原子STM32连载】第五十七章 USB读卡器(Slave)实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1

    1 实验平台 正点原子MiniPro H750开发板 2 平台购买地址 https detail tmall com item htm id 677017430560 3 全套实验源码 手册 视频下载地址 http www openedv
  • 【正点原子Linux连载】第一章Ubuntu下安装Qt Creator 摘自【正点原子】ATK-DLRV1126Qt开发环境搭建手册

    1 实验平台 正点原子RV1126 Linux开发板 2 平台购买地址 https detail tmall com item htm id 692176265749 3 全套实验源码 手册 视频下载地址 http www openedv
  • FreeRTOS学习笔记(8)---- 软件定时器

    使用FreeRTOS软件定时器需要在文件FreeRTOSConfig h先做如下配置 1 configUSE TIMERS 使能软件定时器 2 configTIMER TASK PRIORITY 定时器任务优先级 3 configTIMER
  • FreeRTOS学习---“定时器”篇

    总目录 FreeRTOS学习 任务 篇 FreeRTOS学习 消息队列 篇 FreeRTOS学习 信号量 篇 FreeRTOS学习 事件组 篇 FreeRTOS学习 定时器 篇 FreeRTOS提供了一种软件定时器 用来快速实现一些周期性的
  • FreeRTOS轻量级同步--任务通知

    1 简介 在FreeRTOS的配置参数中的configUSE TASK NOTIFICATIONS宏打开 一般RTOS会默认打开 如图1所示 图1 notify宏开关 RTOS在创建任务时 会创建一个32位的通知值ulNotifiedVal
  • FreeRTOS之系统配置

    1 FreeRTOS的系统配置文件为FreeRTOSConfig h 在此配置文件中可以完成FreeRTOS的裁剪和配置 在官方的demo中 每个工程都有一个该文件 2 先说一下 INCLUDE 开始的宏 使用 INCLUDE 开头的宏用来
  • FreeRTOS多任务调度器基础

    Cortex M4中SysTick调度器核心 Cortex M4中的中断管理 Cortex M4中影子栈指针 Cortex M4中SVC和PendSV异常 1 Cortex M4中SysTick调度器核心 systick每一次中断都会触发内
  • 防止GCC LTO删除函数

    我使用 GCC ARM Embedded 和 FreeRTOS FreeRTOS具有的功能vTaskSwitchContext 仅在某些情况下使用 内联汇编代码 问题是 当我使用LTO时 GCC不考虑内联汇编代码并认为该函数没有被使用 因此
  • 有可用的 FreeRTOS 解释语言库吗?

    我在一家公司工作 该公司使用 FreeRTOS 为多个设备创建固件 最近 我们对新功能的要求已经超出了我们固件工程师的工作能力 但我们现在也无力雇用任何新人 即使进行微小的更改 也需要固件人员在非常低的级别上进行修改 我一直在为 FreeR

随机推荐

  • 【STM32】单片机和处理器的关系

    STM32 单片机和处理器的关系 单片机也称MCU xff0c 是指微控制器 xff0c 而处理器一般指计算单元 xff0c 也称CPU 以ST公司的STM32单片机产品为例 xff0c 介绍单片机 xff08 STM32 xff09 和处
  • kali安装中文版firefox浏览器(安装包安装)

    kali安装中文版firefox浏览器 在官网上下载linux版本的安装包 firefox官网地址 下载好后将整个压缩包直接拖到虚拟机里 进入你放压缩包的位置进行解压 1 cd span class token operator span
  • 【测试】 FIO:ceph/磁盘IO测试工具 fio(iodepth深度)

    目录 随看随用 NAS文件系统测试 块系统测试 FIO用法 FIO介绍 FIO 工具常用参数 xff1a FIO结果说明 I O 的重放 xff08 39 录 39 下实际工况的IO xff0c 用fio 39 重放 39 xff09 fi
  • linux系统启动流程,linux系统启动不了,启动出错怎么办?不小心把boot分区删了怎么办?

    linux系统启动出错 linux系统启动流程启动问题以及解决方法第一种情况 xff1a 磁盘引导数据丢失 xff08 即mbr数据丢失 xff09 第二种情况 xff1a grub2引导文件grub cfg丢失第三种情况 xff1a 开机
  • 怎么在linux和windows之间实现文件共享?

    windows与linux共享文件 windows端共享文件夹 61 61 windows端访问windows共享的文件夹 xff1a 61 61 61 61 linux端访问windows共享的文件夹 xff1a 61 61 linux端
  • Docker容器(1):安装docker,上线简单的2048,马里奥小游戏

    Docker基础知识 可以参考上一篇文章Docker基础知识 安装并启动Docker 实验环境 xff1a server5主机部署docker ip xff1a 172 span class token punctuation span 2
  • Docker网络详解

    Docker网络 Docker网络架构libnetwork中的5种内置驱动Docker原生网络bridge模式host模式none模式 Docker自定义网络创建自定义网桥bridge如何让不同网段的容器可以相互通信 Docker基础知识可
  • Kubernetes(k8s)之Volume(卷)

    Volume k8s中的volume为什么要用volumevolume特点K8s支持多种类型的Volume演示环境emptyDir卷多容器共享卷emptyDir卷缺点 hostPath 卷hostPath卷应用场景使用hostPath卷时
  • Kubernetes(k8s)之在集群环境部署Prometheus(普罗米修斯监控)和集群的ui管理工具Grafana

    Prometheus Prometheus演示环境部署Prometheus和Grafana测试 Prometheus Prometheus是一个开源系统监控和警报工具包 现在是一个独立的开源项目 xff0c 独立于任何公司进行维护 Prom
  • 用OpenStack搭建简单的云平台并启动云主机

    OpenStack OpenStack简介OpenStack重要集成组件OpenStack平台部署部署环境建立虚拟机 配置时间同步安装OpenStack安装 RabbitMQ 消息队列服务Memcached缓存令牌的安装安装和配置OpenS
  • python实现快速排序、归并排序

    时间复杂度平均为nlogn 快速排序快速排序代码 xff1a 归并排序归并排序代码 xff1a 快速排序 快速排序算法有两个核心点 xff0c 分别为 哨兵划分 和 递归 哨兵划分操作 xff1a 以数组某个元素 xff08 一般选取首元素
  • pycharm常用快捷键

    常用快捷键 复制粘贴撤销就不用我说了吧复制选中行并在该行下粘贴批量注释多行缩进多行删除缩进全局关键字搜索该页关键字搜索查看内置函数源码该函数被哪里引用按文件名搜索py文件按文件名搜索所有类型的文件 复制粘贴撤销就不用我说了吧 复制 xff1
  • linux源码安装python3

    python3源码安装 前置环境解压提前解决依赖性源码编译三部曲验证安装 前置环境 先要准备好源码包 xff0c 去官网下载自己想要的版本https www python org ftp python 我下的是3 9 7的直接下到了要安装p
  • 【shell】用 grep 查找包含字符串的文件|grep 过滤|取匹配行的前后n行

    目录 即可即用 grep 匹配多个关键字 与find的不同 grep检索文件内容详解 grep指定搜索的文件类型 grep 不起作用 xff1f 过滤了还是显示 匹配特定的列 指定在哪些文件 哪类文件 哪个目录里搜索 搜索时包含 排除哪类文
  • 基于FreeRTOS+STM32实践-01

    目的 xff1a 复习FreeRTOS以及STM32的使用 xff0c 完成51单片机到stm32的过渡 该项目会与传感器以及其他种类的外设相联系 xff0c 以提升代码管理能力和逻辑能力 在51单片机中我们使用了很多传感器和外设 xff0
  • C++点亮stm32LED灯

    目的 xff1a 引导初学者使用C 43 43 对STM32进行编程 1 xff1a 在C语言中我们没有封装 继承 多态的概念 xff0c 没有面向对象的程序思想 这些思想一般是源于C 43 43 语言的 xff0c C语言是面向过程的语言
  • 基于FreeRTOS+STM32实践-02

    按键学习 按键常见的为独立按键和行列按键 stm32中不存在Bit类型数据 而在51内核中存在bit类型的 按键引脚分配 开发板自带3个独立按键 xff1a KEY0 PC5 KEY1 PA15 WK UP PA0 行列键盘引脚分配 xff
  • 基于FreeRTOS+STM32实践-03

    03 xff1a 按键的扫描 资源 xff1a 软件定时器 43 信号量 43 消息队列 在51单片机中的按键扫描是 xff1a 标志位在10ms定时器1的中断中置一 xff0c 在while 1 中写一个如下的按键扫描程序 xff0c 目
  • 【正点原子】手把手教你学FreeRTOS-01

    内容为 xff1a 正点原子FreeRTOS的视频前1 8 目的 xff1a 简单的回忆一下 xff0c 加深印象和理解 单片机的发展趋势 操作系统的核心就是 任务调度器 xff0c 关于这些特点 xff0c 也是我们学习FreeRTOS的
  • 【正点原子】手把手教你学FreeRTOS-02

    内容为 xff1a 正点原子FreeRTOS的视频第9 10节 一个任务所需要的资源这些东西在标准库需要我们自己写 xff0c 但是在MX软件中可以自己生成 四项基本 xff1a 优先级 堆栈大小 句柄 任务函数声明 一个XXX任务需要的资