RTX51 Tiny第2版用户手册<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
第一章 概述
RTX51 Tiny是一种实时操作系统(RTOS),可以用它来建立多个任务(函数)同时执行的应用。嵌入式应用系统经常有这种需求。RTOS可以提供调度、维护、同步等功能。
实时操作系统能灵活的调度系统资源,像CPU和存储器,并且提供任务间的通信。RTX51 Tiny是一个功能强大的RTOS,且易于使用,它用于8051系列的微控制器。
RTX51 Tiny的程序用标准的C语言构造,由Keil C51 C编译器编译。用户可以很容易的定义任务函数,而不需要进行复杂的栈和变量结构配置,只需包含一个指定的头文件。
一、What’s New
RTX51 Tiny第二版增加了许多新特性,使得实时软件的开发更加简单,如:
l 支持Code Banking
该选项必须在CONF_TNY.A51配置文件中允许,还要在L51_BANK.A51文件中定义Code Banking硬件配置。
l 直接任务切换
新增加的函数(os_swich_task)允许一个任务立即切换到另一个处于就绪态的任务。
l 任务就绪标志
新的库函数isr_set_ready和os_set_ready允许用户给一个任务设置就绪标志。就绪标志可以用于将一个正在等待时间间隔、超时或信号(参见os_wait)的任务置为就绪态,该任务在下一个运行时机恢复。
l CPU空闲模式支持
l 支持用户在定时器中断的代码
现在可以在定时器滴答中断中加入自己的代码。
该选项必须在CONF_TNY.A51中被允许
l 支持时间间隔调整
当在os_wait中混合使用时间间隔和信号时,可用os_reset_interval函数调整时间间隔超时值。
此外,RTX51 Tiny 进行了完全重构,以增加灵活性,加快执行速度,减少代码和数据空间需求。
当满足以下条件时,RTX51 Tiny第二版在代码大小上的缩小尤为显著。
1、禁止任务的时间轮转
2、尽量少的RTX51 Tiny系统函数调用
3、禁止栈检查
禁止任务时间轮转同时也降低了数据空间的需求。
二、已解决的问题
以下是在1.06版中已知的问题,已在第二版中得到了修正.
1、在RTX51 Tiny1.06中当在os_wait期间产生一个中断时,isr_send_signal数
可能会破坏就绪状态,导致任务挂起,等待从中断发来的信号,该问题在RTX Tiny2中已解决。
2、在RTX51 Tiny1.06中,由于信号产生时时间间隔定时器的值不能被调整,因而K_IVL和K_SIG事件不能在os_wait中合并为一个调用。在RTX Tiny2中,提供的os_reset_interval函数允许调整间隔定时器。
3、在RTX51 Tiny1.06中,TIMESHARING不能被设为1,如果设为1,并且在时间片轮转前产生了中断,时间轮转周期可能被破坏,成为延迟256个滴答数,而不是1个。该问题在第2版中解决。
4、在RTX51 Tiny1.06中,当用户中断执行的时间比系统时钟滴答时间长时,RTX51 Tiny系统时钟定时器就会递归调用,这导致SAVEPSW和SAVEACC的覆盖,引起系统崩溃。该问题在RTX51 Tiny第2版中解决。如果在应用中包含一个执行时间大于RTX51 Tiny系统时钟定时间隔的中断程序,可以将LONG_USR_INTR设为1。如果应用程序在高优先级中断程序中消耗大量时间,很可能会用到这个选项。
三、产品规约(产品规格说明)
参 数 | 范 围 |
最大任务数 | 16 |
最大活动任务 | 16 |
代码空间需求 | 900字节最大 |
数据空间需求 | 7字节 |
栈空间需求 | 3字节/任务 |
外部RAM需求 | 0字节 |
定时器 | 0 |
系统时钟因子 | 1000~65535 |
中断等待 | 20个周期或更少 |
上下文切换时间 | 100~700个周期 |
四、工具需求
以下为使用RTX51 Tiny需要的应用软件:
C51编译器
A51宏汇编器
BL51连接器或LX51连接器
RTX51TNY.LIB和RTX51BT.LIB库文件必须保存于库路径下,通常,该路径是\KEIL\C51\LIB文件夹。RTX51TNY.H必须保存在包含路径下,通常是\KEIL\C51\INC文件夹。
五、目标需求
RTX51 Tiny运行于大多数8051兼容的器件及其变种上。RTX51 Tiny应用程序可以访问外部数据存储器,但内核无此需求。
RTX51 Tiny支持Keil C51编译器全部的存储模式。存储模式的选择只影响应用程序对象的位置,RTX51 Tiny系统变量和应用程序栈空间总是位于8051的内部存储区(DATA或IDATA区),一般情况下,应用程序应使用小(SMALL)模式。
RTX51 Tiny执行协作式任务切换(每个任务调用一个操作系统例程)
和时间片轮转任务切换(每个任务在操作系统切换到下一个任务前运行一个固定的时间段),不支持抢先式任务切换以及任务优先级。RTX51 Full支持抢先式任务切换。
1、中断
RTX51 Tiny与中断函数并行运作,中断服务程序可以通过发送信号(用isr_send_signal函数)或设置任务的就序标志(用isr_set_redy函数)与RTX51 Tiny的任务进行通信。
如同在一个标准的,没有RTX51 Tiny的应用中一样,中断例程必须在RTX51Tiny应用中实现并允许,RTX51 Tinyim 没有中断服务程序的管理。
RTX51 Tiny使用定时器0、定时器0中断,和寄存器组1。如果在程序中使用了定时器0,则RTX51 Tiny将不能正常运转。你可以在RTX51 Tiny定时器0的中断服务程序后追加自己的定时器0中断服务程序代码(参见硬件定时器)。
RTX51 Tiny假设总中断总是允许(EA=1)。RTX51 Tiny库例程在需要时改变中断系统(EA)的状态,以确保RTX51 Tiny的内部结构不被中断破坏。当允许或禁止总中断时,RTX51 Tiny只是简单的改变EA的状态,不保存并重装EA,EA只是简单的被置位或清除。因此,如果你的程序在调用RTX51例程前某止了中断,RTX51可能会失去响应。
在程序的临界区,可能需要在短时间内禁止中断。但是,在中断禁止后,不能调用任何RTX51 Tiny的例程。如果程序确实需要禁止中断,应该持续很短的时间。
2、再入函数
C51编译器提供对再入函数的支持,再入函数在再入堆栈中存储参数和局部变量,从而保护递归调用或并行调用。RTX51 Tiny不支持对C51再入栈的任何管理。因此,如果在程序中使用再入函数,必须确保这此函数不调用任何RTX51 Tiny系统函数,且不被循环任务切掉所打断。
仅用寄存器传递参数和保存自动变量的C函数具有内在的再入性,可以无限制的调用RTX51 Tiny。
非可再入C函数不能被超过一个以上的任务或中断过程调用。非再入C51函数在静态存储区段保存参数和自动变量(局部数据),该区域在函数被多个任务同时调用或递归调用时可能会被修改。
如果确定多个任务不会递归(或同时)调用,则多个任务可以调用非再入函数。通常,这意味着必须禁止循环任务调度,且该非再入函数不能调用任何RTX51 Tiny系统函数。
附注:
l 如果希望在多个任务或中断中调用再入或非再入函数,应当禁止循
环任务调度。
3、C库例程
可再入C51库函数可在任何任务中无限制的使用。对于非再入的C51库函数,同样有非可再入C函数的限制。
4、多数据指针
Keil C51编译器允许使用多数据指针(存在于许多8051的派生芯片中), RTX51 Tiny不提供对它们的支持.因此,在RTX51 Tiny的应用程序中应小心使用多数据指针。
从本质上说,必须确保循环任务切换不会在执行改变数据指针选择器的代码时发生。
附注:
l 如果要使用多数据指针,应该禁止循环任务切换。
5、运算单元
Keil C51编译器允许使用运算单元(存在于许多8051的派生芯片中)。RTX51 Tiny不提供对它们的支持。
因此,在RTX51 Tiny的应用程序中须小心使用运算单元。
从本质上说,必须确保循环任务切换不会在执行用运算单元的代码时发生。
附注:
l 如果希望使用运算单元,应禁止循环任务切换。
6、寄存器组
RTX51 Tiny分配所有的任务到寄存器0,因此,所有的函数必须用C51的默认设置进行编译,REGISTERBANK(0)。
中断函数可以使用剩余的寄存器组。然而,RTX51 Tiny需要寄存器组区域中的6个永久性的字节,用于这些字节的寄存器组在配置文件中指定。
用户21537 2007-12-3 22:00
不错,part2呢?
^_^
用户103804 2007-8-26 13:19