首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

μC/OS-III在Cortex-M3处理器上的移植 03

μ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个寄存器的初值无关重要。
  
  
    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()代码实现如下:
    Cortex_M3的指令集提供了CLZ指令,则可选地使用汇编指令实现CPU_CntLeadZeros()函数,以加快μC/OS-III调度器查找最高优先级的就绪任务的速度,CPU_CntLeadZeros()函数汇编代码实现如下:
   
    CPU_CntLeadZeros
   
    CLZ R0,R0
   
    BX LR
   
    2.4 BSP
返回列表