嵌入式实时操作系统uC/os

您所在的位置:网站首页 uc-os如何进行任务切换 嵌入式实时操作系统uC/os

嵌入式实时操作系统uC/os

2024-07-16 19:41| 来源: 网络整理| 查看: 265

uC/OS-II的任务调度的思想是:“近似地每时每刻让优先级最高的就绪任务处于运行状态”。

 调度器的定义:在多任务系统中,令CPU中止当前正在运行的任务转而去运行另一个任务的工作叫做任务切换,而按照某种规则进行任务切换的工作叫做任务的调度。

uC/OS-II中,任务调度由任务调度器来完成。任务调度器的主要工作有两项:一是在任务就绪表中查找具有最高优先级别的就绪任务;二是实现任务的切换。

调度器的种类 任务级:函数OSSched()实现。中断级:函数OSIntExt()实现。

调度器把任务切换的工作分为两个步骤:第一步是获得待运行任务的TCB指针;第二步进行断点数据的切换。

获得待运行就绪任务控制块的指针

        由于操作系统是通过任务的任务控制块TCB来管理任务,因此调度器真正实施任务切换之前的主要工作就是要获得待运行任务的任务控制块指针和当前任务的任务控制块指针。

因为被中止的任务的任务控制块指针就存放在全局变量OSTCBCur中,所以调度器这部分的工作主要是获得待运行任务的任务控制块指针。 任务级调度器OSSched()的源代码如下:

void OSSched(void)

{

         #if OS_CRITICAL_MOTHOD == 3

                   OS_CPU_SR cpu_sr;

         #endif

        

         INT8U y;

        

OS_ENTER_CRITICAL();

if((OSLockNesting | OSIntNesting ) == 0)

{

         y = OSUnMapTbl[OSRdyGrp];  //得到最高优先任务

         OSPrioHighRdy = (INT8U) ((y



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3