查看: 2013|回复: 0
打印 上一主题 下一主题

移植uC/OS-II到51单片机的菜鸟问题

[复制链接]
跳转到指定楼层
沙发
发表于 2015-4-5 18:12:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

于是今天就尝试自己做uC/OS-II的移植:(记下几个关键的步骤)

1.        OS_CPU.H

  • OS_CRITICAL_METHOD=1       (51单片机使用方式1)
#define OS_ENTER_CRITICAL()       EA=0
#define OS_EXIT_CRITICAL()          EA=1
  • MCU-51堆栈向上增长
因此       OS_STK_GROWTH      0
  • OS_TASK_SW()           OSCtxSw()
任务切换由OSCtxSw()完成,OSCtxSw()由汇编语言写!
  • InitHardware (void)reentrant              初始化硬件时钟中断

2.        OS_CPU_C.C

  • OSTaskStkInit()     关于堆栈。最后仅仅理解大致的步骤是怎样,但是目前要我自己写还是很有难度,最后则拷贝了网上下的对应的文件。

3.        OS_CPU_A.ASM

  • 全是汇编语言,tot…

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()中都系汇编语言,未用心去睇。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入中科因仑

本版积分规则

快速回复 返回顶部 返回列表