登录 注册
当前位置:主页 > 资源下载 > 14 > \"任务优先级\"这一概念在ri5cy_user_manual中有详尽说明

\"任务优先级\"这一概念在ri5cy_user_manual中有详尽说明

  • 更新:2024-05-13 10:31:38
  • 大小:3.05MB
  • 推荐:★★★★★
  • 来源:网友上传分享
  • 类别:OS - 操作系统
  • 格式:PDF

资源介绍

1.5 任务优先级 xTaskCreate() API 函数的参数 uxPriority 为创建的任务赋予了一个初始优先级。这 个侁先级可以在调度器启动后调用 vTaskPrioritySet() API 函数进行修改。 应 用 程 序 在 文 件 FreeRTOSConfig.h 中 设 定 的 编 译 时 配 置 常 量 configMAX_PRIORITIES 的值,即是 多可具有的优先级数目。FreeRTOS 本身并没 有限定这个常量的 大值,但这个值越大,则内核花销的内存空间就越多。所以总是建 议将此常量设为能够用到的 小值。 对于如何为任务指定优先级,FreeRTOS 并没有强加任何限制。任意数量的任务可 以共享同一个优先级——以保证 大设计弹性。当然,如果需要的话,你也可以为每个 任务指定唯一的优先级(就如同某些调度算法的要求一样),但这不是强制要求的。 低优先级号表示任务的优先级低,优先级号 0 表示 低优先级。有效的优先级号范 围从 0 到(configMAX_PRIORITES – 1)。 调度器保证总是在所有可运行的任务中选择具有 高优先级的任务,并使其进入运 行态。如果被选中的优先级上具有不止一个任务,调度器会让这些任务轮流执行。这种 行为方式在之前的例子中可以明显看出来。两个测试任务被创建在同一个优先级上,并 且一直是可运行的。所以每个任务都执行一个”时间片”,任务在时间片起始时刻进入运 行态,在时间片结束时刻又退出运行态。图 3 中 t1 与 t2 之间的时段就等于一个时间片。 要能够选择下一个运行的任务,调度器需要在每个时间片的结束时刻运行自己本 身。一个称为心跳(tick,有些地方被称为时钟滴答,本文中一律称为时钟心跳)中断的 周期性中断用于此目的。时间片的长度通过心跳中断的频率进行设定,心跳中断频率由 FreeRTOSConfig.h 中的编译时配置常量 configTICK_RATE_HZ 进行配置。比如说, 如果 configTICK_RATE_HZ 设为 100(HZ),则时间片长度为 10ms。可以将图 3 进行 扩展,将调度器本身的执行时间在整个执行流程中体现出来。请参见图 4。 需要说明的是,FreeRTOS API 函数调用中指定的时间总是以心跳中断为单位(通 常的提法为心跳”ticks”)。常量 portTICK_RATE_MS 用于将以心跳为单位的时间值转化 为以毫秒为单位的时间值。有效精度依赖于系统心跳频率。 心跳计数(tick count)值表示的是从调度器启动开始,心跳中断的总数,并假定心跳