搞了几天,总算把ucos-ii移植到MC9S12XDP512上了。做个简短的笔记。
ucos-ii版本:2.52, 编译器:Freescale CodeWarrior5.9 芯片:MC9S12XDP512
移植步骤:
1. 根据向导建立新的工程,芯片选择MC9S12XDP512,其余默认配置;
2. 将ucos-ii通用源文件复制到工程的Sources目录下下:OS_CORE.C,OS_DBG.C,OS_FLAG.C,OS_MBOX.C,OS_MEM.C,
OS+MUTEX.C,OS_Q.C,OS_SEM.C,OS_TASK.C,OS_TIME.C,uCos_II.H,os_cfg.h并将这些文件添加到工程中;
3. 创建新文件,并命名为includes.h,将其添加到工程中,includes.h文件内容为:
4. 创建新文件OS_CPU.H,并将其添加到工程中,OS_CPU.H文件内容为:
5. 创建新文件os_cpu_c.c,并添加到工程中,os_cpu_c.c文件内容较多,主要有以下部分:
1. 以下函数均为空: OSTaskCreateHook(),OSTaskDelHook(),OSTaskSwHook(),OSTaskIdleHook(),
OSTaskStatHook(),OSTimeTickHook(),OSInitHookBegin(),OSInitHookEnd(),OSTCBInitHook(),
2. OSTaskStkInit()函数内容: 该函数主要模拟中断产生时CPU的压栈过程,根据芯片资料(IS12CpuV1.pdf),中断的压栈次序为:
SP+7 RTNH:RTNL (返回地址)
SP+5 Y
SP+3 X
SP+1 D(B:A)
SP CCR
由上,OSTaskStkInit()内容为:
3. 由于CodeWarrior可以内联汇编,因此将以下4个需要由汇编编写的函数也放于Os_cpu_c.c中:OSStartHighRdy(),
OSCtxSw(), OSIntCtxSw(),OSTickISR().注意,这4个函数都应该编写在非分页区,4个函数的内容为:
6. 按自己需要修改os_cfg.h配置文件
7. 在main.c中编写如下测试代码:
整个工程在我的资源里