【RTX51 Tiny入门】04_任务和调度器

文章目录

  • 01 - 任务
  • 02 - 调度器
  • 03 - 任务状态
  • 04 - 总结


01 - 任务

  RTX51 Tiny中被调度的单位称为任务,它拥有属于自己的资源,能够相对独立地运行,在代码上表现为带关键字_task_和对应数字ID的一个无参数、无返回值的死循环函数,如下:

void Task_Name(void) _task_ 0
{
	while(1) {
	// do something
	}
}

  以上表示0号任务,RTX51 Tiny的任务数量最多为16,编号0~15,规定第一个执行的任务编号为0,相当于main函数,要注意:任务一定是无参数、无返回值和不能返回的,如果任务只执行一次,那么可以不是一个死循环函数,但最后必须用os_delete_task()删除任务(一般是0号任务,负责创建其它任务后就删除自己),换言之,任务一定不能返回


02 - 调度器

  RTX51 Tiny本质上是一个任务切换器,单核运行的RTOS一个重要特征是任务并行执行,在某个时刻只有一个任务在执行,执行完毕后选择下一个,调度器就是决策哪一个任务可以运行的角色。RTX51 Tiny的调度器具有2种任务调度方式:协助调度和时间片调度,它们的区别如下:

协助调度 时间片调度
任务切换主导权 任务自身 调度器和任务自身
任务切换过程 需要当前运行任务主动放弃CPU,其它任务才能得到运行 在时间片内可以自主放弃CPU,否则任务一直运行直到时间片耗尽,调度器切换任务
开启方法 Conf_tny.A51配置文件中设定TIMESHARING为0 Conf_tny.A51配置文件中设定TIMESHARING大于0
任务状态 running、ready、waiting、delete running、ready、waiting、delete、timeout

03 - 任务状态

  存在调度器后,任务就有状态之分,RTX51 Tiny的任务状态比较简单,但是选择不同的调度方式,任务状态会有相应的增删:

  • 选择时间片调度下有就绪态(ready)-运行态(running)-阻塞态(waiting)-超时态(timeout)-死亡态(delete)
  • 选择协助调度后,任务就没有了超时态(timeout)

  不同调度方式下的状态之间的转换关系如下

【RTX51 Tiny入门】04_任务和调度器_第1张图片

【RTX51 Tiny入门】04_任务和调度器_第2张图片

  状态转换类似一个状态机。8051及相关系列的单片机内存有限,于是RTX51 Tiny的任务状态也不能太复杂,除了官网提供的Tasks Management外,还可以知晓RTX51 Tiny任务状态的地方就是源码,RTX51 Tiny是开源的,下载正版Keil后就可以得到源码,不过正版Keil需要购买版权才能使用,随后开发人员可以根据需要进行修改


04 - 总结

  • RTX51 Tiny本质上是一个任务切换器
  • 任务一定是无参数、无返回值函数,如果任务只执行一次,可以不是死循环(最后要delete),否则一定是死循环函数
  • 时间片调度算法下任务有:就绪态、运行态、阻塞态、死亡态、超时态
  • 协助调度算法下任务有:就绪态、运行态、阻塞态、死亡态

你可能感兴趣的:(#,RTX51,Tiny)