您的位置 首页 设计

Uc/os-II的移植

Uc/os-II的移植与FreeRTOS的移植很相似,FreeRTOS 的移植大致由3 个文件实现,一个.h 文件定义编译器相关的数据类型和中断处理的宏定义;一个.c 文件实现任

Uc/os-II的移植与FreeRTOS的移植很类似,FreeRTOS 的移植大致由3 个文件完成,一个.h 文件界说编译器相关的数据类型和中止处理的宏界说;一个.c 文件完成使命的仓库初始化、体系心跳的办理和使命切换的恳求;一个.s 文件完成详细的使命切换。Uc/os-II的移植主要由OS-CPU.H、OS-CPU-C.C以及OS-CPU-A.ASM完成。

1. INCLUDE.H

INCLUDE.H是一个主头文件,它出现在每个.C文件的第1行。

能够经过从头修改INCLUDE.H,增加自己的头文件,但头文件有必要增加在头文件列表的最终。

2. OS-CPU.H

OS-CPU.H包含了用|define句子界说的、与处理器相关的常数、宏以及类型。

3. OS-CPU-C.C

Uc/os-II的移植要求用户编写10个简略的C函数:(Hook结束表明相应的接口函数)

(1) OSTaskStkInit( ) 初始化使命的栈结构

OSTaskCreate( )和OSTaskCreatExt()经过调用它来初始化使命的栈结构;因而,仓库看起来就像中止刚发生过相同,一切的寄存器都保存在仓库中。别的,在初始化仓库今后,OSTaskStkInit( )应当回来仓库指针所指向的地址。

(2) OSTaskCreateHook( )

每逢增加使命时,OS-TCBInit()函数都会调用OSTaskCreateHook( )

函数,当其被调用时,它会收到指向刚刚树立使命的使命操控块的指针。这样,它就能够拜访使命操控块结构的一切的成员了。若用OSTaskCreate()树立使命,OSTaskCreateHook( )的功用是有限的;但若运用OSTaskCreateExt()树立使命时,会得到OS-TCB中的扩展指针(OSTCBExtPtr)。该指针可用来拜访使命的附加数据,如浮点寄存器、MMU寄存器、使命计数器、以及调试信息。能够查看OS-TCBInit()看做了哪些作业。

(3) OSTaskDelHook( )

在使命从安排妥当列表或等候列表中被删去后,OSTaskDel()就会调用OSTaskDelHook( )。当调用当时,它会收到一个指向正在被删去使命的使命操控块的指针,使它能够拜访使命操控块结构的一切的成员。

(4) OSTaskSwHook( )

使命切换时被调用,能够直接拜访OSTCBCur和OSTCBHighRdy这2个全局变量。OSTCBCur指向将被切换出去的使命的使命操控块,OSTCBHighRdy指向新使命的使命操控块。

(5) OSTaskIdleHook( )

OSTaskIdle()可调用OSTaskIdleHook( )完成CPU的低功耗形式。

(6) OSTaskStatHook( )

每秒都会被计算使命OSTaskStat()调用一次,能够用其扩展计算使命功用。例如,能够盯梢并显现每个使命的履行时间、每个使命所用的CPU比例以及每个使命履行的频率等等。

(7) OSTimeTickHook( )

每个时钟节拍都会被OSTimeTick()调用。

(8) OSInitHookBegin( )

进入OSInit()函数后,OSInitHookBegin( )就立即被调用,增加其原因在于,这个函数使得用户能够将自己特定代码也放在OSInit()中,使代码简洁明了。

(9) OSInitHookEnd( )

与OSInitHookBegin( )类似,仅仅它在OSInit()函数回来之前被调用。

(10)OSTCBInitHook( )

OS-TCBInit()函数在调用OSTaskCreateHook( )之前,会先调用OSTCBInitHook( )。原因在于,用户能够在OSTCBInitHook( )中做一些与初始化操控块OS-TCB有关的处理;在OSTaskCreateHook( )中做一些以初始化使命有关的处理。同OSTaskCreateHook( )相同,OSTCBInitHook( )会收到指向新增加使命的使命操控块的指针。

4.OS-CPU-A.ASM

Uc/os-II的移植要求用户编写4个简略的汇编语言函数:

(1) OSStartHighRdy()

OSStart()函数调用OSStartHighRdy()来使安排妥当使命中优先级最高的使命开端运转。牢记,在调用OSStart()之前,要现已树立了至少1个使用使命。

(2) OSCtxSw()

使命级的切换是经过履行软中止指令,或许根据处理器的不同,TRAP(圈套)指令来完成的。中止服务子程序,圈套或反常处理的向量地址有必要指向OSCtxSw()。

(3) OSIntCtxSw()

OSIntExit()经过调用OSIntCtxSw(),在ISR中履行使命切换功用。OSIntCtxSw()与OSCtxSw()很类似,差异仅仅,由于ISR现已保存了CPU的寄存器,而不需要再在OSIntCtxSw()函数中保存。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/sheji/299896.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部