原创 RTX51 Tiny 2.02 中文手册 part2

2009-7-24 16:55 4631 11 11 分类: MCU/ 嵌入式

第二章  实时程序<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


实时程序必须对实时发生的事件快速响应。事件很少的程序不用实时操作系统也很容易实现。随着事件的增加,编程的复杂程度和难度也随之增大,这正是RTOS的用武之地。


一、单任务程序


嵌入式程序和标准C程序都是从main函数开始执行的,在嵌入式应用中,main通常是一个无限循环,可以认为是一个持续执行的单个任务,例如:


void main (void)


while(1)           /*永远重复*/



do_something();  /*执行 do_something“任务”*/




在这个例子里,do_something函数可以认为是一个单任务,由于仅有一个任务在执行,所以没有必要进行多任务处理或使用多任务操作系统。


二、多任务程序


许多C程序通过在一个循环里调用服务函数(或任务)来实现伪多任务调度。如:


void main(void)



int counter="0";


while(1)                         /*一直重复执行*/



check_serial_io();              /*检查串行输入*/


process_serial_cmds() ;         /*处理串行输入*/


check_kbd_io();               /*检查键盘输入*/


process_kbd_cmds();           /*处理键盘输入*/


adjust|ctrlr_parms()          /*调整控制器*/


counter++;                   /*增加计数器*/




该例中,每个函数执行一个单独的操作或任务,函数(或任务)按次序依次执行。


当任务越来越多,调度问题就被自然而然的提出来了。例如,如果process_kbd_cmds函数执行时间较长,主循环就可能需要较长的时间才能返回来执行check_sericd_io函数,导致串行数据可能被丢失。当然,可以在主循环中更


频繁的调用check_serial_io函数以纠正这个问题,但最终这个方法还是会失效


三、RTX51 Tiny 程序


当使用Rtx51Tiny时,为每个任务建立独立的任务函数,例如:


void check_serial_io_task(void) _task_ 1


/*该任务检测串行I/0*/﹜


void process_serial_cmds_task(void) _task_ 2


/*该任务处理串行命令*/﹜


void check_kbd_io_task(void) _task_ 3


/*该任务检测键盘I/O*/﹜


void process_kbd_cmds_task(void) _task_ 4


/*处理键盘命令*/﹜


 


void startup-_task(void) _task_ 0



os_create_task(1);                 /*建立串行I/O任务*/


os_create_task(2);                 /*建立串行命令任务*/


os_create_task(3)               /*建立键盘I/O任务*/


os_create_task(4);                /*建立键盘命令任务*/


os_delete_task(0);                 /*删除启动任务*/



该例中,每个函数定义为一个RTX51 Tiny任务。RTX51 Tiny程序不需要main函数,取而代之,RTX51 Tiny从任务0开始执行。在典型的应用中,任务0简单的建立所有其他的任务。

文章评论0条评论)

登录后参与讨论
我要评论
0
11
关闭 站长推荐上一条 /2 下一条