欢迎来到天天文库
浏览记录
ID:14213338
大小:284.11 KB
页数:8页
时间:2018-07-26
《ucos-ii多核移植》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、uC/OS-II是源码开放、可固化、可移植、可裁剪、可剥夺的实时多任务OS内核,适用于任务多、对实时性要求较高的场合。uC/OS-II适合小型系统,具有执行效率高、占用空间小、实时性优良和可扩展性等特点,最小内核可编译至2K。uC/OS-II内核提供任务调度与管理、时间管理、任务间同步与通信、内存管理和中断服务等功能。所谓RTOS移植,就是使一个实时内核能在某个微处理器或微控制器上运行。大部分的uC/OS-II代码试用C写的,但仍需要用C和ASM写一些与处理器相关的代码,这是因为uC/OS-II在读写处理器
2、寄存器时只能通过ASM实现。要是uC/OS-II正常运行,处理器必须满足一定的条件:Ø处理器的C编译器能产生可重入代码;Ø用C语言就可以打开和关闭中断;Ø处理器支持中断,并能产生定时中断;Ø处理器支持能够容纳一定量数据的硬件堆栈;Ø处理器有将SP和其他CPUreg读出和存储到堆栈或内存中的指令;uC/OS-II移植工作主要包括以下三个方面的内容:(1)修改与处理器核编译器相关的代码:主要在includes.h中,修改数据类型定义说明,OS_ENTER_CRITICAL()、OS_EXIT_CRITICAL(
3、)和堆栈增长方向定义OS_STK_GROWTH。(2)用C语言编写10个移植相关的函数:主要在OS_CPU_C.C中,包括堆栈初始化OSTaskStkInit()和各种回调函数。(3)编写4个汇编语言函数:主要在OS_CPU_A.ASM中,包括:Ø_OSTickISR//时钟中断处理函数Ø_OSIntCtxSW//从ISR中调用的任务切换函数Ø_OSCtxSW//从任务中调用的任务切换函数Ø_OSStartHighRdy//启动最高优先级的任务uC/OS-II移植的关键问题:(1)临界区访问:uC/OS-I
4、I需要先禁止中断再访问代码临界段,并且在访问完毕后重新允许中断,这就使得uC/OS-II能够保护临界段代码免受多任务或ISR的破坏。uC/OS-II定义了OS_ENTER_CRITICAL()(禁止中断)和OS_EXIT_CRITICAL()(允许中断),有3种实现方法。(2)系统引导:uC/OS-II引导分为两部分:一是处理器相关的引导,包括初始化处理器状态、数据段、SP等,一是OS相关的引导,包括系统各个数据结构的初始化、初始任务的创建等,最终执行到_OSStartHighRdy开启多任务执行。与uC/
5、OS-II引导相关的几个移植函数是OSStartHighRdy、OSTaskStkInit和OSTickISR,其中OSTaskStkInit负责初始化任务堆栈,初始化的堆栈数据会在任务第一次被调用执行时装入相应的寄存器。在OSStartHighRdy前执行的所有代码都是为多任务启动做准备,由OSStartHighRdy开始才真正的启动多任务环境,OSStartHighRdy执行后不会返回,而是直接切换到最高优先级任务运行。(1)堆栈切换和管理:堆栈切换伴随任务切换而发生,uC/OS-II中主要有三个地方发
6、生堆栈切换:Ø在OSStartHighRdy启动多任务时,将任务堆栈初始内容弹出堆栈;Ø在OSIntCtxSW中切换,在中断返回时如果最高优先级的任务发生了改变,就需要调用这个函数切换任务;Ø在OSCtxSW中切换,这是主动调用OSSched等函数触发的任务切换,在任务中以软中断方式触发该调用;影响堆栈切换的另一个因素是中断嵌套,uC/OS-II中的中断嵌套通过全局变量OSIntNesting控制。当进入中断时,只有最外层的中断(也就是第一次进入的中断)需要将当前的SP保存在TCB中;相应的,只有最外层的中
7、断返回时才需要进行可能的堆栈切换。uC/OS-II多NiosII软核扩展---uC/OS-MC在多NiosII软核上扩展的uC/OS-II称为uC/OS-MC,uC/OS-MC期望能够实现其对于多核处理器的支持,实现传统的CMP架构,即运行一个RTOS动态的调度任务到各个CPU核上运行,保证任务的优先级和CPU核的负载平衡。对uC/OS-MC,需要保证有最高优先级的N个任务始终运行,N代表系统中NiosII核的数量,这是对任务优先级的保证;还要保证处理器的负载均衡,任意一个处理器核如果运行空转任务,说明系统
8、中不存在就绪运行的任务。uC/OS-MC移植设计难点一是多核处理器的引导,怎样将多核处理器启动,完成各个处理器核的初始化,同时还要保证各个处理器核间的同步,以使其能够在几乎同一时间进入任务调度;二是多核处理器的互斥和同步,仅仅禁止某个核的中断处理不能保证临界区的互斥访问,必须采用新的方式实现多核处理器对于临界区的互斥核同步访问;三是任务调度,必须在多核处理器上设计出一个性能良好的调度算法,一方面保证最高优先级任务
此文档下载收益归作者所有