RTX51_Tiny_中文手册(全文下载)(2)

2019-03-28 13:25

? 如果希望使用运算单元,应禁止循环任务切换。

6、寄存器组

RTX51 Tiny分配所有的任务到寄存器0,因此,所有的函数必须用C51的默认设置

进行编译,REGISTERBANK(0)。

中断函数可以使用剩余的寄存器组。然而,RTX51 Tiny需要寄存器组区域中的6个永久性的字节,用于这些字节的寄存器组在配置文件中指定。 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=\

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简单的建立所有其他的任务。

RTX51 Tiny 2.02 中文手册 part3

第三章 原理

RTX51 Tiny 用于管理目标系统的资源,本章讨论RTX51 Tiny如何使用这些资源。 一、定时器滴答中断

RTX51 Tiny 用标准8051的定时器0(模式1)生产一个周期性的中断。该中断就是RTX51 Tiny的定时滴答(Timer Tick)。 库函数中的超时和时间间隔就是基于该定时滴答来测量的。

默认情况下,RTX51每10000个机器周期产生一个滴答中断,因此,对于运行于12MHZ的标准8051来说,滴答的周期是0.01秒,也即频率是100HZ(12MHz/12/10000)。该值可以在CONF_TNY.A51配置文件中修改。

附注:

?可以在RTX51的定时滴答中断里追加自己的代码。参见CONF_TNY.A51 配置

文件。

?关于RTX51 Tiny如何使用中断可以参考概述中中断一节的叙述。

二、任务

RTX51 Tiny本质上是一个任务切换器,建立一个RTX51 Tiny程序,就

是建立一个或多个任务函数的应用程序。下面的信息可以帮助你快速的理解

RTX51 。

?任务用新的关键字由C语言定义,该关键字是Keic C51 所支持的。 ?RTX51 Tiny维护每个任务的正确状态(运行、就绪、等待、删除、超时)。 ?某个时刻只有一个任务处于运行态。

?任务可能处于就绪态、等待态、删除态或超时态。

?空闲任务(Idle_Task)总是处于就绪态,当定义的所有任务处于阻 塞状态时,

运行该任务。

三、任务管理 每个RTX51 Tiny 任务总是处于下述状态中的一种状态中。 状 态 描 述 正在运行的任务处于运行态。某个时刻只能有一个任务处于该状态。 运 行 os_running_task_id 函数返回当前正在运行的任务编号。 准备运行的任务处于就绪态。一旦运行的任务完成了处理,RTX51 Tiny选择一个就绪就 绪 的任务执行。一个任务可以通过用os_set_ready或os_set_ready函数设置就绪标志来使其立即就绪(即便该任务正在等待超时或信号)。 正在等待一个事件的任务处于等待态。一旦事件发生,任务切换到就绪态。Os_wait函数等 待 用于将一个任务置为等待态。 没有被启动或已被删除的任务处于删除态。Os-delete-task函数将一个已经启动(用删 除 os_create_task)的任务置为删除态。 超 时 被超时循环中断的任务处于超时态,在循环任务程序中,该状态相当于就绪态。 四、事件

在实时操作系统中,事件可用于控制任务的执行,一个任务可能等待一个事件,也可能向其他任务发送任务标志。

os_wait函数可以使一个任务等待一个或多个事件。

?超时是一个任务可以等待的公共事件。超时就是一些时钟滴答数, 当一个任务等待超时时,其他任务可以执行。一旦到达指定数量的滴答数,任务就可以继续执行。

?时间间隔(Interval)是一个超时(Timeout)的变种。时间间隔与超 时类似,不同的是时间间隔是相对于任务上次调用os_wait函数的指定数量的时钟滴答数。

?信号是任务间通信的方式。一个任务可以等待其他任务给它发信号 (用os_send_signal和isr_send_signal函数)。

?每个任务都有一个可被其它任务设置的就绪标志(用os_set_ready和

isr_set_ready函数)。一个个等待超时、时间间隔或信号的任务可以通过设置它的就绪标志来启动。

?isr_set_ready函数)。一个等待超时、时间间隔或信号的任务可以通 过设置它的就绪标志来启动。

下表是os_wait函数等待的事件: K_IVL 隔K_SIG K_TMO 等待制定的时间 等待一个信号 等待指定的超时 os-wait返回时,返回值表明发生了的事件: 返 回 值 RDY_EVENT SIG_EVENT TMO_EVENT 意 义 任务的就绪标志被置位 收到一个信号 超时完成或时间间隔到达。 os_wait可以等待下面的事件组合: ?K_SIG︱K_TMO:任务延迟直到有信号发给它或者指定数量的时钟滴答


RTX51_Tiny_中文手册(全文下载)(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2016-2021年玉米秸秆回收机行业深度分析及“十三五”发展规划指

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: