没有合适的资源?快使用搜索试试~ 我知道了~
首页RTX51多任务操作系统中文使用指南
资源详情
资源评论
资源推荐

序言
本手册解释如何使用 rtx51小型实时操作系统并给出 rtx51完全版功能的概述 这
个手册并不是一本详细的实时应用的入门教程并且假定你已经熟悉了 Keil C51
A51 相关工具 DOS操作系统和8051微处理器的硬件和指令体系
建议使用下列书籍作为实时程序设计领域的入门教程
Deitel, H.M., Operating Systems, second edition,
Addison-Wesley Publishing Company, 1990
Ripps, David, A Guide to Real-Time Programming, Englewood Cliffs, N.J,
Prentice Hall, 1988/
Allworth, S.T., Introduction to Real-Time Software Design,
Springer-Verlag Inc., New York
本用户指南包含 部分
第 1 部分 概述
描述 rtx51实时操作系统的功能并给出RTX51 Tiny和 RTX51 Full
版本的基本特征和差异 同时包括 RTX51 Full 和 RTX51 Tiny. 的
技术数据
第 部分 系统需求和定义
讨论 RTX51 Tiny的开发工具和目标系统的需求 解释在 RTX51 Tiny
手册中使用的术语和任务定义的描述
第 部分 建立 RTX51 Tiny应用程序
描述建立 RTX51 Tiny应用程序的步骤
第 部分 库函数
提供全部 RTX51 Tiny库程序的索引
第 部分 系统调试
描述 RTX51 Tiny的堆栈管理还包括系统调试得有关信息
第 部分 应用程序例子
包括几个使用 RTX51 Tiny的例子和软件开发过程的描述 此信息可
以作为你的实时设计的指导原则
概述
.......................................................................................................... 7
入门 ............................................................................................................... 7
单任务程序.................................................................................................. 8
时间片轮转程序............................................................................................... 8
用 RTX51进行循环调度..................................................................... 8
RTX51事件 ........................................................................................................... 9
用 RTX51进行编译和连接 ....................................................................... 11
要求和定义
.............................................................. 15
开发工具需求............................................................................................................ 15
目标系统需求................................................................................................................... 15
中断处理 ................................................................................................... 15
可重入功能 ................................................................................................. 16
c51库函数 ............................................................................................. 16
多数据指针和数学单元的用法 ........................................... 16
寄存器段........................................................................................................... 17
任务定义 ....... 17
任务管理 ... 17
任务切换 ........................................................................................................ 18
事件 ...................................................................................................................... 18
建立
RTX51 TINY
应用程序
........................................................ 21
RTX51 Tiny Co 21

编译 RTX51 Tiny程序 .......................................................................................................... 23
连接 RTX51 Tiny程序 .............................................................................................................. 23
优化 RTX51 Tiny程序......................................................................................................... 23
RTX51 TINY系统函数
.................................................................. 25
函数调用 . 26
isr_send_signal.. 27
os_clear_signal.. 28
os_create_task....29
os_delete_task....30
os_running_task_id............................................................................................................................31
os_send_signal...32
os_wait...............34
os_wait1.............36
os_wait2.............37
系统调试
...................................................................................... 41
堆栈管理...41
用 dScope- 51调试......................................................................................................................41
应用程序例子
............................................................................... 45
RTX_EX1: 你的第一个RTX51程序.................................................................................................45
RTX_EX2: 一个简单的 RTX51应用程序 ...................................................................................47
TRAFFIC: 一个红绿灯控制器 ....................................................................................................49
红绿灯控制器命令 .........................................................................49
软件 ...................................................................................................................49
编译和连接TRAFFIC............................................................................62
测试并调试 TRAFFIC ...........................................................................62
符号约定
本手册使用下列约定
范例说明
Bold
: B L51采用 Bold字体 大写的文本用于可执行程序 数据文件 源文件 环境变量的名称和你在DOS命令提示窗口键
入的命令 这种文本通常表示你必须逐字地输入的命令
例如
CLS DIR DS51.INI
C51 A51 SET
注意你事实上不需要使用全部的大写字母来输入这些命令
Courier 这种字体的正文通常用于表示出现在屏幕上的信息或打印在打印机上的信息
本字体也用于出现在命令行上的论述或描述文字
KEYS 这种字体的文字表示在键盘上实际存在的键 例如 “Press Enter to Continue.”
ALT+<x> 表明一Alt组合键 Alt和 <x>键必须同时按下
CTRL+<x> 表明一Ctrl组合控制键 Ctrl和 <x>控制键必须同时按下 ..
1
概述

RTX51是一个用于8051系列处理器多任务实时操作系统
RTX51可以简化那些复杂而且时间要求严格的工程的软件设计工作
有二个不同的RTX51版本可以利用
RTX51 Full
使用四个任务优先权完成同时存在时间片轮转调度和抢先的任务切换 RTX51工作在
与中断功能相似的状态下 信号和信息可以通过邮箱系统在任务之间互相传递 你可以从一存
储池中分配和释放内存 你可以强迫一个任务等待中断 超时或者是从另一个任务或中断发出的
信号或信息
RTX51 Tiny 是一个 RTX51的子集 它可以很容易地在没有任何外部存储器的单片8051系统上运
转 除了下列例外 RTX51 Tiny支持许多在 RTX51中的特征
RTX51 Tiny仅支持时间片轮转任务切换和使用信号进行任务切换 不支持抢先式的任务切换
不包括消息历程 没有存储器池分配程序
在本章其它部分所提到的 RTX51包括这两种变形 Differences between
the two are so stated in the text as their need becomes applicable.
入门
许多微处理器应用程序要求同时执行两个工作或任务. 对于这样的应用程序 一个实时操作系统
RTOS 允许灵活的分配系统资源 中央处理器 存储器 等等.)给各个任务 RTX51是一个很
好使用的强大的实时操作系统 RTX51可以运行于所有的8051派生机型
你可以使用标准 C语言编写和编译一个程序或使用 C51构造 编译他们 仅在指定任务标识符和
优先权上有一点差别 . RTX51程序也要求你载运程序中用include命令引入实施管理的头文件并使
用 BL51 linker/locator进行连接和选择适当的 RTX51库文件
1
单任务程序
一个标准的 C语言程序从主函数开始执行 在一嵌入式应用中,主函数通常是一段无限循环的代
码 可以认为是一个连续执行的单独任务
例如
int counter;
void main (void) {
counter = 0;
while (1) { /*
始终重复
*/
counter++; /*
计数器加1
*/
}
}
时间片轮转程序
一中更高级的 C语言程序可以在不使用实时操作系统的情况下实现时间片轮转拟多任务系统 在
这种系统中 任务或功能被一段无限循环程序重复调用
例如
int counter;
void main (void) {
counter = 0;
while (1) { /*
始终重复
*/
check_serial_io ();

process_serial_cmds (); /*
处理串行输入
*/
check_kbd_io ();
process_kbd_cmds (); /* process keyboard input */
adjust_ctrlr_parms (); /* adjust the controller */
counter++; /* increment counter */
}
}
用 RTX51进行时间片轮转调度
rtx51也能完成时间片轮转多重任务 而且允许准并行执行多个无限循环或任务 任务并不是并
行执行的而是按时间片执行的
可利用的中央处理器时间被分成时间片由 RTX51分配一个时间片给每个任务 每个任务允许执行
一个预先确定的时间 然后 rtx51切换到另一准备运行的任务并且允许这个任务执行片刻 时
间片非常段 通常为几个毫秒 因此 它表现得如同各个任务是同时地执行的
RTX51使用一个8051硬件计时器中断作为定时程序
产生的周期性中断用于驱动 RTX51时钟
RTX51不需要在你的程序中拥有一个主函数 它将自动开始执行任务 0 如果你确实有一个主函
数 你必须利用 RTX51 Tiny中的 os_create_task函数或 RTX51中的 os_start_system函数手工
启动 RTX51
下列例子显示一个只使用时间片轮转任务调度的简单的 RTX51应用程序 在本程序里的二个任务
是简单计数器回路 rtx51开始执行函数名为 job0的任务 0 这些功能添加了另一个叫做 job1
任务 在 job0运行一会儿以后 RTX51切换到 job1 在 job0运行一会儿以后 RTX51转回到
job0 这个过程将不确定地重复下去
#include <rtx51tny.h>
int counter0;
int counter1;
void job0 (void) _task_ 0 {
os_create (1); /* mark task 1 as ready */
while (1) { /* loop forever */
counter0++; /* update the counter */
}
}
void job1 (void) _task_ 1 {
while (1) { /* loop forever */
counter1++; /* update the counter */
}
}
RTX51事件
即使是在等待一个任务的时间片到达时 你也可以使用 os_wait函数通知 RTX51它可以让另一个
任务开始执行 这个功能中止正在运行的当前任务然后等待一指定事件的发生 在这个时候

任意数量的其他任务仍可以执行
使用 RTX51的时间溢出事件
你可以用 os_wait函数等待的最简单的事件是事件溢出 RTX51时钟报时信号周期 这类事件可被
用于任务中需要延迟一段时间的地方 这可用于查询一个开关状态的代码中 在这样的条件下
只须每隔 50ms左右查询一次开关 下一个例子技术示范你可以在允许其他的任务执行的时候使用
os_wait功能延迟任务的执行
#include <rtx51tny.h>
int counter0;
int counter1;
void job0 (void) _task_ 0 {
os_create (1); /* mark task 1 as ready */
while (1) { /* loop forever */
counter0++; /* update the counter */
os_wait (K_TMO, 3); /* pause for 3 clock ticks */
}
}
void job1 (void) _task_ 1 {
while (1) { /* loop forever */
counter1++; /* update the counter */
os_wait (K_TMO, 5); /* pause for 5 clock ticks */
}
}
在上面的例子中 job0像前面叙述的一样启动 job1 然后 在增加 counter0计数以后 job0呼
叫 os_wait函数以暂停 个时钟报时信号 这时 rtx51切换到下一个任务 job1 在 job1增加
counter1计数以后 它也调用 os_wait以暂停 个时钟报时信号 现在 rtx51没有其他的任务
需要执行 因此在它可以延续执行 job0之前它进入一个空循环等待 个时钟报时信号过去
本例子的结果是 counter0每 个时钟报时周期加1 而 counter1每5个时钟报时周期加 1
使用 RTX51的信号
你可以使用 os_wait功能暂停一个任务并等待从另一个任务发出的信号 或旗标 这可以用于
协调两个或更多的任务
等待一个信号会如下面所诉工作 如果一任务在等待一个信号 并且信号标志是 0 在这个信号
被发送之前 这个任务将一直处于挂起状态 如果信号标志已经是 1 当任务查询信号时 信号
标志会被清除 并且继续执行任务
以下例子说明了这种应用
#include <rtx51tny.h>
int counter0;
int counter1;
void job0 (void) _task_ 0 {
os_create (1); /* mark task 1 as ready */
while (1) { /* loop forever */
if (++counter0 == 0) /* update the counter */
os_send_signal (1); /* signal task 1 */
}
}
void job1 (void) _task_ 1 {
while (1) { /* loop forever */
剩余42页未读,继续阅读









安全验证
文档复制为VIP权益,开通VIP直接复制

评论1