网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 61IC中国电子在线 >> DSP >> C2000文章 >> C28X系列 >> 文章正文
  ucos在DSP TMS320F2812上的移植         ★★★ 【字体:
ucos在DSP TMS320F2812上的移植
作者:Free    文章来源:Free    点击数:    更新时间:2008-1-4    

所谓移植,就是使一个实时内核能在某个微处理器或者微控制器上运uC/OS-II的大部分代码用C语言编写,且在设计时充分考虑了移植性,所以移植相对容易。

移植概述

1.移植uC/OS-II的要求

①采用C语言的编译器可产生可重入的代码,且能在C语言中插入汇编语言。

C语言就可以打开、关闭中断。

③处理器支持中断,并能产生定时中断,一般在10ms100ms之间。

④处理器支持能够容纳一定数据量的硬件堆栈。

⑤处理器有将堆栈指针和其他CPU寄存器读出和存储到堆栈或内存中的指令。

⑥移植者应熟练掌握CCS编译器和DSP编程模型的细节。

2.移植uC/OS-II的工作内容

①在OS_CPU.H中用#define定义常量的值,声明10个数据类型。

②在OS_CPU_C.C中用C语言编写6个简单函数。

③在OS_CPU_A.ASM中编写4个汇编语言函数。

 移植过程与关键点

1.移植过程阐述

①首先在OS_CPU.H中定义常量堆栈的增长方向(OS_STK_GROWTH=1)为从高到低,然后定义与开中断、关中断以及任务与任务间切换的宏。

(1)   堆栈增长方向定义

#define OS_STK_GROWTH

/*1表示堆栈从上往下增长*/

(2)开关中断

OS_ENTER_CRITICAL()

OS_EXIT_CRITICAL()

(2)   任务切换宏定义

 

#define OS_TASK_SW()

OSCtxSw()

其中OSCtxSw()OS_CPU_A.S中定义

②在OS_CPU_A.ASM中定义5个汇编函数

(1)开、关中断定义

#define OS_CRITICAL_METHOD   2

 

#if     OS_CRITICAL_METHOD == 1

#define OS_ENTER_CRITICAL() asm("SETC INTM ")  /* Disable interrupts */

#define OS_EXIT_CRITICAL()  asm("CLRC INTM ")  /* Enable interrupts */

#endif

#if     OS_CRITICAL_METHOD == 2

#define OS_ENTER_CRITICAL() asm("SETC INTM ")  /* Disable interrupts*/

#define OS_EXIT_CRITICAL()  asm("CLRC INTM ")  /* Enable interrupts */

#endif

(2)运行第一个任务函数定义

操作系统uCOS-II启动时使用OSStartHighRdy运行第一个任务,它将调用OSTaskSwHook(),然后设置OSRunningTRUE,最后切换到优先级最高且处于就绪状态的任务。

OSStartHighRdy

. .page

.text

_OSStartHighRdy:

     .global _OSStartHighRdy

     .ref  _OSTCBHighRdy                                                          

    MOVW   DP,#_OSTCBHighRdy     ;//SP = OSTCBhighRdy->OSTCBStkPtr

    MOVL   XAR4,@_OSTCBHighRdy 

    MOV    AL,*+XAR4[0]            

    MOV    @SP,AL

    POP    RPC

    IRET

.end.

(3)任务切换函数定义

该函数在系统模式下被调用,且FIQ,IRQ被禁止,其功能包括保存当前任务上下文到当前任务堆栈.主要功能包括:

◆设置OSTCBCur->OSTCBStkPtr=SP;

◆调用OSTaskSwHook();设置OSPrioCur=OSPrioHighRdy;

◆设置OSTCBCur =OSTCBHighRdy;

◆设置SP=OSTCBHighRdy->OSTCBStkPtr;

◆从新TASK的堆栈恢复新TASK的上下文,执行新的TASK

◆其中OSTCBCur指向挂起任务的,OS_TCBOSTCBHighRdy指向恢复任务的OS_TCB

.page

.text

_OSCtxSw:

     .ref _OSTCBHighRdy

     .ref _OSTCBCur

     .ref _OSPrioHighRdy

     .ref _OSPrioCur

     .global _OSCtxSw

     PUSH  RPC

   MOVW    DP,#_OSTCBCur    ; OSTCBCur->OSTCBStkPtr = SP

   MOVL    XAR4,@_OSTCBCur  ; |274|

   MOV     AL,SP   

   MOV     *+XAR4[0],AL    ; |274|     

 

     MOVW  DP,#_OSTCBHighRdy     ; oSTCBCur = OSTCBHighRdy

   MOVL  ACC,@_OSTCBHighRdy  

   MOVW  DP,#_OSTCBCur

   MOVL  @_OSTCBCur,ACC      

   MOVW  DP,#_OSPrioHighRdy      ;OSPrioCur = OSPrioHighRdy

   MOV    AL,@_OSPrioHighRdy  

   MOVW  DP,#_OSPrioCur

   MOV   @_OSPrioCur,AL      

 

     MOVW  DP,#_OSTCBHighRdy ;SP = OSTCBhighRdy->OSTCBStkPt

   MOVL  XAR4,@_OSTCBHighRdy 

   MOV   AL,*+XAR4[0]                  

   MOV   @SP,AL

   

   POP RPC

   IRET

     .end

(4)中断结束任务切换函数定义

该函数为中断退出时的入口,其功能包括:

◆调用OSTaskSwHook();

◆设置OSPrioCur=OSPrioHighRdy;

◆设置OSTCBCur =OSTCBHighRdy;

◆设置SP=OSTCBHighRdy->OSTCBStkPtr;

◆从新TASK的堆栈恢复新TASK的上下文

◆执行新的TASK

◆其中OSTCBCur指向挂起任务的OS_TCB

OSTCBHighRdy指向恢复任务的OS_TCB

.page

.text

_OSIntCtxSw:

     .ref _OSTCBHighRdy

     .ref _OSTCBCur

     .ref _OSPrioHighRdy

     .ref _OSPrioCur

     .global _OSIntCtxSw

 

      ;模拟返回中断

      ;保存当前环境

 

       SUBB     SP,#4

    MOVW    DP,#_OSTCBCur   ; OSTCBCur->OSTCBStkPtr = SP

    MOVL    XAR4,@_OSTCBCur  ; |274|

    MOV     AL,SP   

    MOV     *+XAR4[0],AL    ; |274|         

 

       MOVW  DP,#_OSTCBHighRdy        ; oSTCBCur = OSTCBHighRdy

    MOVL   ACC,@_OSTCBHighRdy  

    MOVW  DP,#_OSTCBCur

    MOVL   @_OSTCBCur,ACC      

    

    MOVW  DP,#_OSPrioHighRdy     ;OSPrioCur = OSPrioHighRdy

    MOV    AL,@_OSPrioHighRdy  

    MOVW  DP,#_OSPrioCur

    MOV   @_OSPrioCur,AL      

    

      MOVW   DP,#_OSTCBHighRdy   ;SP = OSTCBhighRdy->OSTCBStkPtr

    MOVL   XAR4,@_OSTCBHighRdy 

    MOV    AL,*+XAR4[0]                  

    MOV    @SP,AL

               欢迎点击进入:TI德州中文网   (国内唯一针对TI应用的中文技术网站)    文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    uC/OS-II在ADSP-21535上的实…
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61IC 湘ICP备05002478号