/**************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中没有对SysTickInit和SysTickClkFreq函数进行调用时钟的初始化就该在任务创建后,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*************/