于是今天就尝试自己做uC/OS-II的移植:(记下几个关键的步骤)
1. OS_CPU.H
#define OS_ENTER_CRITICAL() EA=0
#define OS_EXIT_CRITICAL() EA=1
因此 OS_STK_GROWTH 0
任务切换由OSCtxSw()完成,OSCtxSw()由汇编语言写!
2. OS_CPU_C.C
3. OS_CPU_A.ASM
4. 关于INCLUDES.H和uC/OS-II.C等一系列文件都要修改下头文件;而且源文件对于函数声明都要设置为可重入reentrant(KEIL在缺省情况下编译代码为不可重入)
eg. uC/OS-II.H (790)
void OS_TaskIdle (void *data);
改为
void OS_TaskIdle (void *data)reentrant; (类似的要修改的实在太多了)
5. 最后在网上找到一篇关于uC/OS-II移植到51的心得,很值得细看,许多问题都提到了:
好好坚持!
btw
-任务切换:OSTCBHighRdy必须指向优先级最高的任务控制块OS_TCB
OSTCBHighRdy->OSTCBPrio 任务的优先级
-任务在OSTaskCreate之后即进入就绪表。
-就绪表:OSRdyGrp& OSRdyTbl[]
-任务调度:OS_Sched中OS_TASK_SW()中都系汇编语言,未用心去睇。
欢迎光临 中科因仑“3+1”工程特种兵精英论坛 (http://bbs.enlern.com/) | Powered by Discuz! X3.4 |