单片机/MCUwilliam hill官网
直播中

lee_st

12年用户 45163经验值
擅长:可编程逻辑 嵌入式技术 处理器/DSP RF/无线
私信 关注
[资料]

第8章 任务优先级修改

转rtx操作系统 本章节主要为大家讲解RTX任务优先级设置的注意事项,任务优先级的分配方案及其相关的一个例子,内容相对比较简单。
    本章教程配套的例子含Cortex-M3内核的STM32F103和Cortex-M4内核的STM32F407。
8.1 任务优先级设置注意事项
8.2 任务优先级分配方案
8.3 任务优先级设置
8.4 实验例程说明
8.5         总结

8.1  任务优先级设置注意事项

    RTX操作系统任务优先级的设置要注意以下几个问题:
u 设置任务的优先级时,数值越小优先级越低。
u 最低任务优先级是0,此优先级被空闲任务使用,任何其它任务都不可以使用。
u 用户可以设置的优先级范围是1-254,由于RTX支持时间片调度,所以也是支持用户任务设置为相同的优先级。
u 优先级255被保留,用于最重要的任务。

回帖(29)

尹会胜

2016-10-3 20:59:47
有点深奥,思路清晰!
举报

lee_st

2016-10-4 17:37:36
谢谢,,,,,,,,,
举报

lee_st

2016-10-4 17:39:06
RTX配置:
     RTX配置向导详情如下:

u  Task Configuration
l Number of concurrent running tasks
       允许创建4个任务,实际创建了如下四个任务
                     AppTaskUserIF任务   :按键消息处理。
                     AppTaskLED任务     :LED闪烁。
                     AppTaskMsgPro任务 :消息处理,这里是用作LED闪烁。
                     AppTaskStart任务    :启动任务,也是最高优先级任务,这里实现按键扫描。
l Number of tasks with user-provided stack
     创建的4个任务都是采用自定义堆栈方式。
举报

lee_st

2016-10-4 17:39:34
RTX任务调试信息:

举报

lee_st

2016-10-4 17:40:24
程序设计:
u  任务栈大小分配:
    staticuint64_t AppTaskUserIFStk[512/8];   /* 任务栈 */
    staticuint64_t AppTaskLEDStk[256/8];      /* 任务栈 */
    staticuint64_t AppTaskMsgProStk[512/8];  /* 任务栈 */
     staticuint64_t AppTaskStartStk[512/8];     /* 任务栈 */
      将任务栈定义成uint64_t类型可以保证任务栈是8字节对齐的,8字节对齐的含义就是数组的首地址对8求余等于0。如果不做8字节对齐的话,部分C语言库函数,浮点运算和uint64_t类型数据运算会出问题。
u  系统栈大小分配:

举报

lee_st

2016-10-4 17:40:34
RTX初始化:
复制代码
/*
*********************************************************************************************************
*    函 数 名: main
*    功能说明: 标准c程序入口。
*    形    参: 无
*    返 回 值: 无
*********************************************************************************************************
*/
int main (void)
{  
     /* 初始化外设 */
     bsp_Init();
   
     /* 创建启动任务 */
     os_sys_init_user (AppTaskStart,             /* 任务函数 */
                       4,                        /* 任务优先级 */
                       &AppTaskStartStk,         /* 任务栈 */
                       sizeof(AppTaskStartStk)); /* 任务栈大小,单位字节数 */
     while(1);
}
举报

lee_st

2016-10-4 17:40:52
RTX任务创建:
复制代码
/*
*********************************************************************************************************
*    函 数 名: AppTaskCreate
*    功能说明: 创建应用任务
*    形    参: 无
*    返 回 值: 无
*********************************************************************************************************
*/
static void AppTaskCreate (void)
{
     HandleTaskUserIF = os_tsk_create_user(AppTaskUserIF,             /* 任务函数 */
                                           1,                         /* 任务优先级 */
                                           &AppTaskUserIFStk,         /* 任务栈 */
                                           sizeof(AppTaskUserIFStk)); /* 任务栈大小,单位字节数 */
   
     HandleTaskLED = os_tsk_create_user(AppTaskLED,              /* 任务函数 */
                                        2,                       /* 任务优先级 */
                                        &AppTaskLEDStk,          /* 任务栈 */
                                        sizeof(AppTaskLEDStk));  /* 任务栈大小,单位字节数 */
   
     HandleTaskMsgPro = os_tsk_create_user(AppTaskMsgPro,             /* 任务函数 */
                                           3,                         /* 任务优先级 */
                                           &AppTaskMsgProStk,         /* 任务栈 */
                                           sizeof(AppTaskMsgProStk)); /* 任务栈大小,单位字节数 */
}
举报

lee_st

2016-10-4 17:41:03
受到警告
提示: 作者被禁止或删除 内容自动屏蔽
举报

lee_st

2016-10-4 17:41:15
8.5  总结

    本章节内容相对比较容易,重点是学习任务优先级分配方案,随着后面的学习,初学者需要慢慢积累这方面的经验。
举报

lee_st

2016-10-4 17:41:34
分享完成,,,,,,,,
举报

更多回帖

发帖
×
20
完善资料,
赚取积分