|
笔者计划将uC/OS-II移植到STC主系列单片机上,“微山x51-RTOS”是移植版的总称。不过STC系列单片机型号众多,必须先按照RTOS的要求分类,然后为每一类移植一个版本。T 通过分析,笔者计划分4个版本将uC/OS-II移植到STC主系列单片机上:“微山051S-RTOS”、“微山051L-RTOS”、“微山251X-RTOS”和“微山251E-RTOS”。 一、确定分类指标 (1)首先单片机RTOS系统程序只涉及整数变量,与浮点数无关,因此分类与单片机是否有浮点数运算加速单元无关,其次单片机的整数运算加速单元虽然可以加快单片机RTOS的运行速度,但是是否使用和如何使用整数运算加速单元是C语言编译器的功能,与单片机RTOS系统程序无关,因此分类也与整数运算加速单元无关。 (2)单片机RTOS在进行任务切换的时候需要保存当前任务的现场和恢复新任务的现场,任务现场最重要的就是CPU中的寄存器的值。由于不同指令集的CPU内核包含的寄存器是不一样的,因此分类的首要标准是单片机指令集。目前STC系列单片机指令集分两类:基于8051指令集的和基于80251指令集的,笔者也计划将uC/OS-II移植为“微山051-RTOS”和“微山251-RTOS”两个版本。 (3)单片机RTOS任务现场除了寄存器当前的值外,还包括任务在系统堆栈(由SP指针存取的空间)的数据和任务调用普通函数和可重入函数时存放在变量堆栈(由BP指针存取的空间)的数据。因此“微山051-RTOS”和“微山251-RTOS”这两个移植版还需要进一步根据系统堆栈空间和变量堆栈空间的大小进一步细分。
二、STC8位单片机移植版本 (4)对于以8051CPU为内核的STC8位单片机,主流的编译器为Keil的C51编译器。由于8051CPU的系统堆栈(SP)已经使用IDATA空间,因此要运行RTOS,必须使用“Large”大模式进行编译,这时变量堆栈空间(BP)使用XDATA空间。笔者根据STC8位单片机XDATA空间的大小将它们分类两类:XDATA空间小于等于8KB的为一类,这一类典型的代表为STC8H8K,对应的uC/OS-II移植版为“微山051S-RTOS”,其他XDATA空间大于8KB的为一类(包括扩充外部RAM后),这一类典型的代表为AI8051U单片机的8-模式,其片上XDATA高达32KB,对应的uC/OS-II移植版为“微山051L-RTOS”。 (5)使用“微山051S-RTOS”的单片机系统,通常用于小型应用场合(比如不含人机交互的应用)。这时每个任务的任务堆栈空间可以选择512字节,实时任务可以选择3~8个。 (6)使用“微山051L-RTOS”的单片机系统,通常用于大型应用场合(比如含TFT显示等人机交互和网络应用)。这时每个任务的任务堆栈空间可以选择1024字节,实时任务可以选择5~16个。
三、STC32位单片机移植版本 (7)对于以80251CPU为内核的STC32位单片机,主流的编译器为Keil的C251编译器。由于80251CPU的系统堆栈(ESP)必须使用EDATA空间,同时变量堆栈空间(EBP=ESP)也被安排使用EDATA空间。由于STC32位单片机的XDATA或者HDATA空间远大于EDATA空间,因此要运行RTOS,必须使用“Large”大模式进行编译。 笔者根据STC32位单片机EDATA空间的大小将它们分类两类:EDATA空间小于等于4KB的为一类,这一类典型的代表为STC32G12K64,对应的uC/OS-II移植版为“微山251X-RTOS”,其他EDATA空间大于4KB的为一类,这一类典型的代表为STC32G144K246/AI8052U单片机其片上EDATA高达16KB,对应的uC/OS-II移植版为“微山251E-RTOS”。 (8)使用“微山251X-RTOS”的单片机系统,通常用于小型应用场合。由于这一类型的EDATA空间较小,RTOS的任务堆栈必须放在XDATA或者HDATA空间中。通常每个任务的任务堆栈空间可以选择1024字节,实时任务可以选择3~8个。 (9)使用“微山251E-RTOS”的单片机系统,通常用于大型应用场合。由于这一类型的EDATA空间较大,RTOS的任务堆栈可以放在EDATA空间中。这时每个任务的任务堆栈空间可以选择1024字节,实时任务可以选择5~16个。
|