【RTX操作系统教程】第8章 任务优先级修改.pdf_第1页
【RTX操作系统教程】第8章 任务优先级修改.pdf_第2页
【RTX操作系统教程】第8章 任务优先级修改.pdf_第3页
【RTX操作系统教程】第8章 任务优先级修改.pdf_第4页
【RTX操作系统教程】第8章 任务优先级修改.pdf_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

武武汉汉安安富富莱莱电电子子有有限限公公司司 W W W WW W W WW W W W A A A AR R R RM M M MF F F FL L L LY Y Y Y C C C CO O O OM M M M 安安富富莱莱 S ST TM M3 32 2 V V4 4 开开发 发板板 R RT TX X 教教程程 2 20 01 15 5年年1 12 2月月1 10 0日日 版版本本 1 1 0 0 第第 1 1 页页 共共 1 16 6 页页 第第8 8章章 任任务务优优先先级级修修改改 本章节主要为大家讲解 RTX 任务优先级设置的注意事项 任务优先级的分配方案及其相关的一个例子 内容相对比较简单 本章教程配套的例子含 Cortex M3 内核的 STM32F103 和 Cortex M4 内核的 STM32F407 8 1 任务优先级设置注意事项 8 2 任务优先级分配方案 8 3 任务优先级设置 8 4 实验例程说明 8 5 总结 8 8 1 1 任任务务优优先先级级设设置置注注意意事事项项 RTX 操作系统任务优先级的设置要注意以下几个问题 设置任务的优先级时 数值越小优先级越低 最低任务优先级是 0 此优先级被空闲任务使用 任何其它任务都不可以使用 用户可以设置的优先级范围是 1 254 由于 RTX 支持时间片调度 所以也是支持用户任务设置为相 同的优先级 优先级 255 被保留 用于最重要的任务 8 8 2 2 任任务务优优先先级级分分配配方方案案 对于初学者 有时候会纠结任务优先级设置为多少合适 因为任务优先级设置多少是没有标准的 对 于这个问题 RTX 有一个推荐的设置标准 任务优先级设置推荐方式如下图 8 1 所示 武武汉汉安安富富莱莱电电子子有有限限公公司司 W W W WW W W WW W W W A A A AR R R RM M M MF F F FL L L LY Y Y Y C C C CO O O OM M M M 安安富富莱莱 S ST TM M3 32 2 V V4 4 开开发 发板板 R RT TX X 教教程程 2 20 01 15 5年年1 12 2月月1 10 0日日 版版本本 1 1 0 0 第第 2 2 页页 共共 1 16 6 页页 图 8 1 任务优先级分配方案 IRQ 任务 IRQ 任务是指通过中断服务程序进行触发的任务 此类任务应该设置为所有任务里面优先 级最高的 高优先级后台任务 比如按键检测 触摸检测 USB 消息处理 串口消息处理等 都可以归为这一类 任务 低优先级的时间片调度任务 比如 emWin 的界面显示 LED 数码管的显示等不需要实时执行的都可 以归为这一类任务 实际应用中用户不必拘泥于将这些任务都设置为优先级 1 的同优先级任务 可以 设置多个优先级 只需注意这类任务不需要高实时性 空闲任务 空闲任务是系统任务 特别注意 IRQ 任务和高优先级任务必须设置为阻塞式 调用消息等待或者延迟等函数即可 只有 这样高优先级任务才会释放 CPU 的使用权 从低优先级任务才有机会得到执行 这里的优先级分配方案是 RTX 操作系统推荐的一种方式 实际项目也可以不采用这种方法 调试出适 合项目需求的才是最好的 8 8 3 3 任任务务优优先先级级设设置置 除了创建任务时可以设置任务优先级 也可以通过下面两个函数修改任务优先级 os tsk prio os tsk prio self 关于这两个函数的讲解及其使用方法可以看教程第 3 章 3 3 小节里面说的参考资料 rlarm chm 文件 必须是必须是 阻塞阻塞式式的的 IRQ 任务 高优先级后台任务 低优先级的时间片调 度任务 空闲任务 0 1 任务优先级任务优先级 武武汉汉安安富富莱莱电电子子有有限限公公司司 W W W WW W W WW W W W A A A AR R R RM M M MF F F FL L L LY Y Y Y C C C CO O O OM M M M 安安富富莱莱 S ST TM M3 32 2 V V4 4 开开发 发板板 R RT TX X 教教程程 2 20 01 15 5年年1 12 2月月1 10 0日日 版版本本 1 1 0 0 第第 3 3 页页 共共 1 16 6 页页 这里重点的说一下函数 os tsk prio 函数原型 OS RESULT os tsk prio OS TID task id 任务 ID U8 new prio 新的任务优先级 1 254 函数描述 函数 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 被保留用于最重要的任务 武武汉汉安安富富莱莱电电子子有有限限公公司司 W W W WW W W WW W W W A A A AR R R RM M M MF F F FL L L LY Y Y Y C C C CO O O OM M M M 安安富富莱莱 S ST TM M3 32 2 V V4 4 开开发 发板板 R RT TX X 教教程程 2 20 01 15 5年年1 12 2月月1 10 0日日 版版本本 1 1 0 0 第第 4 4 页页 共共 1 16 6 页页 4 对于 RTX 操作系统来说 优先级参数中数值越小优先级越低 也就是说空闲任务的优先级是最低的 因为它的优先级数值是 0 使用举例 变量 static uint64 t AppTaskUserIFStk 512 8 任务栈 任务句柄 OS TID HandleTaskUserIF NULL 函 数 名 AppTaskChangePrio 功能说明 修改任务优先级 形 参 无 返 回 值 无 static void AppTaskDelete void HandleTaskUserIF os tsk create user AppTaskUserIF 任务函数 1 任务优先级 任务栈大小 单位字节数 if os tsk prio HandleTaskLED 3 OS R OK printf 任务 AppTaskLED 优先级修改成功 r n else printf 任务 AppTaskLED 优先级修改失败 r n 8 8 4 4 实实验验例例程程说说明明 8 4 1 STM32F103 开发板实验 配套例子 V4 403 RTX 实验 任务优先级修改 实验目的 1 学习 RTX 的任务优先级修改 实验内容 1 K1 按键按下 串口打印 武武汉汉安安富富莱莱电电子子有有限限公公司司 W W W WW W W WW W W W A A A AR R R RM M M MF F F FL L L LY Y Y Y C C C CO O O OM M M M 安安富富莱莱 S ST TM M3 32 2 V V4 4 开开发 发板板 R RT TX X 教教程程 2 20 01 15 5年年1 12 2月月1 10 0日日 版版本本 1 1 0 0 第第 5 5 页页 共共 1 16 6 页页 2 K2 按键按下 将任务 AppTaskLED 的优先级由 2 修改为 3 3 k3 按键按下 将任务 AppTaskLED 的优先级由 3 修改为 2 4 各个任务实现的功能如下 AppTaskUserIF 任务 按键消息处理 AppTaskLED 任务 LED 闪烁 AppTaskMsgPro 任务 消息处理 这里是用作 LED 闪烁 AppTaskStart 任务 启动任务 也是最高优先级任务 这里实现按键扫描 RTX 配置 RTX 配置向导详情如下 Task Configuration Number of concurrent running tasks 允许创建 4 个任务 实际创建了如下四个任务 AppTaskUserIF 任务 按键消息处理 AppTaskLED 任务 LED 闪烁 AppTaskMsgPro 任务 消息处理 这里是用作 LED 闪烁 AppTaskStart 任务 启动任务 也是最高优先级任务 这里实现按键扫描 武武汉汉安安富富莱莱电电子子有有限限公公司司 W W W WW W W WW W W W A A A AR R R RM M M MF F F FL L L LY Y Y Y C C C CO O O OM M M M 安安富富莱莱 S ST TM M3 32 2 V V4 4 开开发 发板板 R RT TX X 教教程程 2 20 01 15 5年年1 12 2月月1 10 0日日 版版本本 1 1 0 0 第第 6 6 页页 共共 1 16 6 页页 Number of tasks with user provided stack 创建的 4 个任务都是采用自定义堆栈方式 RTX 任务调试信息 程序设计 任务栈大小分配 static uint64 t AppTaskUserIFStk 512 8 任务栈 static uint64 t AppTaskLEDStk 256 8 任务栈 static uint64 t AppTaskMsgProStk 512 8 任务栈 static uint64 t AppTaskStartStk 512 8 任务栈 将任务栈定义成 uint64 t 类型可以保证任务栈是 8 字节对齐的 8 字节对齐的含义就是数组的首地址 对 8 求余等于 0 如果不做 8 字节对齐的话 部分 C 语言库函数 浮点运算和 uint64 t 类型数据运 算会出问题 系统栈大小分配 武武汉汉安安富富莱莱电电子子有有限限公公司司 W W W WW W W WW W W W A A A AR R R RM M M MF F F FL L L LY Y Y Y C C C CO O O OM M M M 安安富富莱莱 S ST TM M3 32 2 V V4 4 开开发 发板板 R RT TX X 教教程程 2 20 01 15 5年年1 12 2月月1 10 0日日 版版本本 1 1 0 0 第第 7 7 页页 共共 1 16 6 页页 RTX 初始化 函 数 名 main 功能说明 标准 c 程序入口 形 参 无 返 回 值 无 int main void 初始化外设 bsp Init 创建启动任务 os sys init user AppTaskStart 任务函数 4 任务优先级 任务栈大小 单位字节数 while 1 RTX 任务创建 函 数 名 AppTaskCreate 功能说明 创建应用任务 形 参 无 返 回 值 无 static void AppTaskCreate void HandleTaskUserIF os tsk create user AppTaskUserIF 任务函数 1 任务优先级 任务栈大小 单位字节数 武武汉汉安安富富莱莱电电子子有有限限公公司司 W W W WW W W WW W W W A A A AR R R RM M M MF F F FL L L LY Y Y Y C C C CO O O OM M M M 安安富富莱莱 S ST TM M3 32 2 V V4 4 开开发 发板板 R RT TX X 教教程程 2 20 01 15 5年年1 12 2月月1 10 0日日 版版本本 1 1 0 0 第第 8 8 页页 共共 1 16 6 页页 HandleTaskLED os tsk create user AppTaskLED 任务函数 2 任务优先级 任务栈大小 单位字节数 HandleTaskMsgPro os tsk create user AppTaskMsgPro 任务函数 3 任务优先级 任务栈大小 单位字节数 四个 RTX 任务的实现 函 数 名 AppTaskUserIF 功能说明 按键消息处理 形 参 无 返 回 值 无 优 先 级 1 数值越小优先级越低 这个跟 uCOS 相反 task void AppTaskUserIF void uint8 t ucKeyCode while 1 ucKeyCode bsp GetKey if ucKeyCode KEY NONE switch ucKeyCode K1 键按下 打印调试说明 case KEY DOWN K1 printf K1 键按下 使用 MDK 中自带的 RTX 调试组件 请务必使用 MDK4 74 版本进行调试 r n break K2 键按下 修改任务 AppTaskLED 优先级 case KEY DOWN K2 printf K2 键按下 将任务 AppTaskLED 的优先级由 2 修改为 3 r n if os tsk prio HandleTaskLED 3 OS R OK printf 任务 AppTaskLED 优先级修改成功 r n else printf 任务 AppTaskLED 优先级修改失败 r n break K3 键按下 修改任务 AppTaskLED 优先级 case KEY DOWN K3 printf K3 键按下 将任务 AppTaskLED 的优先级由 3 修改为 2 r n if os tsk prio HandleTaskLED 2 OS R OK printf 任务 AppTaskLED 优先级修改成功 r n 武武汉汉安安富富莱莱电电子子有有限限公公司司 W W W WW W W WW W W W A A A AR R R RM M M MF F F FL L L LY Y Y Y C C C CO O O OM M M M 安安富富莱莱 S ST TM M3 32 2 V V4 4 开开发 发板板 R RT TX X 教教程程 2 20 01 15 5年年1 12 2月月1 10 0日日 版版本本 1 1 0 0 第第 9 9 页页 共共 1 16 6 页页 else printf 任务 AppTaskLED 优先级修改失败 r n break 其他的键值不处理 default break os dly wait 20 函 数 名 AppTaskLED 功能说明 LED 闪烁 形 参 无 返 回 值 无 优 先 级 2 task void AppTaskLED void while 1 bsp LedToggle 2 bsp LedToggle 3 os dly wait 200 函 数 名 AppTaskMsgPro 功能说明 信息处理 这里是用作 LED 闪烁 形 参 无 返 回 值 无 优 先 级 3 task void AppTaskMsgPro void while 1 bsp LedToggle 1 bsp LedToggle 4 os dly wait 300 函 数 名 AppTaskStart 武武汉汉安安富富莱莱电电子子有有限限公公司司 W W W WW W W WW W W W A A A AR R R RM M M MF F F FL L L LY Y Y Y C C C CO O O OM M M M 安安富富莱莱 S ST TM M3 32 2 V V4 4 开开发 发板板 R RT TX X 教教程程 2 20 01 15 5年年1 12 2月月1 10 0日日 版版本本 1 1 0 0 第第 1 10 0 页页 共共 1 16 6 页页 功能说明 启动任务 也就是最高优先级任务 形 参 无 返 回 值 无 优 先 级 4 task void AppTaskStart void AppTaskCreate while 1 按键扫描 bsp KeyScan os dly wait 10 8 4 2 STM32F407 开发板实验 配套例子 V5 403 RTX 实验 任务优先级修改 实验目的 1 学习 RTX 的任务优先级修改 实验内容 1 K1 按键按下 串口打印 2 K2 按键按下 将任务 AppTaskLED 的优先级由 2 修改为 3 3 k3 按键按下 将任务 AppTaskLED 的优先级由 3 修改为 2 4 各个任务实现的功能如下 AppTaskUserIF 任务 按键消息处理 AppTaskLED 任务 LED 闪烁 AppTaskMsgPro 任务 消息处理 这里是用作 LED 闪烁 AppTaskStart 任务 启动任务 也是最高优先级任务 这里实现按键扫描 RTX 配置 RTX 配置向导详情如下 武武汉汉安安富富莱莱电电子子有有限限公公司司 W W W WW W W WW W W W A A A AR R R RM M M MF F F FL L L LY Y Y Y C C C CO O O OM M M M 安安富富莱莱 S ST TM M3 32 2 V V4 4 开开发 发板板 R RT TX X 教教程程 2 20 01 15 5年年1 12 2月月1 10 0日日 版版本本 1 1 0 0 第第 1 11 1 页页 共共 1 16 6 页页 Task Configuration Number of concurrent running tasks 允许创建 4 个任务 实际创建了如下四个任务 AppTaskUserIF 任务 按键消息处理 AppTaskLED 任务 LED 闪烁 AppTaskMsgPro 任务 消息处理 这里是用作 LED 闪烁 AppTaskStart 任务 启动任务 也是最高优先级任务 这里实现按键扫描 Number of tasks with user provided stack 创建的 4 个任务都是采用自定义堆栈方式 RTX 任务调试信息 武武汉汉安安富富莱莱电电子子有有限限公公司司 W W W WW W W WW W W W A A A AR R R RM M M MF F F FL L L LY Y Y Y C C C CO O O OM M M M 安安富富莱莱 S ST TM M3 32 2 V V4 4 开开发 发板板 R RT TX X 教教程程 2 20 01 15 5年年1 12 2月月1 10 0日日 版版本本 1 1 0 0 第第 1 12 2 页页 共共 1 16 6 页页 程序设计 任务栈大小分配 static uint64 t AppTaskUserIFStk 512 8 任务栈 static uint64 t AppTaskLEDStk 256 8 任务栈 static uint64 t AppTaskMsgProStk 512 8 任务栈 static uint64 t AppTaskStartStk 512 8 任务栈 将任务栈定义成 uint64 t 类型可以保证任务栈是 8 字节对齐的 8 字节对齐的含义就是数组的首地址 对 8 求余等于 0 如果不做 8 字节对齐的话 部分 C 语言库函数 浮点运算和 uint64 t 类型数据运 算会出问题 系统栈大小分配 武武汉汉安安富富莱莱电电子子有有限限公公司司 W W W WW W W WW W W W A A A AR R R RM M M MF F F FL L L LY Y Y Y C C C CO O O OM M M M 安安富富莱莱 S ST TM M3 32 2 V V4 4 开开发 发板板 R RT TX X 教教程程 2 20 01 15 5年年1 12 2月月1 10 0日日 版版本本 1 1 0 0 第第 1 13 3 页页 共共 1 16 6 页页 RTX 初始化 函 数 名 main 功能说明 标准 c 程序入口 形 参 无 返 回 值 无 int main void 初始化外设 bsp Init 创建启动任务 os sys init user AppTaskStart 任务函数 4 任务优先级 任务栈大小 单位字节数 while 1 RTX 任务创建 函 数 名 AppTaskCreate 功能说明 创建应用任务 形 参 无 返 回 值 无 static void AppTaskCreate void HandleTaskUserIF os tsk create user AppTaskUserIF 任务函数 1 任务优先级 任务栈大小 单位字节数 武武汉汉安安富富莱莱电电子子有有限限公公司司 W W W WW W W WW W W W A A A AR R R RM M M MF F F FL L L LY Y Y Y C C C CO O O OM M M M 安安富富莱莱 S ST TM M3 32 2 V V4 4 开开发 发板板 R RT TX X 教教程程 2 20 01 15 5年年1 12 2月月1 10 0日日 版版本本 1 1 0 0 第第 1 14 4 页页 共共 1 16 6 页页 HandleTaskLED os tsk create user AppTaskLED 任务函数 2 任务优先级 任务栈大小 单位字节数 HandleTaskMsgPro os tsk create user AppTaskMsgPro 任务函数 3 任务优先级 任务栈大小 单位字节数 四个 RTX 任务的实现 函 数 名 AppTaskUserIF 功能说明 按键消息处理 形 参 无 返 回 值 无 优 先 级 1 数值越小优先级越低 这个跟 uCOS 相反 task void AppTaskUserIF void uint8 t ucKeyCode while 1 ucKeyCode bsp GetKey if ucKeyCode KEY NONE switch ucKeyCode K1 键按下 打印调试说明 case KEY DOWN K1 printf K1 键按下 使用 MDK 中自带的 RTX 调试组件 请务必使用 MDK4 74 版本进行调试 r n break K2 键按下 修改任务 AppTaskLED 优先级 case KEY DOWN K2 printf K2 键按下 将任务 AppTaskLED 的优先级由 2 修改为 3 r n if os tsk prio HandleTaskLED 3 OS R OK printf 任务 AppTaskLED 优先级修改成功 r n else printf 任务 AppTaskLED 优先级修改失败 r n break K3 键按下 修改任务 AppTaskLED 优先级 case KEY DOWN K3 printf K3 键按下 将任务 AppTaskLED 的优先级由 3 修改为 2 r n if os tsk prio HandleTask

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论