嵌入式操作系统原理及应用
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.3 嵌入式操作系统下载与运行

了解了µCOS-Ⅱ对上以及对下的接口定义后,接着要了解的是移植µCOS目标处理器必须满足的条件。这些条件包括;

  • 处理器的C编译器能产生可重入代码,且用C语言就可以打开和关闭中断。
  • 处理器支持中断,并能产生定时中断。
  • 处理器支持足够的RAM(几KB),作为多任务环境下的任务堆栈。
  • 处理器有将堆栈指针和其他MCU寄存器读出和存储到堆栈或内存中的指令。

前面介绍的Spartan-6的技术特征,以及MicroBlaze软核的特性,完全可以满足以上要求。那么下来就要做移植了,所谓的移植就是在理解了处理器和C编译器的技术细节之后,修改与处理器相关的代码。具体有如下内容:

  • OS_MCU.H中需要设置一个常量来标识堆栈增长方向。

#define OS_STK_GROWTH 1 /*microblaze 堆栈从高向低增长*/

  • OS_MCU.H中需要声明几个用于开关中断和任务切换的宏。

#define OS_CRITICAL_METHOD 3 /*采用关中断定义的第3种 */

#define OS_ENTER_CRITICAL() cpu_sr=OS_CPU_SR_Save();

#define OS_EXIT_CRITICAL() OS_CPU_SR_Restore(cpu_sr);

  • OS_MCU.H中需要针对具体处理器的字长重新定义一系列数据类型。

如:typedef unsigned char BOOLEAN;typedef unsigned char INT8U;

  • OS_MCU_A.ASM需要改写4个汇编语言的函数。

包括OSStartHighRdy()、OSCtxSw()、OSIntCtxSw()、OS_CPU_ISR()。

  • OS_MCU_C.C需要用C语言编写6个简单函数。

包括OSTaskStkInit()、OSInitHookBegin()、OSInitHookEnd()、OSTaskCreateHook()、OSTaskDelHook()、OSTaskIdleHook()、OSTaskStatHook()、OSTaskSwHook()、OSTCBInitHook()、OSTimeTickHook()等。

  • 修改主头文件INCLUDES.H,将前面的三个文件和其他自己的头文件加入。