IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> Freertos中空闲任务的重要性 -> 正文阅读

[C++知识库]Freertos中空闲任务的重要性

1. 代码

这次反着来,我们先看一段代码;

任务 1:任务 1 的大循环里,创建任务 2,然后休眠一段时间
任务 2:打印一句话,然后就删除自己

任务1代码:

void vTask1( void *pvParameters )
{
	const TickType_t xDelay100ms = pdMS_TO_TICKS( 100UL );		
	BaseType_t ret;
	
	for( ;; )
	{
		printf("Task1 is running\r\n");
				
		ret = xTaskCreate( vTask2, "Task 2", 1000, NULL, 2, &xTask2Handle );
		if (ret != pdPASS)
			printf("Create Task2 Failed\r\n");
			
		vTaskDelay( xDelay100ms );
	}
}

任务2代码:

void vTask2( void *pvParameters )
{	
	printf("Task2 is running and about to delete itself\r\n");

	vTaskDelete(xTask2Handle);
}

main 函数代码如下:

int main( void )
{
	prvSetupHardware();
	
	xTaskCreate(vTask1, "Task 1", 1000, NULL, 1, NULL);

	vTaskStartScheduler();
	
	return 0;
}

2.调试环境

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.运行结果

在这里插入图片描述

4.运行过程分析

  1. main 函数中创建任务 1,优先级为 1。任务 1 运行时,它创建任务 2,任
    务 2 的优先级是 2。
  2. 任务 2 的优先级最高,它马上执行。
  3. 任务 2 打印一句话后,就删除了自己。
  4. 任务 2 被删除后,任务 1 的优先级最高,轮到任务 1 继续运行,它调用
    vTaskDelay()进入 Block 状态。
  5. 任务 1 Block 期间,轮到 Idle 任务执行:它释放任务 2 的内存(TCB、栈)。
  6. 时间到后,任务 1 变为最高优先级的任务继续执行.
  7. 一直循环下去

5. 关闭空闲任务

在任务 1 的函数中,如果不调用 vTaskDelay,会出现一个什么样的情况呢?
屏蔽这句代码:

vTaskDelay( xDelay100ms );

6.运行结果

在这里插入图片描述

7.运行结果分析

在任务 1 的函数中,如果不调用 vTaskDelay,则 空闲任务Idle 没有机会执行,它就无法释放创建任务 2 是分配的内存。而任务 1 在不断地创建任务,不断地消耗内存,最终内存耗尽再也无法创建新的任务。

8.空闲任务的定义

空闲任务是启动RTOS调度器时由内核自动创建的任务,这样可以确保至少有一个任务在运行。空闲任务具有最低任务优先级,这样如果有其它更高优先级的任务进入就绪态就可以立刻让出CPU。空闲任务要么处于就绪态, 要么处于运行态,永远不会阻塞。

空闲任务的优先级为 0,这意味着一旦某个用户的任务变为就绪态,那么空闲任务马上被切换出去,让这个用户任务运行。在这种情况下,我们说用户任务"抢占"了空闲任务,这是由调度器实现的。

删除任务后,空闲任务用来释放RTOS分配给被删除任务的内存。因此,在应用中使用vTaskDelete()函数后确保空闲任务能获得处理器时间就很重要了。除此之外,空闲任务没有其它有效功能,所以可以被合理的剥夺处理器时间,并且它的优先级也是最低的。

9.钩子函数

空闲任务的循环每执行一次,就会调用一次钩子函数。
钩子函数的作用有这些:

  1. 会执行一些比较低级的任务
  2. 测量系统的空闲时间,空闲任务执行时,代表着所有高优先级的任务都停止了,所以可以根据系统的空闲时间计算处理器的占用率
  3. 让系统进入省电模式

在这里插入图片描述

总结

在这里插入图片描述

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 15:50:34  更:2022-03-03 15:55:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:41:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码