FreeRTOS学习第6篇–任务状态挂起恢复删除等操作

目录

  • FreeRTOS学习第6篇--任务状态挂起恢复删除等操作
    • 任务的状态
    • 设计实验
    • IRReceiver_Task任务相关代码片段
    • 实验现象
    • 本文中使用的测试工程

FreeRTOS学习第6篇–任务状态挂起恢复删除等操作

本文目标:学习与使用FreeRTOS中的几项操作,有挂起恢复删除等操作。

按照本文的描述,应该可以跑通实验并举一反三。

本文实验条件:拥有C语言基础,装有编译和集成的开发环境,比如:Keil uVision5

任务的状态

任务的状态

  • 就绪态(Ready):任务已经准备好运行,只等待调度器分配CPU时间片给它。就绪态的任务按照优先级排列在就绪列表中,优先级越高的任务越靠前。
  • 运行态(Running):任务正在执行,占用CPU资源。同一时刻,只有一个任务处于运行态,除非使用多核处理器。
  • 阻塞态(Blocked):任务因为等待某个事件(如信号量、队列、延时等)而无法运行,被放入阻塞列表中。阻塞态的任务不会占用CPU资源,也不会参与调度。当等待的事件发生时,任务会从阻塞列表中移出,重新进入就绪列表,等待调度。比如:使用函数vTaskDelay()或vTaskDelayUntil()就是进入阻塞状态,或者xSemaphoreTake()等函数也是进阻塞状态。
  • 挂起态(Suspended):任务被主动暂停,无论是否有事件发生,都不会运行,被放入挂起列表中。挂起态的任务不会占用CPU资源,也不会参与调度。只有当任务被主动恢复时,才会从挂起列表中移出,重新进入就绪列表,等待调度。比如:直接调用vTaskSuspend()函数。
  • 删除态:任务被主动删除,不再存在于任何列表中,也不会再运行。删除态的任务的内存资源会被释放,不会占用任何资源。

设计实验

本次实验就是设计一个实验,来实现任务的一些操作,有删除任务,恢复任务。在本次实验中,将使用两个按键,一个按键用作删除任务,一个按键用作挂起和恢复。基于这个实验情况,我在我的硬件平台进行实验。

IRReceiver_Task任务相关代码片段

void IRReceiver_Task(void * pvParameters)
{
        int bRunning;
        uint8_t dev, data;
        OLED_Init();
        IRReceiver_Init();

		while(1)
		{
			OLED_ShowString(0,0,"IR Receiver: ",16);
			OLED_ShowString(0,16,"Device  Data",16);
			if (!IRReceiver_Read(&dev, &data))
			{
					OLED_ShowString(0, 32, "                ",16);
					OLED_ShowNum(0,32,dev,4,16);
					OLED_ShowNum(64,32,data,4,16);
					OLED_ShowString(0, 48, "                ",16);
					OLED_ShowString(0,48,"Key name: ",16);
					OLED_ShowString(80,48,(u8 *)IRReceiver_CodeToString(data),16);
				  // 某个按键值  "1"  
					if(data == 48)
					{
						// 创建闪灯任务
						if( ledTaskHandle == NULL)
						{
							ledTaskHandle = osThreadNew(LedTask, NULL, &ledTask_attributes);
							bRunning = 1;
						}
						else
						{
							/* 要么suspend要么resume */
							if (bRunning)
							{
								vTaskSuspend(ledTaskHandle);  // 挂起LED任务
								bRunning = 0;
							}
							else
							{
								vTaskResume(ledTaskHandle);   // 恢复LED任务
								bRunning = 1;
							}
						}
					}
					// 某个按键 "2"
					if(data == 24) 
					{
						// 删除LED 任务
						if(ledTaskHandle != NULL)
						{
							vTaskDelete(ledTaskHandle);
							ledTaskHandle = NULL;  // 进行清理操作,否则会莫名奇妙的进入HardFault_Handler错误
						}
					}
					
			}
			OLED_Refresh(); // 刷新屏幕
		}

}
xTaskCreate( IRReceiver_Task, "IRReceiver_Task", configMINIMAL_STACK_SIZE, NULL, osPriorityNormal, NULL );
osThreadId_t ledTaskHandle;
const osThreadAttr_t ledTask_attributes = {
  .name = "ledTask",
  .stack_size = 128 * 4,
  .priority = (osPriority_t) osPriorityNormal,
};
void LedTask(void *argument)
{
  /* USER CODE BEGIN StartDefaultTask */
  /* Infinite loop */
  for(;;)
  {
		HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
		HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
		HAL_GPIO_TogglePin(LED3_GPIO_Port,LED3_Pin);
	  mdelay(100);
  }
  /* USER CODE END StartDefaultTask */
}

实验现象

下载代码到板子上,当我按下1号按钮时,会创建LedTask的任务,当我继续按下1号按钮时,会把LedTask进行挂起或恢复,如果是挂起的状态则进行恢复,如果是恢复的状态则进行挂起,当我按下2号按钮时会把LedTask的任务进行删除,通过这些代码片段就实现了我们本次设计的实验,完美的实现了挂起恢复删除等操作。

本文中使用的测试工程

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

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

相关文章

探索2024年软件测试的几大主导趋势

进入2024年,考虑影响测试环境的问题至关重要。这种思考将成为团队了解主要瓶颈和实现当今不断提高的期望的首要因素。 01 了解关键测试瓶颈 毋庸置疑,现代团队需要不断创新、适应和拥抱最新趋势,以保持竞争力并提供以客户为中心的解决方案。尽…

OpenGuass 之顺序扫描和索引扫描的代价估算

一. 前言 在OepnGuass中,一条路径的执行代价估算值将直接决定一条路径是否会被取舍。本文主要对OpenGuass中对于普通表的顺序扫描和索引扫描两种路径的的代价估算进行代码走读了解代价估算的整体过程。 二. 顺序扫描代价估算 顺序扫描的路径代价估算在OpenGuass中实…

【C++】- 类和对象(构造函数!析构函数!拷贝构造函数!详解)

类和对象② 类的6个默认成员函数构造函数析构函数拷贝构造函数 类的6个默认成员函数 上一篇详细介绍了类。如果一个类中什么成员都没有,简称为空类。 那么空类中真的什么都没有吗? 并不是,当类在什么都不写时,编译器会自动生成…

Mac 16g约等于Windows多少g?

Mac 16g 内存等于 Windows 320g 内存 何为“黄金内存”? Mac 的内存是用黄金做的,而 Windows 的内存是用铁做的。 黄金的密度是 19.32 g/cm,而铁的密度是 7.874 g/cm。 因此,16g 的黄金体积是 0.082 cm,而 16g 的铁…

CentOS设置docker静态ip

docker容器的ip地址在每次启动后启动顺序设置ip地址,为解决ip地址变动的问题,我们有必要设置docker内部ip地址固定。 第一步先创建一个本地ip地址固定容器的ip docker network create —driver bridge —subnet172.18.12.0/16 —gateway172.18.1.1 wn_d…

XCTF-Misc1 USB键盘流量分析

m0_01 附件是一个USB流量文件 分析 1.键盘流量 USB协议数据部分在Leftover Capture Data域中,数据长度为八个字节,其中键盘击健信息集中在第三个字节中。 usb keyboard映射表:USB协议中HID设备描述符以及键盘按键值对应编码表 2.USB…

【SpringCloud Alibaba笔记】(2)Sentinel实现熔断与限流

Sentinel 概述 官网:https://github.com/alibaba/Sentinel 中文文档:https://sentinelguard.io/zh-cn/docs/introduction.html 类似Hystrix,以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热…

w18认证崩溃之暴力破解DVWA

一、实验环境 攻击工具:burpsuite2021.12 靶场:DVWA二、实验目的 演示暴破DVWA的medium和high两个级别,low级别请查看w18认证崩溃之暴力破解4种攻击模式 三、实验步骤 1.设置靶场medium级别 2.开启谷歌代理插件,开启bp拦截&…

多时点DID

标准 DID 模型一般针对政策实施时点为同一个时期,且接受干预的状态将一直持续下去,否则 的交互项设置将会严重违背平行趋势的假设,从而导致交互项的估计系数有偏。由于现实世界中很多的政策试点地区和时间都不尽相同,而且也容易发…

霍兰德职业兴趣测试 60题(免费版)

霍兰德职业兴趣理论从兴趣的角度出发探索职业指导的问题,明确了职业兴趣的人格观念,使得人们对于职业兴趣的认识有了质的变化。在霍兰德职业兴趣理论提出来之前,职业兴趣和职业环境二者分别独立存在,正是霍兰德的总结,…

test dbtest-00-数据库测试

拓展阅读 DbUnit-01-数据库测试工具入门介绍 database tool-01-flyway 数据库迁移工具介绍 数据库测试一直是一个痛点,测试的时候如何针对数据库测试呢? 数据库测试是确保数据库系统正确性、性能和可靠性的重要环节。以下是一些建议,可帮助您有效地…

跟着小德学C++之安全模块

嗨,大家好,我是出生在达纳苏斯的一名德鲁伊,我是要立志成为海贼王,啊不,是立志成为科学家的德鲁伊。最近,我发现我们所处的世界是一个虚拟的世界,并由此开始,我展开了对我们这个世界…

PPT模板(100套IT科技互联网风)

哈喽,小伙伴们,最近是不是都在准备年终总结、年终述职,一个好的PPT模板是编写报告的开端。我最近也在准备年终总结报告,一块整理了一些PPT模板。这些模板适用于各种IT科技互联网相关的场合,如产品发布会、项目提案、工…

Python和Java环境搭建

小白搭建全流程 首先不建议装在C盘,一旦重置电脑,之前安装第三方包需要重新安装 relolver :解释器 1、Python解释器安装 资源包: 1、 python -version java -version–用于查看是否安装 where python whrer java–用于查看安装的位置【非常…

【数据库】聊聊常见的索引优化-下

分页查询优化 主键排序 在实际的使用中,通过limit 10000,10 查询第10000记录到10010记录,mysql执行的时候是按照将前10010记录全部统计出来,然后剔除前10000条记录,选择后10条记录。这样来看的话,效率不高。 如果数据…

【C++】upper_bound和lower_bound

一个是返回第一个大于等于val的element的iter,另一个是返回第一个大于val的element的iter

2024年如何跻身前1%?

2024年如何跻身前1%? 8个习惯助你成为更好的自己 随着2023年即将结束,大家都在为2024年定下目标、列出清单并下定决心。新的一年不仅是结束和告别旧的自己、犯过的错误以及失败的战斗,也是期待着新的开始。 如果你也希望超越困境&#xff…

buuctf-Misc 题目解答分解109-111

109.[CFI-CTF 2018]webLogon capture 流量包分析, wireshark 打开 就这几个数据包,追踪http 进行url 解码 URL网址解码器 - 在线网址解码 得到flag CFI{1ns3cur3_l0g0n} 110.[GKCTF 2021]excel 骚操作 下载 excel 文件 ,打开 发现点击其他地…

vue结合Cesium加载gltf模型

Cesium支持什么格式? Cesium支持的格式包括:3D模型格式(如COLLADA、gITF、OBJ)、影像格式(如JPEG、PNG、GeoTIFF)、地形格式(如STL、Heightmap)、矢量数据格式(如GeoJSON…

CSS基础笔记-04cascade-specificity-inheritance

CSS基础笔记系列 《CSS基础笔记-01CSS概述》《CSS基础笔记-02动画》CSS基础笔记-03选择器 前言 Cascading Style Sheets,关键就在于这个cascading,对于这个术语理解,感觉对于我这种CSS新手有点儿不太friendly。本文记录下我对这个术语的理…