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 ...
随机推荐
- 一个简单的knockout.js 和easyui的绑定
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Basi ...
- 用openssl生成SSL使用的私钥和证书,并自己做CA签名(转)
本 文记叙的是一次基于SSL的socket通讯程序开发中,有关证书,签名,身份验证相关的步骤. 我们的场景下,socket服务端是java语言编写的,客户端是c语言.使用了一个叫做matrixssl的 ...
- 腾讯云-NGINX搭建静态网站
搭建静态网站 搭建Http静态服务器环境 任务时间:15min ~ 30min 搭建静态网站,首先需要部署环境.下面的步骤,将告诉大家如何在服务器上通过 Nginx 部署 HTTP 静态服务. 00. ...
- [手把手教程][JavaWeb]优雅的SpringMvc+Mybatis整合之路
来源于:http://www.jianshu.com/p/5124eef40bf0 [手把手教程][JavaWeb]优雅的SpringMvc+Mybatis整合之路 手把手教你整合最优雅SSM框架:S ...
- Spring Framework Ecosystem – Introduction to Spring Projects
来自于:http://springtutorials.com/spring-ecosystem/ Hello and Welcome to Spring Tutorials Blog! Is it f ...
- MySQL-五种日志(查询日志、慢查询日志、更新日志、二进制日志、错误日志)、备份及主从复制配置
开启查询日志: 配置文件my.cnf: log=/usr/local/mysql/var/log.log 开启慢查询: 配置文件my.cnf: log-slow-queries=/usr/local/ ...
- iOS获取手机型号,Swift获取手机型号(类似iphone 7这种,检测机型具体型号)
获取手机设备信息,如name.model.version等, 但如果想获取具体的手机型号,如iphone5.5s这种,就需要如下这种(含Swift和OC两种写法) Swift建议添加到extensio ...
- eclipse修改文件编码
http://topic.csdn.net/u/20080724/14/428de399-790d-442a-8340-3a5fb6dcfcee.html[修改文件编码,假设JS] 在Eclips ...
- Http Analyzer Std V3.3.1.140 汉化补丁
http://www.cnblogs.com/nicch/archive/2008/08/30/ha_httpanalyzerstdv3.html Http Analyzer Std V3.3.1.1 ...
- 奇葩属性:layout_weight 的解释及使用
在Android的控件布局中,有一个奇葩的 layout_weight 属性,定义如下: layout_weight : 用于指定剩余空闲空间的分割比例.用法: 01 <LinearLayout ...