首页 > 代码库 > RTX51 Tiny实时操作系统学习笔记—初识RTX51 Tiny
RTX51 Tiny实时操作系统学习笔记—初识RTX51 Tiny
一,RTX51 Tiny简介
RTX51 Tiny是一种实时操作系统(RTOS),可以用它来建立多个任务(函数)同时执行的应用(从宏观上看是同时执行的,但从微观上看,还是独立运行的)。嵌入式应用系统经常有这种需求。RTOS可以提供调度、维护、同步等功能。
实时操作系统能灵活的调度系统资源,像CPU和存储器,并且提供任务间的通信。RTX51 Tiny是一个功能强大的RTOS,且易于使用,它用于8051系列的微控制器。该RTOS最多支持16个任务,基于RTX51 Tiny构建的应用程序没有main( )函数,是从任务0开始执行的。
RTX51 Tiny的程序用标准的C语言构造,由Keil C51 C编译器编译。用户可以很容易的定义任务函数,而不需要进行复杂的栈和变量结构配置,只需包含一个指定的头文件(rtx51tny.h)。
RTX51 Tiny使用定时器0、定时器0中断,和寄存器组1。如果在程序中使用了定时器0,则RTX51 Tiny将不能正常运转。你可以在定时器0的中断服务程序后追加自己的定时器0中断服务程序代码(修改配置文件Conf_tny.A51)。
二,单任务、多任务和基于RTX51 Tiny程序的比较
单任务程序:
嵌入式程序和标准C程序都是从main函数开始执行的,在嵌入式应用中,main通常是一个无限循环,可以认为是一个持续执行的单个任务,例如:
void main(void)
{
while(1){
do_something( ); //一直循环执行do_something任务
}
}
多任务程序:
许多C程序通过在一个循环里调用服务函数(或任务)来实现伪多任务调度。如:
void main(void)
{
while(1){
key_scan( ); //键盘扫描
do_key( ); //处理按键事件
ctr_adj( ); //调整控制器
}
}
该例中,每个函数执行一个单独的操作或任务,函数(或任务)按次序依次执行。当任务越来越多,调度问题就被自然而然的提出来了。例如,如果ctr_adj( )函数执行时间较长,主循环就可能需要较长的时间才能返回来执行key_scan( )函数,导致遗漏部分按键事件。当然,可以在主循环中更频繁的调用key_scan( )函数以纠正这个问题,但最终这个方法还是会失效。
RTX51 Tiny程序:
当使用Rtx51Tiny时,为每个任务建立独立的任务函数,例如:
void job0(void) _task_ 0
{
os_create_task(1); //创建任务1
os_create_task(2); //创建任务2
os_create_task(3); //创建任务3
os_delete_task(0); //删除任务0
}
void job1(void) _task_ 1 //键盘扫描任务
{
while(1){
key_scan( );
}
}
void job2(void) _task_ 2 //处理按键事件任务
{
while(1){
do_key( );
}
}
void job3(void) _task_ 3 //调整控制器任务
{
while(1){
ctr_adj( );
}
}
该例中,每个函数定义为一个RTX51 Tiny任务。RTX51 Tiny程序不需要main函数,取而代之,RTX51 Tiny从任务0开始执行。在典型的应用中,任务0简单的建立所有其他的任务。
学习RTX51 Tiny的书籍比较少,其实最好的学习资料是Keil uVision中自带的用户手册,按下图所示方式可打开:
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。