1、 该选择RTX51(tiny)还是其他的RTOS? 51MCU上能用的RTOS有不少,有RTX51(tiny),还有基于RTX51(tiny)改造出来的Small RTOS(51),以及uCosII51。个人认为,RTX51毕竟是Keil公司的拳头产品,浸淫了多年的技术力量,比较成熟。最后一个版本发布已经是 几年前的事,到现在都没有用户发现bug,可见非常稳定。而Small RTOS(51)及uCosII51毕竟是网络爱好者的个人修改作品,稳定性如何,有没有人真正用于复杂的控制系统,还是一个未知数。一旦用上操作系统, 那么对它的稳定性要求非常严格,因为如果操作系统本身都有bug的话,基于其上的应用代码无论写得多稳健,都有可能发生一些不可预料的错误。对于工控设备 来说,这是不能容忍的。因此个人选择还是倾向于RTX51(Tiny)。
2、 该选择RTX51 Full还是RTX51 Tiny?从系统要求来看,RTX51 Full对硬件要求比较高,不但需要至少650byte的片外RAM,编译出来的代码还会增大6~8KB,从这两点来看,现有的大部分51单芯片都无法满 足要求,需要增加片外RAM及片外ROM,成本大大增加,而RTX51 Tiny仅需要7byte的片内RAM即可运行,编译后的代码也只是增加大约900个Byte,现有的绝大部分51芯片都很容易满足这个要求。RTX51 full跟tiny之间的主要区别是tiny不支持任务抢占式运行,因此如果对控制的实时性要求不是极端苛刻的话,RTX51 Tiny完全可以满足应用,应优先考虑使用。(严格来说,RTX51 Full才是实时操作系统,RTX51 Tiny不是实时操作系统,因为它不支持抢占式任务运行,只能叫多任务操作系统。)
3、 RTX51里中断程序的编写。RTX51系统本身占用了定时器0中断作为时间片计时调度,也就是说EA必须置1,应用代码里不能有对定时器0的中断或EA 的操作,也不要另行编写定时器0的中断代码(如果必须要利用定时器0中断来执行一些额外代码,请修改conf_tny.a51里 HW_TIMER_CODE段,把额外代码插入到这个段里),否则会影响整个rtx核心的正常运行。
Rtx51里编写中断服务程序可以有两种方法,一种是按常规无操作系统时的C写法,譬如:
void int1(void) interrupt 1
{
//中断服务代码
}
使用这种方法时要注意中断服务代码要尽量优化,整个中断服务的执行时间不能超过时间片的时间。因为缺省状态下,所有 的中断是同一优先级别,万一在执行其他中断服务程序的过程中又发生了时间片任务调度中断,那么时间片调度将由于优先级不高的原因而不执行,导致任务无法切 换。因此使用这种方法的话,最好在应用程序里把定时器0的中断优先级设置成高,保证时间片调度中断为最优先执行。另外中断服务里不能使用os_wait函数,否则也会导致任务切换失败。
另一种方法是在中断服务里使用isr_send_signal函数,把信号发给另外一个任务,让另外一个任务来处理 中断服务。这样内核在执行isr_send_signal函数时会自动做好相应的设置以保证时间片的调度工作正常进行。这种方法是Keil公司推荐的,稳 定性高。譬如:
void fast_int (void) interrupt 1
{
isr_send_signed (5);
}
void int_handle (void) _task_ 5
{
os_wait(K_SIG,0,0); //中断服务代码
}
4、 RTX51 tiny信号参数的传递。RTX51 tiny不支持os_send_message函数,仅支持os_send_signal函数,而且这函数无法传递参数的,实际使用时往往需要把信号及参数传递给一个任务,可以使用如下方法:
uchar par1;
void task1 (void) _task_ 1 //任务1
{
par1=XXXX; //设置信号参数
os_send_sinal(2); //发送信号给任务2
……
}
void task2 (void) _task_ 2 //任务2
{
os_wait(K_SIG,0,0); //等待信号
switch (par1) //对任务信号进行处理
{ …… }
}
5、 在只有128byteRAM的51MCU上使用RTX51 tiny RTX51 tiny甚至能在简化版的51MCU譬如AT89C2051上使用,但由于此类MCU只有128byte的可用RAM区,必须把conf_tny.a51 里的“RAMTOP EQU 0FFH”设置成“RAMTOP EQU 07FH”。
6、 哪里有RTX51的参考资料最权威最详细的RTX51tiny参考资料就是Keil公司提供的《RTX51 Tiny User's Guide》帮助文件,这个文件位于Keil uvision3安装目录下C51\hlp\tr51.chm.
另外Keil uvision3安装目录下C51\RtxTiny2\Examples目录下有参考范例,初学者可以用uvision3 IDE调入这些范例跟踪执行以了解RTX51的工作原理