12.6.2 RTX-51 Tiny的注意事项
除了上述软件及硬件上的要求外,在进行RTX-51 Tiny实时操作系统程序设计时,还需要注意任务定义、寄存器选择以及中断等事项,下面分别进行介绍。
1.任务定义
RTX-51 Tiny系统中每个任务可以完成特殊的功能。RTX-51 Tiny系统的任务定义格式如下。
void function(void)_task_num
其中,“function”是自定义任务的函数名,“task”是系统关键字,“num”是该任务的任务号,每个任务都必须对应一个唯一的任务号。示例如下。
void task1(void)_task_1
{
while(1)
{//无限循环
counter++;//更新变量counter的值
printf(“count1=%d\n”,count1++);//打印输出变量count1
}
}
RTX-51 Tiny最多允许定义16个任务,因此在任务定义时任务号的取值范围为0~15。此外,RTX-51 Tiny系统的任务没有返回值和参数。
2.寄存器组选择
在RTX-51 Tiny实时多任务操作系统中,任务分配使用的是寄存器组0,整个系统中的其他函数只能使用余下的寄存器组。一般来说,按照KeilµVision3集成开发环境的默认设置来进行编译即可。RTX-51 Tiny实时多任务操作系统要求在一个附加寄存器组中包含6个常设字节,这个可以在配置文件CONF_TNY.A51中通过参数INT_REGBANK来进行设置。
3.中断处理
与RTX-51 FULL不同的是,RTX-51 Tiny实时多任务操作系统本身不包括任何中断管理,在应用时必须允许使能EA位,以便能够触发中断。RTX-51 Tiny系统中可以按照一般的C51程序对中断允许寄存器的操作。由于RTX-51 Tiny系统使用的是8051内部定时器T0,因此应该时刻开启定时器T0中断。RTX-51 Tiny系统可以并行处理中断函数。
4.再入函数
再入函数在使用时,将它们的参数和局部数据存放在“再入栈”中,这些数据可以在重复调用中得到系统的保护。但是,RTX-51 Tiny系统不包括任何对“再入栈”的管理,因此在应用程序中使用再入函数时,必须保证这些函数不调用任何RTX-51 Tiny系统函数,并且这些再入函数不能被RTX-51 Tiny系统的循环任务切换中断。
对于非再入函数来说,只有在用户程序保证不会发生重复调用的情况下,才可以被几个任务所调用。非再入的C51函数被几个任务或中断服务程序所调用时,由于它们的参数和局部数据存放在静态存储器段中,因此这些数据将会发生覆盖。因此在使用非再入的C51函数时,RTX-51 Tiny必须禁止循环任务的切换,并且这些函数还不允许调用任何RTX-51 Tiny系统函数。
RTX-51 Tiny系统中,使用寄存器传递参数和自动变量的C51语言函数是可再入的,这些函数可以被不同的任务调用而没有限制。
5.库函数的使用
库函数在使用时同样必须明确该函数是否可再入。对于使用那些非再入函数,用户必须保证它们不能同时被多个任务所调用。而对于可再入的函数,可以不加限制地应用于所有任务中。
6.多数据指针和算术处理器
RTX-51 Tiny实时多任务操作系统不能管理多数据指针和算术处理器,因为这些操作与硬件有关。但是,如果用户能够确保RTX-51 Tiny系统在执行与硬件有关的操作时没有循环任务切换发生,则程序仍然可以使用多数据指针及算术处理器。