20.0-uC/OS-III移植

1.CPU移植要求:

1) 处理器有对应的能产生可重入代码的C编译器
2) 处理器支持中断且能提供周期性的中断(通常介于101000Hz
间)。

3) 可以关中断和开中断
4) 处理器支持存储和载入堆栈指针、 CPU寄存器、堆栈的指令。
5) 处理器有足够的RAM用于存放uC/OS-III的变量、 结构体、 内部
任务堆栈、任务堆栈等

6) 编译器支持64位的数据类型

2.uC/OS-III的架构和它与其他软件、硬件成分的关系: 

1)移植uC/OS-III需修改3个与内核相关的文件: OS_CPU.HOS_CPU_A.ASMOS_CPU_C.C

2)移植uC/OS-III需修改3个与CPU相关的文件: CPU.HCPU_A.ASMCPU_CORE.C

3BSP中通常包含了uC/OS-III与定时器(产生时基的定时)、中断控制器的接口。

4) 有些半导体厂商会提高相应的固件库文件, 这些文件会被包含在CPU/MCU中。

移植包括三方面内容: CPUOSBSP

2.uC/CPU

CPU相关的代码决定于CPU的架构。 例如, 关中断和开中断、堆栈的字长,

堆栈的生长方向等等。与CPU相关的代码被封装在叫uC/CPU的模块中。

CPU_DEF.H
该文件不需要被改变: CPU_DEF.H中包含了Micrium公司提供的
软件所用到的#define定义的宏。

CPU.H
不同CPU间的字长可能不同, CPU.H中定义了很多数据类型。

CPU_C.C
这是个可选的文件, 存放了CPU的中断控制器、 定时器的相关代
码。绝大多数应用中是不包含这个文件的。

CPU_CFG.H
这是个配置文件,根据应用更改相应的#define

CPU_CORE.C
这是通用的文件,不需要被改变。然而,它必须被包含。

CPU_CORE.C中定义了CPU_Init()CPU_CntLeadZeros()以及测量CPU最大关中断时间的函数等。

必须在调用OSInit()之前调用CPU_Init()

3.uC/OS-III移植

需被配置的uC/OS-III文件: 

(1).OS_CPU.H
这个文件中必须定义宏OS_TASK_SW(), 这个宏被OSSched()
调用用于上下文切换。

OS_CPU.H中必须定义宏OS_TS_GET(),用于获得当前的时间戳。时间戳的数据类型CPU_TS,是32位的。

OS_CPU.H中还需要定义OSCtxSw()OSIntCtxSw()
OSStartHighRdy()等函数的原型。

(2).OS_CPU_A.ASM
这个文件中包含了以下汇编函数:
OSStartHighRdy()
OSCtxSw()
OSIntCtxSw()
和一个可选函数OSTickISR()

OS_CPU_A.ASM中存放的大多是直接操作CPU寄存器的函数,这些函数不能被C语言实现。

(3).OS_CPU_C.C
这个文件中包含了钩子函数:
OSIdleTaskHook()
OSInitHook()
OSStatTaskHook()
OSTaskCreateHook()
OSTaskDelHook()
OSTaskReturnHook()
OSTaskStkInit()
OSTaskSwHook()
OSTimeTickHook()
OS_CPU_C.C中可以定义其他函数,但这些函数是
强制的。

4.板级支持包BSP

板级支持包的代码跟用户所使用的目标板有关。

BSP的文件包括:
BSP.C
BSP.H
BSP_INT.C
BSP_INT.H

(1).BSP.CBSP.H

这两个文件中包含了函数的定义和申明如BSP_Init()BSP_LED_On()BSP_LED_Off()

BSP_LED_Toggle()BSP_PB_Rb()等。用户可以定义自己的函数,最好以BSP_作为前缀。

BSP.C中,可以添加CPU_TS_TmrInit()用于初始化CPU的时钟速率。

CPU_TS_TmrGet()用于读取CPU时钟计数值。如果定时器是16位的, 那么就需定义两个字,

将其转换为32位的。 如果定时器是32位的, CPU_TS_TmrGet()将直接返回这个32位的值。

(2).BSP_INT.CBSP_INT.H

这些文件中用于存放与中断控制器相关的函数。

猜你喜欢

转载自www.cnblogs.com/xigongxiaosha/p/9453722.html
今日推荐