μC/OS-III在Cortex-M3处理器上的移植 03
![Rank: 8](images/default/star_level3.gif) ![Rank: 8](images/default/star_level3.gif)
- UID
- 872238
|
μC/OS-III在Cortex-M3处理器上的移植 03
2.2.3 编写os_cpu_c.c
os_cpu_c.c文件包含了OSTaskStkInit()函数和若干钩子函数。OSTaskStkInit()函数的作用是在创建任务时初始化任务栈,并返回新的栈顶位置。μC/OS-III基于Cortex-M3的任务栈结构如图1所示。其中PSR、PC、LR、R1、R0五个寄存器应赋予正确的初值,而其他11个寄存器的初值无关重要。
![](http://embed.chinaitlab.com/UploadFiles_4615/201208/20120814151633298.jpg)
os_cpu_c.c文件中的钩子函数是μC/OS-III为了扩展用户功能而定义的。进行μC/OS-III移植时至少需要定义OSTaskSwHook()、OSIn itHook()、OSTimeTickHook()、OSIdleTaskHook()、OSStatTaskHook()、OSTaskCreateHook()、OSTaskDelHook()、OSTaskReturnHook()
八个钩子函数。为了简单起见,本次移植不埘钩子函数作功能扩展。
2.3 CPU相关
2.3.1 编写cpu. h
cpu.h头文件主要包括对标准数据类型、字长、栈、临界区的相关定义。标准数据类型与具体的编译器相关,需要查阅相应的编译器手册。Cortex-M3字长是32位,则CPU_DATA和CPU_ADDR皆定义为CPU_INT32U类型。Cortex-M3使用满降序栈,栈增长方向应为从高地址到低地址。临界区方法选用CPU_CRITICAL_METHOD_STATUS_LOCAL.
2.3.2 编写cpu_a.asm
cpu_a.asm文件的最主要部分是临界区函数的实现。根据所选用的临界区方法,中断使能函数CPU_SR_Save()和中断禁用函数CPU_SR_Res tore()代码实现如下:![](http://embed.chinaitlab.com/UploadFiles_4615/201208/20120814151633301.jpg)
Cortex_M3的指令集提供了CLZ指令,则可选地使用汇编指令实现CPU_CntLeadZeros()函数,以加快μC/OS-III调度器查找最高优先级的就绪任务的速度,CPU_CntLeadZeros()函数汇编代码实现如下:
CPU_CntLeadZeros
CLZ R0,R0
BX LR
2.4 BSP |
|
|
|
|
|