FreeRTOS 任务概述
来源:互联网 发布:sql两表连接查询 编辑:程序博客网 时间:2024/05/18 01:08
任务状态
一个任务的状态可以是下面中的某一个:
1. 运行:
2. 就绪:就绪的任务已经具备执行的能力(不同于阻塞和挂起),但是因为有一个同优先级或者更高优先级的任务处于运行状态而还没有真正执行。
3. 阻塞:如果任务当前正在等待某个时序或外部中断,我们就说这个任务处于阻塞状态。比如一个任务调用vTaskDelay()后会阻塞到延时周期到为止。任务也可能阻塞在队列或信号量事件上。进入阻塞状态的任务通常有一个“超时”周期,当事件超时后解除阻塞。
4. 挂起:处于挂起状态的任务同样对调度器无效。仅当明确的分别调用 vTaskSuspend() 和 xTaskResume() API函数后,任务才会进入或退出挂起状态。不可以指定超时周期事件(不可以通过设定超时事件而退出挂起状态)。
任务优先级
每个任务都要被指定一个优先级,从0 ~ configMAX_PRIORITIES,configMAX_PRIORITIES 定义在 FreeRTOSConfig.h 中。
小数值代表低优先级。空闲任务(idle task)的优先级为0(tskIDLE_PRIORITY)。
任何数量的任务可以共享同一个优先级。如果宏configUSE_TIME_SLICING未定义或着宏configUSE_TIME_SLICING定义为1,处于就绪态的多个相同优先级任务将会以时间片切换的方式共享处理器。
实现一个任务
一个任务具有以下结构:
void vATaskFunction( voidvoid *pvParameters ) { for( ;; ) { /* 应用程序代码放在这里 */ } /* 如果一个任务确实要退出函数,那么这个任务应调用vTaskDelete(NULL) 函数,以便处理一些清理工作。*/ vTaskDelete( NULL ); }
任务函数返回为void,参数只有一个void类型指针。所有的任务函数都应该是这样。void类型指针可以向任务传递任意类型信息。 通常任务函数都是一个死循环。
任务由xTaskCreate()函数创建,由vTaskDelete()函数删除。
空闲任务和空闲任务钩子
空闲任务(IDLE Task)
IDLE 任务在函数 vTaskStartScheduler() 中被创建。
空闲任务是启动RTOS调度器时由内核自动创建的任务,这样可以确保至少有一个任务在运行。空闲任务具有最低任务优先级,这样如果有其它更高优先级的任务进入就绪态就可以立刻让出CPU。
删除任务后,空闲任务用来释放RTOS分配给被删除任务的内存。因此,在应用中使用vTaskDelete()函数后确保空闲任务能获得处理器时间就很重要了。除此之外,空闲任务没有其它有效功能,所以可以被合理的剥夺处理器时间,并且它的优先级也是最低的。
空闲任务钩子(IDLE Task Hook)
空闲任务钩子是一个函数(移植时,非必须的函数),每一个空闲任务周期被调用一次。
#if ( configUSE_IDLE_HOOK == 1 ){ extern void vApplicationIdleHook( void ); /* Call the user defined function from within the idle task. This allows the application designer to add background functionality without the overhead of a separate task. NOTE: vApplicationIdleHook() MUST NOT, UNDER ANY CIRCUMSTANCES, CALL A FUNCTION THAT MIGHT BLOCK. */ vApplicationIdleHook();}#endif /* configUSE_IDLE_HOOK */
- FreeRTOS 任务概述
- FreeRTOS系列第9篇---FreeRTOS任务概述
- FreeRTOS系列第9篇---FreeRTOS任务概述
- FreeRTOS任务切换解析
- FreeRTOS任务间通讯
- FreeRTOS任务切换解析
- FreeRTOS的任务管理
- FreeRTOS详解---任务管理
- FreeRTOS 任务通知
- HEXIWEAR---FreeRTOS之任务
- FreeRTOS---任务切换
- FreeRTOS 任务优先级问题
- FreeRTOS中的任务状态
- FreeRTOS任务基础知识总结
- FreeRTOS任务创建
- FreeRTOS任务调度研究
- FreeRTOS----任务优先级
- FreeRTOS任务基础
- 代码鲁棒性
- TabLayout标题和Fragment联动
- math
- python中文件json的用法
- 【第七届蓝桥杯】寒假作业
- FreeRTOS 任务概述
- 网络七层协议的形象说明
- c++虚函数
- 深度 | 谷歌的新CNN特征可视化方法,构造出一个华丽繁复的新世界
- AI吉尼斯:那些你不知道的人工智能之“最”
- Linux 排错
- 深度解读:美国自动驾驶技术及测试示范区现状
- HTML(一)
- 从神经科学到计算机视觉:人类与计算机视觉五十年回顾