首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 单元电路介绍 > 其它电路
μC/OS-II在几种处理器上的移植介绍
来源:本站整理  作者:佚名  2011-06-01 06:55:11



3 软件移植过程

  3.1 OS_CPU.H的实现

  OS_CPU.H文件包括了用#define语言定义的与处理器相关的常数、宏以及数据类型。

  在上述三种处理器采用的不同编译器中,数据类型的定义是相同的,在此不做具体介绍。

  在OS_CPU.H中定义与处理器相关的宏,主要是进入临界区的OS_ENTER_CRITICAL()和退出临界区的OS_EXIT_CRITICAL()。

  在Keil编译器中,EA是总中断。

  #define OS_ENTER_CRITICAL() EA="0";//关中断

  #define OS_EXIT_CRITICAL() EA="1";//开中断

  在ADS编译器中定义为软件中断函数,并编写软件中断处理代码实现开/关中断。

  _swi(0x00)viod OS_TASK_SW(viod);//任务级任务切换函数

  _swi(0x00)viod OS_ENTER_CRITICAL(viod);//关中断

  _swi(0x00)viod OS_EXIT_CRITICAL(viod); //开中断

  在NiosII 8.0 IDE编译器中:

  #define OS_ENTER_CRITICAL() asm(“PFX 8n WRCTL%g0;”) //关中断

  #define OS_EXIT_CRITICAL() asm(“PFX 9n WRC TL%g 0;”) //开中断

  堆栈的增长方向通过设置OS_STK_GROWTH为0或者1来确定。51单片机中只能设置为0,表示堆栈是从下往上增长的。LPC2210中则可以设置成0或者1。NiosII中则只能设置成1,表示堆栈是从上往下增长的。

  3.2 OS_CPU_C.C的实现

  OS_CPU_C.C中,主要应改写堆栈初始化函数OS-TaskStkIint()。必须根据移植时统一定义的任务堆栈结构进行初始化,其他9个钩子函数只需说明即可。也可根据移植时用户自己的需要,编写相应的操作代码。

  以LPC2210为例,堆栈空间从高到低依次存放着PC,LR,R12,R11,…,R1,R0,CPSR,OsEnterSum。每个任务都有独立的OsEnterSum,在任务切换时保存和恢复各自的OsEnterSum值。各个任务开/关中断的状态可以不同,这样实现了开/关中断的嵌套。

  

程序

  关于51单片机和NiosII处理器的这部分移植,请参看参考文献。

  3.3 OS-CPU-A.S的实现

  这部分需要对处理器的寄存器进行操作,所以必须用汇编语言编写。μC/OS-II移植要求用户编写4个简单的汇编语言函数:OSStartHighRdy()、OSCtxSw()、OS-INTCtxSw()、OSTickISR()。

  OSStartHighRdy()的任务是进行任务调度和切换;OSCtxSw()的任务是强制CPU进行寄存器和程序计数器的切换;OSIntCtxSw()的任务是在中断返回时进行任务切换;OSTickISR()是时钟节拍中断服务程序,用来实现时间的延迟和超时功能。

  以OSStartHighRdy()任务调度和切换函数为例,介绍3种处理器移植代码。

上一页  [1] [2] [3]  下一页

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)
Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:115,832.00000 毫秒