一,移植UCOSII操作系统的CPU前提条件
1,处理器的C编译器能产生可重入型的代码,如果不行的话,那么就不能在任务之间随意的切换,因为当你切换到别的任务的时候,该任务在这个函数的数据就会被破坏。
2,处理器CPU支持中断,并能产生定时中断
3,用C语言就可以开关中断,进行任务切换
4,处理器CPU能够支持一定数量的数据存储硬件堆栈,也就是栈
5,处理器有将堆栈指针以及其他的CPU的寄存器的内容读出,并存储到堆栈或者内存中去的指令。任务切换的时候,需要将当前的CPU指针保存到刚刚执行的任务当中。然后切换到优先级更高的任务当中。
二,UCOSII实际移植的文件:
UCOSII的移植实例就是要求用户编写4个简单的汇编语言函数,如果编译器支持插入行汇编代码就可以将所有的与处理器相关的代码放置到OS_CPU_C.c里面种,就不需要适用汇编文件。
(1)OSStartHighRdy(); //使得最高优先级的任务运行的函数
OSStart()函数调用OSStartHighRdy()来使得就绪太任务中最高优先级的任务开始运行
void OSStartHighRdy()
{
调用用户定义的OSTaskSwHook();
OSRunning = TRUE;
//得到将要恢复运行的任务的堆栈指针。
stack pointer = OSTcbHighRdy->OSTCBStkPtr;
//从新的堆栈中恢复处理器的所有的寄存器,就是把刚刚切换的堆栈保存到别的地方当中
//执行中断返回,然后跳转PC指针到别的地方中去。
}
本文详细阐述了移植UCOSII操作系统所需的CPU前提条件,包括处理器的C编译器、中断支持、数据存储堆栈等。同时介绍了移植过程中需要编写的四个关键汇编语言函数,如OSStartHighRdy()和OSCtxSw()。文章还提到了实际移植时需要关注的三个关键文件:OS_CPU.h、OS_CPU_C.c和OS_CPU_A.s,并解析了其中涉及的OSTaskStkInit()、OSTaskCreateHook()等重要函数的用途和功能。
订阅专栏 解锁全文
2276

被折叠的 条评论
为什么被折叠?



