UCOS II移植内容

/**************UCOS II移植内容—Sandy*********Start of file************/
    文件名:UCOS II移植内容

作者:手术刀
    QQ: 872180981
    Time :2015-8-29
/***************************瘟 鸡 工 作 室********************************/

UCOS II移植内容

有三个文件要修改,分别是1.OS_CPU.H   2.OS_CPU_C.C   3.OS_CPU_A.ASM

 

OS_CPU.H

1.定义与编译器、处理器相关的数据类型。

typedef unsignedchar          BOOLEAN;

typedef unsignedchar          INT8U;                 /* Unsigned  8 bit quantity    */

typedef signed   char         INT8S;                  /* Signed    8 bit quantity          */

typedef unsignedshort          INT16U;                 /* Unsigned 16 bitquantity      */

typedef signed   short         INT16S;                 /* Signed   16 bit quantity    */

typedef unsignedint            INT32U;                /* Unsigned 32 bit quantity     */

typedef signed   int           INT32S;                 /* Signed   32 bit quantity      */

typedef float                 FP32;                   /* Single precision floatingpoint */

typedef double               FP64;                   /* Double precision floatingpoint    */

typedef unsignedint            OS_STK;                /* Each stack entry is 32-bitwide      */

typedef unsignedint            OS_CPU_SR;            /* Define size of CPU statusregister (PSR = 32 bits) */

//特别注意最后两个,OS_STK堆栈数据类型,OS_CPU_SR:cpu状态寄存器数据类型。

2.开关中断宏的定义

#define  OS_CRITICAL_METHOD   3                                              //选择开关方式

#ifOS_CRITICAL_METHOD == 3

#define  OS_ENTER_CRITICAL()  {cpu_sr = OS_CPU_SR_Save();}  //关中断

#define  OS_EXIT_CRITICAL()   {OS_CPU_SR_Restore(cpu_sr);}    //开中断

#endif

 

3.堆栈增长方向的定义

/* Stack growsfrom HIGH to LOW memory on ARM        */

#define  OS_STK_GROWTH 1  //为1时,降栈  为0时升栈

4.系统级任务切换宏定义,在汇编文件中实现,在任务切换时调用。

#define  OS_TASK_SW()         OSCtxSw()

5.相关函数的定义

#if OS_CRITICAL_METHOD == 3               /* See OS_CPU_A.ASM */  

OS_CPU_SR OS_CPU_SR_Save(void);                        //关中断函数定义,在asm实现

void       OS_CPU_SR_Restore(OS_CPU_SRcpu_sr); //开中断函数定义,在asm实现

#endif

 

void     OSCtxSw(void);                 //系统任务切换函数定义在asm实现

void     OSIntCtxSw(void);             //中断级任务切换函数定义在asm实现

void     OSStartHighRdy(void);              //在操作系统第一次启动时候调用的任务切换

Void        OS_CPU_SysTickHandler(void);  //定时器中断处理函数,应调用OSTimeTick();

Void       OS_CPU_SysTickInit(void);        //对systick时钟的初始化

Void        OS_CPU_SysTickClkFreq(void); //反回systick时钟的频,应对                                                                                                OS_TICKS_PER_SEC处理

 

ucosII中没有对SysTickInitSysTickClkFreq函数进行调用时钟的初始化就该在任务创建后,OSStart();函数之前。

OS_CPU_C.C:

在OS_CPU_C.C文件中有9个钩子函数我们不用管,只要求写好堆栈初始化函数。

1.OS_STK*OSTaskStkInit (void (*task)(void *p_arg), void *p_arg, OS_STK *ptos, INT16Uopt)函数的具体细节跟CPU的寄存器结构有关,还跟压栈出栈的顺序有关。在这里不讨论。

 

OS_CPU_A.ASM :在本文件中就用汇编实现以下函数。跟cpu相关,不具体讨论。

 

OS_CPU_SR_Save               //实现函数 关中断

OS_CPU_SR_Restore           //实现函数 开中断

OSStartHighRdy                  //实现函数 在操作系统第一次启动时候调用的任务切换

OSCtxSw                            //实现函数 系统任务切换

OSIntCtxSw                        //实现函数 中断任务切换

 

 

到此我们在移植ucosII时所要修改的文件就这么多。

 

 

 

以下函数我们可以在其实的文件中去实现,必须实现。

Void        OS_CPU_SysTickHandler(void); 

Void       OS_CPU_SysTickInit(void);       

Void        OS_CPU_SysTickClkFreq(void);

 

 

 

有错误的地方欢迎指正。谢谢

 

 

 

/***************UCOS II移植内容—Sandy*************End of file*************/

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值