• 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(1)
        {
                    os_tsk_prio(HandleTaskLED, 5);
    //                macBeep_TOGGLE(); 
          //  os_dly_wait(500);
        }
    }
    /* 创建启动任务 */
     os_sys_init_user (AppTaskStart,             /* 任务函数 */
                          4,                        /* 任务优先级 */
                          &AppTaskStartStk,         /* 任务栈 */
                          sizeof(AppTaskStartStk)); /* 任务栈大小,单位字节数 */
    
    
    
    
    
    HandleTaskLED = os_tsk_create_user(AppTaskLED,              /* 任务函数 */ 
                                           2,                       /* 任务优先级 */ 
                                           &AppTaskLEDStk,          /* 任务栈 */
                                           sizeof(AppTaskLEDStk));  /* 任务栈大小,单位字节数 */
    __task void AppTaskLED(void)
    {
        while(1)
        {
               macLED3_TOGGLE() ;
                    //os_dly_wait(200);
    
        }
    }
  • 相关阅读:
    可遇不可求的Question之过滤单词字符的正则表达式\w的疑义
    可遇不可求的Question之DBNull.Value.ToString()
    可遇不可求的Question之MYSQL的10060和10061错误篇
    可遇不可求的Question之正在中止线程异常
    可遇不可求的Question之类型初始值设定项引发异常篇
    可遇不可求的Question之调用的目标发生了异常篇
    可遇不可求的Question之要复制的 LOB 数据的长度超出了配置的最大值篇
    熱海へ
    CC的留言
    研发才是硬道理钢铁侠的评论(摘自豆瓣)
  • 原文地址:https://www.cnblogs.com/yangguang-it/p/7327873.html
Copyright © 2020-2023  润新知