RTX51 Tiny用户指南包含如何使用Keil RTX51 Tiny Real-Time Kernel的信息。
这个手册包含以下章节。
版本历史
综述
RTX51 Tiny是一个实时操作系统(RTOS),可以用来创建同时执行多个函数或任务的应用程序。通常在嵌入式应用中需要用到。事实上不使用RTOS来创建实时程序(在一个循环中执行一个或多个函数或任务),像RTX51 Tiny这样的RTOS可以处理许多时序安排、保持以及时间问题。
实时操作(RTOS)可以柔性调度系统资源,如CPU与内存,以及提供任务间通信。RTX51 Tiny是一个强大的RTOS,可以轻松的在8051衍生设备中使用和工作。
RTX51 Tiny程序是使用标准C设计的,使用Keil C51 C编译器编译,添加到C语言中,可以轻松的声明任务函数,而不需要使用复杂的堆栈和变量结构配置。RTX51 Tiny程序仅需要将一个特殊的头文件包含在程序中并将RTX51 Tiny库连接到程序中。
新的特性
RTX51 Tiny版本2包含很多新的特性可以使实时软件开发更容易。例如:
RTX51 Tiny目前支持代码分页。这个选项必须在CONF_TNY.A51配置文件中进行使能。其它的代码分页应用中必须在L51_BANK.A51文件中定义代码分页硬件配置。
一个新的函数(os_switch_task)允许一个任务直接执行任务转换切换到其它READY状态的任务。
新的RTX51 Tiny库程序isr_set_ready和os_set_ready,允许为一个任务设置READY标志。READY标志可以用于将一个任务置于等待时间间隔、超时或信号(signal)(参考os_wait)READY的状态。任务在下一次时机中恢复。
RTX51 Tiny目前允许Idle Task在中进入空间模式(很多设备可以)。
目前可以在RTX51 Tiny定时器中断中添加用户的代码。可以使用与RTX51 Tiny相同的固定时钟频率作为自己程序的时钟。这个选项必须在CONF_TNY.A51 配置文件中使能。
os_reset_interval函数在混合间隔和信号调用os_wait程序的时候,允许调整间隔的超时值。
此外,RTX51 Tiny已经完全重组结构来增加它的灵活性,提供性能以及减少代码和数据空间的需求。RTX51 Tiny版本2在遇到以下条件的时候是可伸缩的,并且显示代码尺寸显著减小。
禁用Round-Robin任务切换也可以减少数据空间的需求。
问题解决
以下列出RTX51 Tiny版本1.06已知的问题。这些问题在RTX51 Tiny版本2中已被修正。
产品规格
参数 |
限制 |
定义任务最大数量 |
16 |
激活任务的最大数量 |
16 |
需要的CODE 空间 |
最大900 Bytes |
需要的DATA 空间 |
7 Bytes |
需要的STACK 空间 |
3 Bytes/Task |
需要的XDATA 空间 |
0 Bytes |
定时器(Timer) |
0 |
系统时钟因子(System Clock Divisor) |
1,000-65,535 |
中断等待时间(Interrupt Latency) |
20 Cycles or Less |
环境切换时间(Context Switch Time) |
100-700 Cycles |
工具要求
以下软件应用程序是RTX51 Tiny需要的:
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)。典型的,RTX51 Tiny应用按SMALL模式执行。
RTX51 Tiny执行协作(cooperative)任务切换(每个任务调用一个操作系统程序)和循环(round-robin)任务切换(在操作系统切换到下一个任务之前,每个任务运行的时间是固定的)。抢占式任务切换和任务优先级是不支持的。如果应用需要抢占式任务切换,必须使用RTX51 Full Real-Time Executive。
中断
RTX51 Tiny与中断函数并行执行。中断服务程序可以通过发送一个信号(使用isr_send_signal函数)或设置任务的Ready标志(使用isr_set_ready函数)与RTX51 Tiny任务通信。
中断程序必须被执行,并且要像标准程序、non-RTX51 Tiny应用一样在RTX51 Tiny应用中使能。在RTX51 Tiny中没有中断程序管理。
RTX51 Tiny使用定时器0,定时器0中断,和寄存器bank 1。如果程序使用定时器0,RTX51 Tiny内核将不能正常工作。可以在RTX51 Tiny定时器0 ISR的尾部添加自己的定时器0 ISR。更多信息请参考“硬件定时器”。
RTX51 Tiny假设总中断(EA=1)是使能的。RTX51 Tiny库程序更改中断系统(EA位)的状态,需要确保RTX51 Tiny的内部结构没有被中断破坏。当使能和禁用总中断时,RTX51 Tiny只是简单的更改EA的状态。不会保存和恢复EA。EA只是简单地设置或清除。因此,如果程序禁用了之前调用RTX51程序的中断,RTX51将不会应答。
对于程序的关键部分可能需要短暂的禁止中断。但是,不可以使用被禁止的中断调用任何RTX51 Tiny程序。如果程序会禁止中断,也应该是短暂的。
可重入函数
C51编译器提供对可重入函数的支持。可重入函数将参数和局部变量存储在可重入堆栈中。在递归或重复调用的时候保护它们。RTX51 Tiny不包含C51可重入堆栈的管理。因此,如果在应用程序中使用可重入函数,必须确保这些函数不会调用RTX51 Tiny的系统函数,并且可重入函数不会被round-robin任务切换中断。
那些参数和自动变量仅使用寄存器的C函数,本身就是可重入的,并且可以被不受限制的从RTX51 Tiny调用。
不可重入C函数不可以从多个任务或中断程序中调用。非可重入C51函数将其参数和自动变量(局部变量)存储在静态存储区,当函数被多个任务同时调用或递归调用时会被重写。
如果可以确定不会递归调用(同时地),可以从多个任务调用非可重入函数。通常这意味着round-robin任务调度必须被禁用。并且非可重入函数不能电影任何RTX51 Tiny系统函数。
注意:
C库程序
可重入的C51库程序可以不受限制的在任何任务中使用。对于非可重入的C51程序,同样的限制适用于不可重入的C函数。
多数据指针
Keil C51编译器允许使用多数据指针(对很多8051派生设备有效)。但是,RTX51 Tiny不提供对他们的管理。因此,如果在RTX51 Tiny应用程序使用多数据指针,必须要谨慎。
本质上,必须保证在执行更改数据指针选择器的代码时,round-robin任务切换不会发生。
注意:
算术单元
Keil C51编译器允许使用各种8051设备的算术单元。但是,RTX51 Tiny不提供对他们的管理。因此,如果在RTX51 Tiny应用程序中使用算术单元,必须谨慎。
本质上,必须保证在执行使用算术单元的程序时,round-robin任务切换不会发生。
注意:
寄存器Bank
RTX51 Tiny将所有任务分配在寄存器bank0。出于这个原因,所有的任务函数必须使用默认的C51设置编译,REGISTERBANK (0)。
中断函数可以使用其它的寄存器bank。但是,RTX51 Tiny需要寄存器区的6个永久bytes。被RTX51 Tiny使用的6个byte所在的寄存器bank,可以在配置文件中指定。