以下内容转载自安富莱电子: 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章 任务优先级修改的更多相关文章

  1. RTX——第10章 任务调度-抢占式、时间片和合作式

    以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 本章教程为大家将介绍 RTX 操作系统支持的任务调度方式,抢占式,时间片和合作式,这部分算是RTX 操作 ...

  2. RTX——第19章 SVC 中断方式调用用户函数(后期补历程)

    以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 本章节为大家讲解如何采用 SVC 中断方式调用用户函数. 当用户将 RTX 任务设置为工作在非特权级模式 ...

  3. RTX——第16章 消息邮箱

    以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 前面几个章节主要给大家讲解了任务间的同步和资源共享机制,本章节为大家讲解任务间的通信机制消息邮箱,RTX ...

  4. RTX——第14章 信号量

    以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 本章节开始讲解 RTX 的另一个重要的任务间的同步和资源共享机制,信号量. 信号量有3种用途: 1) 表 ...

  5. RTX——第13章 事件标志组

    以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 前面的章节我们已经讲解了任务管理和时间管理,从本章节开始讲解任务间的通信和同步机制.首先讲解任务间的通信 ...

  6. RTX——第11章 临界段,任务锁和中断锁

    以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 临界段代码的临界段也称为临界区,一旦这部分代码开始执行,则不允许任何中断打断.为确保临界段代码的执行不被 ...

  7. RTX——第9章 任务运行在特权级或非特权级模式

    以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 本章教程为大家讲解 RTX 运行模式的一个重要知识点,特权级模式和非特权级模式,有些资料或者书籍将非特权 ...

  8. RTX——第18章 内存管理

    以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 内存管理介绍在 ANSI C 中,可以用 malloc()和 free()2 个函数动态的分配内存和释放 ...

  9. RTX——第15章 互斥信号量

    以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 本章节开始讲解 RTX 的另一个重要的资源共享机制---互斥信号量(Mutex,即 Mutual Exc ...

随机推荐

  1. 〖Android〗/system/etc/event-log-tags

    一博客中,一段的注释的解释:[From: http://blog.csdn.net/hustpzb/article/details/8525324] /** * Access to the syste ...

  2. jQuery仿天猫完美加入购物车

    转载自:http://www.iteye.com/topic/1138064 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transiti ...

  3. 27、ArrayList和LinkedList的区别

    在Java的List类型集合中,ArrayList和LinkedList大概是最常用到的2个了,细看了一下它们的实现,发现区别还是很大的,这里简单的列一下个人比较关心的区别. 类声明 ArrayLis ...

  4. java 关于操作Collection的一点说明

    java 中有一个工具类 Collections 其中的一个方法 static <T> boolean replaceAll(List<T> list, T oldVal, T ...

  5. JProfiler 解决 Java 服务器的性能跟踪

    作者:徐建祥(netpirate@gmail.com) 时间: 2006/01/05 来自:http://www.anymobile.org 1.摘要......................... ...

  6. linux上传下载文件rz,sz

    [一般用于SecureCRT ssh中使用] █ 法一:直接用yum安装lrzsz(推荐) yum install lrzsz -y 注意:rhel安装完系统后 直接可使用 rz sz █ 法二:源文 ...

  7. springmvc异常统一处理

    http://www.cnblogs.com/xd502djj/archive/2012/09/24/2700490.html

  8. c:forEach标签

    //varStat代表 遍历typeListDesc集合所用到的方法 <!-- stat当前迭代的第几项 --> <c:forEach var="type" it ...

  9. MyBatis JdbcType 与Oracle、MySql数据类型对应关系详解

    本文转自:http://blog.csdn.net/loongshawn/article/details/50496460 1. Mybatis JdbcType与Oracle.MySql数据类型对应 ...

  10. HDUOJ----1166敌兵布阵(线段树单点更新)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...