RTX——第8章 任务优先级修改
以下内容转载自安富莱电子: http://forum.armfly.com/forum.php
任务优先级设置注意事项
RTX 操作系统任务优先级的设置要注意以下几个问题:
设置任务的优先级时,数值越小优先级越低。
最低任务优先级是 0,此优先级被空闲任务使用,任何其它任务都不可以使用。
用户可以设置的优先级范围是 1-254,由于 RTX 支持时间片调度,所以也是支持用户任务设置为相同的优先级。
优先级 255 被保留,用于最重要的任务。
任务优先级设置
除了创建任务时可以设置任务优先级,也可以通过下面两个函数修改任务优先级:
os_tsk_prio
os_tsk_prio_self


函数描述:
函数 os_tsk_prio 用于修改任务的优先级。
第 1 个参数填任务的 ID。如果 ID 参数是 0,那么设置就是当前任务的优先级。
第 2 个参数修改任务的优先级,如果 new_prio 的数值比当前执行任务的优先级大,将触发一次任
务切换,切换到任务 ID 为 task_id 的任务中。 如果 new_pro 的数值比当前执行任务的优先级小,
当前任务会继续执行。
如果任务优先级修改成功,函数返回 OS_R_OK,其余所有情况返回 OS_R_NOK,比如所写的任务
ID 不存在或者任务还没有启动。
使用这个函数要注意以下几个问题
1. 参数 new_prio 的范围是 1-254。
2. 被修改任务的新优先级会一直保持有效直到用户再次修改。
3. 优先级 0 用于空闲任务,如果用户将这个参数设置为 0 的话,RTX 系统会将其更改为 1。 优先级 255
被保留用于最重要的任务。
4. 对于 RTX 操作系统来说,优先级参数中数值越小优先级越低,也就是说空闲任务的优先级是最低的,
因为它的优先级数值是 0
代码操练场:
实验效果就是,创建任务1,优先级1,任务2,优先级2,并且两个任务都不调用能引起阻塞的函数,这样程序一直卡死在任务2中,此时,我们再行测试,再任务二中增加修改任务1优先级的函数,让任务1优先级高于任务2,这样可以看到任务1运行,任务2被一直“饿死”。
__task void AppTaskStart(void)
{
AppTaskCreate(); while()
{
os_tsk_prio(HandleTaskLED, );
// macBeep_TOGGLE();
// os_dly_wait(500);
}
}
/* 创建启动任务 */
os_sys_init_user (AppTaskStart, /* 任务函数 */
, /* 任务优先级 */
&AppTaskStartStk, /* 任务栈 */
sizeof(AppTaskStartStk)); /* 任务栈大小,单位字节数 */ HandleTaskLED = os_tsk_create_user(AppTaskLED, /* 任务函数 */
, /* 任务优先级 */
&AppTaskLEDStk, /* 任务栈 */
sizeof(AppTaskLEDStk)); /* 任务栈大小,单位字节数 */
__task void AppTaskLED(void)
{
while()
{
macLED3_TOGGLE() ;
//os_dly_wait(200); }
}
RTX——第8章 任务优先级修改的更多相关文章
- RTX——第10章 任务调度-抢占式、时间片和合作式
以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 本章教程为大家将介绍 RTX 操作系统支持的任务调度方式,抢占式,时间片和合作式,这部分算是RTX 操作 ...
- RTX——第19章 SVC 中断方式调用用户函数(后期补历程)
以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 本章节为大家讲解如何采用 SVC 中断方式调用用户函数. 当用户将 RTX 任务设置为工作在非特权级模式 ...
- RTX——第16章 消息邮箱
以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 前面几个章节主要给大家讲解了任务间的同步和资源共享机制,本章节为大家讲解任务间的通信机制消息邮箱,RTX ...
- RTX——第14章 信号量
以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 本章节开始讲解 RTX 的另一个重要的任务间的同步和资源共享机制,信号量. 信号量有3种用途: 1) 表 ...
- RTX——第13章 事件标志组
以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 前面的章节我们已经讲解了任务管理和时间管理,从本章节开始讲解任务间的通信和同步机制.首先讲解任务间的通信 ...
- RTX——第11章 临界段,任务锁和中断锁
以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 临界段代码的临界段也称为临界区,一旦这部分代码开始执行,则不允许任何中断打断.为确保临界段代码的执行不被 ...
- RTX——第9章 任务运行在特权级或非特权级模式
以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 本章教程为大家讲解 RTX 运行模式的一个重要知识点,特权级模式和非特权级模式,有些资料或者书籍将非特权 ...
- RTX——第18章 内存管理
以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 内存管理介绍在 ANSI C 中,可以用 malloc()和 free()2 个函数动态的分配内存和释放 ...
- RTX——第15章 互斥信号量
以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 本章节开始讲解 RTX 的另一个重要的资源共享机制---互斥信号量(Mutex,即 Mutual Exc ...
随机推荐
- 网站Web性能测试:ApacheBench,Webbench,http_load使用教程
网站Web性能测试:ApacheBench,Webbench,http_load使用教程 Web服务器 欲思 10个月前 (05-25) 0评论 一个网站或者博客到底能够承受多大的用户访问量经常是 ...
- 转:变手把手教你玩转SOCKET模型之重叠I/O篇
手把手教你玩转SOCKET模型之重叠I/O篇 “身为一个初学者,时常能体味到初学者入门的艰辛,所以总是想抽空作点什么来尽我所能的帮助那些需要帮助的人.我也希望大家能把自己的所学和他人一起分享,不要去鄙 ...
- Maven学习笔记(二) :Maven的安装与配置
在Windows上安装Maven: 1. 首先检查安装JDK 通过命令行运行命令:echo %JAVA_HOME%和 java -version,能够查看当前java的安装文件夹及java的 ...
- 【mysql】Innodb三大特性之double write
1.doublewrite buffer(mysql官方的介绍) InnoDB uses a novel file flush technique called doublewrite. Before ...
- 使用springboot遇到的的异常
Unregistering JMX-exposed beans on shutdown <dependency> <groupId>org.springframework.bo ...
- 【LeetCode】48. Rotate Image (2 solutions)
Rotate Image You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees ...
- TortoiseSVN 清空已保存的用户信息
http://blog.csdn.net/zb358983019/article/details/72898231.如果使用的是安装版的SVN,则打开系统开始菜单中Tortoise下的Settings ...
- java程序员学习路线图 java程序员进阶路线
- 【Linux】Linux文件属性
既然说要了解Linux的文件属性,那么有个重要的也是常用的指令就必须要先介绍一下:就是『 ls 』这一个查看文件的命令!在以root的身份登入Linux之后,下达『 ls -al 』,结果如下所示: ...
- python matplotlib.pyplot画矩形图 以及plt.gca()
plt的Rectangle参数: 第一个参数是坐标(x,y),即矩形的画图的起点坐标,这个起点坐标不是一味地从左下角开始画,而是对应整个图中坐标原点,即(0,0). 第二个参数是矩形宽度 第三个坐标是 ...