FreeRTOS 学习笔记 3 —— 任务状态机之阻塞
2015-07-29 15:38
495 查看
FreeRTOS 会创建很多任务,每个任务有相同或不同的优先级,如果让任务全都处于准备执行状态,那么只有优先级最高的任务一直在执行,优先级低的任务全都被 “饿死” 了。为了解决这个问题,添加了 “阻塞状态”。
任务分为 “运行态” 和 “非运行态”
非运行态 包含 阻塞状态、挂起状态 和 就绪状态。
如果在一个任务运行结束时,所有任务都处于 就绪状态,那只有优先级最高的任务能运行。所以加入阻塞状态。
void vTaskDelay( portTickType xTicksToDelay );
xTicksToDelay ——延迟多少个心跳周期。调用该延迟函数的任务将进入阻塞态,经延迟指定的心跳周期数后,再转移到就绪态。举个例子,当某个任务调用vTaskDelay( 100 )时,心跳计数值为10,000,则该任务将保持在阻塞态,直到心跳计数计到10,100。常数portTICK_RATE_MS 可以用来将以毫秒为单位的时间值转换为以心跳周期为单位的时间值。
void vTaskDelayUntil( portTickType * pxPreviousWakeTime, portTickType xTimeIncrement );
设定周期运行绝对时间,用来让任务周期运行的更精确,比使用 vTaskDelay 延迟精确。
任务分为 “运行态” 和 “非运行态”
非运行态 包含 阻塞状态、挂起状态 和 就绪状态。
如果在一个任务运行结束时,所有任务都处于 就绪状态,那只有优先级最高的任务能运行。所以加入阻塞状态。
void vTaskDelay( portTickType xTicksToDelay );
xTicksToDelay ——延迟多少个心跳周期。调用该延迟函数的任务将进入阻塞态,经延迟指定的心跳周期数后,再转移到就绪态。举个例子,当某个任务调用vTaskDelay( 100 )时,心跳计数值为10,000,则该任务将保持在阻塞态,直到心跳计数计到10,100。常数portTICK_RATE_MS 可以用来将以毫秒为单位的时间值转换为以心跳周期为单位的时间值。
void vTaskDelayUntil( portTickType * pxPreviousWakeTime, portTickType xTimeIncrement );
设定周期运行绝对时间,用来让任务周期运行的更精确,比使用 vTaskDelay 延迟精确。
相关文章推荐
- 学习笔记(八)对象的集合(二)
- 单链表的头插法与尾插法
- UISearchBar 点击取消回到原来位置时会跳动的解决方法
- Android广告的Activity收集
- QT中qlistwidget和qtableview用法
- Leetcode38 Count and Say
- Hive做数据仓库,对Hadoop Hive 的多用户的资源分配和权限管理 (Hortonworks HDP2.2 hadoop 2.6)
- 【mark】如何改变VC中控件间的TAB切换顺序
- Hduoj1030【数学】
- [ubuntu] 在vim中查找指定字符串和在ubuntu中查找指定文件
- 【原】取消ubuntu异常关机 重启后 停止在grub的解决方法
- HDU 1087 Super Jumping! Jumping! Jumping!
- Run time setting设置详解
- java环境配置
- c++ primer 学习笔记-第三章
- GCC 4.8编译程序抛出Error: no such instruction: `某某汇编指令`
- openfire内存问题解决方法汇总
- 关于三级指针
- 单调递增最长子序列
- H. 264 算法特点