日志档案

发表于 2007-11-29 9:18:16

0

标签: RTOS  

RTX51 Tiny 2.02 中文手册 part2

第二章  实时程序

实时程序必须对实时发生的事件快速响应。事件很少的程序不用实时操作系统也很容易实现。随着事件的增加,编程的复杂程度和难度也随之增大,这正是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简单的建立所有其他的任务。

系统分类: 单片机   |   用户分类: RTOS   |   来源: 原创   |   【推荐给朋友】   |   【添加到收藏夹】

    阅读(708)    回复(0)  

投一票您将和博主都有获奖机会!