⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ggt_kernel.lst

📁 ARM下的多任务操作系统源码:GogotoOS
💻 LST
📖 第 1 页 / 共 5 页
字号:
  266          
  267          **------------------修改记录------------------------------------------------------------------------
  268          **  修改人: 
  269          **  日 期:
  270          **  说  明:
  271          **  原代码:
  272          **--------------------------------------------------------------------------------------------------
  273          ****************************************************************************************************/
  274          BOOL Resume(OS_ID TaskID)
  275          {
  276   1          _pOSTask pTask;
  277   1          BOOL R;
  278   1      
  279   1          R = FALSE;
  280   1          OSIRQLock();
  281   1      
  282   1          pTask = &(pOSTask[TaskID - 1]);
  283   1          if(OS_STATE_TSK_SUSPEND & pTask->State)
  284   1          {
  285   2              pTask->State &= (~OS_STATE_TSK_SUSPEND);
  286   2              //如果原来是延迟状态,则继续延迟
  287   2              if(pTask->State & OS_STATE_TSK_DELAY)
  288   2                  ListAppend((void *)(&pOSTskDelay), (void *)pTask);
  289   2              else
  290   2              //如果原来是就绪状态,则进入就绪队列
  291   2              if(pTask->State & OS_STATE_TSK_READY)
  292   2                  ListAppend((void *)(&pOSTskReady), (void *)pTask);
  293   2              R = TRUE;
  294   2          }
  295   1          OSIRQUnlock();
  296   1      
  297   1          return(R);
  298   1      }
  299           
  300          /****************************************************************************************************
  301          **  函数名: Suspend
  302          **  描  述: 挂起任务
  303          **  输 入: TaskID:任务ID号
  304          **  输 出: 无
  305          **  创建人: 卢益贵
  306          **  日 期: 2007年12月8日
  307          
  308          **------------------修改记录------------------------------------------------------------------------
  309          **  修改人: 
  310          **  日 期:
  311          **  说  明:
  312          **  原代码:
  313          **--------------------------------------------------------------------------------------------------
  314          ****************************************************************************************************/
  315          void Suspend(OS_ID TaskID)
  316          {
  317   1          _pOSTask pTask;
  318   1      
  319   1          OSIRQLock();
  320   1      
  321   1          pTask = &(pOSTask[TaskID - 1]);
  322   1          pTask->State |= OS_STATE_TSK_SUSPEND;
ARM COMPILER V2.32a,  GGT_Kernel                                                           28/02/08  23:05:55  PAGE 6   

  323   1          ListDelete((void *)(&pOSTskReady), (void *)pTask);
  324   1          ListDelete((void *)(&pOSTskDelay), (void *)pTask);
  325   1      
  326   1          if(pOSTskNow->ID == TaskID)
  327   1          {
  328   2              OSTaskIsNULLLoadDef();
  329   2              OSTaskSW();
  330   2          }
  331   1      
  332   1          OSIRQUnlock();
  333   1      }
  334          
  335          /****************************************************************************************************
  336          **  函数名: OSTaskPushDelay
  337          **  描  述: 将任务放进迟延队列,并设相应标志
  338          **  输 入: pTask:指向任务空间的指针
  339          **  输 出: 无
  340          **  创建人: 卢益贵
  341          **  日 期: 2007年12月8日
  342          
  343          **------------------修改记录------------------------------------------------------------------------
  344          **  修改人: 
  345          **  日 期:
  346          **  说  明:
  347          **  原代码:
  348          **--------------------------------------------------------------------------------------------------
  349          ****************************************************************************************************/
  350          void OSTaskPushDelay(_pOSTask pTask)
  351          {
  352   1          pTask->State = OS_STATE_TSK_DELAY;
  353   1          pTask->StateValue = pTask->PrioTick;
  354   1          ListAppend((void *)(&pOSTskDelay), (void *)pTask);
  355   1      }
  356          
  357          /****************************************************************************************************
  358          **  函数名: OSTaskPushReady
  359          **  描  述: 将任务放进就绪队列,并设相应标志
  360          **  输 入: pTask:指向任务空间的指针
  361          **  输 出: 无
  362          **  创建人: 卢益贵
  363          **  日 期: 2007年12月8日
  364          
  365          **------------------修改记录------------------------------------------------------------------------
  366          **  修改人: 
  367          **  日 期:
  368          **  说  明:
  369          **  原代码:
  370          **--------------------------------------------------------------------------------------------------
  371          ****************************************************************************************************/
  372          void OSTaskPushReady(_pOSTask pTask)
  373          {
  374   1          pTask->State = OS_STATE_TSK_READY;
  375   1          ListAppend((void *)(&pOSTskReady), (void *)pTask);
  376   1      }
  377          
  378          /****************************************************************************************************
  379          **  函数名: OSTaskDelay
  380          **  描  述: 将任务迟延指定的时间
  381          **  输 入: Time:迟延时长,单位:毫秒
  382          **  输 出: 无
  383          **  创建人: 卢益贵
  384          **  日 期: 2007年12月8日
  385          
  386          **------------------修改记录------------------------------------------------------------------------
  387          **  修改人: 
  388          **  日 期:
ARM COMPILER V2.32a,  GGT_Kernel                                                           28/02/08  23:05:55  PAGE 7   

  389          **  说  明:
  390          **  原代码:
  391          **--------------------------------------------------------------------------------------------------
  392          ****************************************************************************************************/
  393          void OSTaskDelay(UINT32 Time)
  394          {
  395   1          OSIRQLock();                
  396   1      
  397   1          OSTaskPushDelay(pOSTskNow);
  398   1          pOSTskNow->StateValue = (Time * OSGetTick()) / 1000;
  399   1          OSTaskIsNULLLoadDef();
  400   1          OSTaskSW();
  401   1      
  402   1          OSIRQUnlock();
  403   1      }
  404          
  405          /****************************************************************************************************
  406          **  函数名: OSTaskDispatch
  407          **  描  述: 进行任务调度,函数始终保持就绪队列有任务
  408          **  输 入: 无
  409          **  输 出: 无
  410          **  创建人: 卢益贵
  411          **  日 期: 2007年12月8日
  412          
  413          **------------------修改记录------------------------------------------------------------------------
  414          **  修改人: 
  415          **  日 期:
  416          **  说  明:
  417          **  原代码:
  418          **--------------------------------------------------------------------------------------------------
  419          ****************************************************************************************************/
  420          void OSTaskDispatch(void)
  421          {
  422   1          _pOSTask pTask, p;
  423   1      
  424   1          pTask = pOSTskDelay;
  425   1          while(pTask)
  426   1          {
  427   2              pTask->StateValue--;        
  428   2              if(pTask->StateValue <= 0)
  429   2              {
  430   3                  p = pTask;
  431   3                  pTask = pTask->pNext;
  432   3                  ListDelete((void *)(&pOSTskDelay), (void *)p);
  433   3                  OSTaskPushReady(p);
  434   3              }else
  435   2                  pTask = pTask->pNext;
  436   2          }
  437   1      
  438   1          //如果有新任务,则让贤,否则还是我当王
  439   1          if(pOSTskReady)
  440   1              OSTaskPushDelay(pOSTskNow);
  441   1          else
  442   1              OSTaskPushReady(pOSTskNow);
  443   1      }
  444          
  445          /****************************************************************************************************
  446          **  函数名: OSTaskIsNULLLoadDef
  447          **  描  述: 当要立即进行任务切换时,判断就绪队列是否为空,是则加载默认任务
  448          **  输 入: 无
  449          **  输 出: 无
  450          **  创建人: 卢益贵
  451          **  日 期: 2007年12月8日
  452          
  453          **------------------修改记录------------------------------------------------------------------------
  454          **  修改人: 
ARM COMPILER V2.32a,  GGT_Kernel                                                           28/02/08  23:05:55  PAGE 8   

  455          **  日 期:
  456          **  说  明:
  457          **  原代码:
  458          **--------------------------------------------------------------------------------------------------
  459          ****************************************************************************************************/
  460          void OSTaskIsNULLLoadDef(void)
  461          {
  462   1          if(!pOSTskReady)
  463   1          {       
  464   2              ListDelete((void *)(&pOSTskDelay), (void *)pOSTskMain);
  465   2              OSTaskPushReady(pOSTskMain);
  466   2          }
  467   1      }
  468          
  469          /****************************************************************************************************
  470          **  函数名: OSTaskInit
  471          **  描  述: 在进入用户初始化之前,必须调用本函数初始化任务空间
  472          **  输 入: 无
  473          **  输 出: 无
  474          **  创建人: 卢益贵
  475          **  日 期: 2007年12月8日
  476          
  477          **------------------修改记录------------------------------------------------------------------------
  478          **  修改人: 
  479          **  日 期:
  480          **  说  明:
  481          **  原代码:
  482          **--------------------------------------------------------------------------------------------------
  483          ****************************************************************************************************/
  484          void OSTaskInit(void)
  485          {
  486   1          INT32 i;
  487   1      
  488   1          pOSBoxMsg = (UINT32 *)OSGetBoxMsg();
  489   1          BoxInit(pOSBoxMsg, sizeof(_BoxHead) + OSGetSumMsg() * sizeof(_OSMsg), sizeof(_OSMsg));
  490   1      
  491   1          pOSTask = &(((_pOSBoxTask)OSGetBoxTask())->Task[0]);
  492   1          
  493   1          for(i = 0; i < OSGetSumTask(); i++)
  494   1              pOSTask[i].ID = i + 1;
  495   1          
  496   1          BoxInit(OSGetBoxTask(), sizeof(_BoxHead) + OSGetSumTask() * sizeof(_OSTask), sizeof(_OSTask));
  497   1          BoxInit(OSGetBoxStack(), sizeof(_BoxHead) + OSGetSumTask() * OSGetSizeStack(), OSGetSizeStack());
  498   1          
  499   1          
  500   1          pOSTskMain = &(pOSTask[OSGetSumTask()]);
  501   1          OSTaskDataInit(pOSTskMain);
  502   1          pOSTskMain->PrioTick = OSTaskGetPrioTick(255);
  503   1          pOSTskMain->pStack = OSStackAlloc();
  504   1          pOSTskMain->pTskStack = pOSTskMain->pStack;
  505   1          //设置当前任务为默认任务
  506   1          pOSTskNow = pOSTskMain; 
  507   1      }
  508          
  509          /****************************************************************************************************
  510          **  函数名: OSInit
  511          **  描  述: 系统初始化函数
  512          **  输 入: 无
  513          **  输 出: 无
  514          **  创建人: 卢益贵
  515          **  日 期: 2008年1月12日
  516          
  517          **------------------修改记录------------------------------------------------------------------------
  518          **  修改人: 
  519          **  日 期:
  520          **  说  明:
ARM COMPILER V2.32a,  GGT_Kernel                                                           28/02/08  23:05:55  PAGE 9   

  521          **  原代码:
  522          **--------------------------------------------------------------------------------------------------
  523          ****************************************************************************************************/
  524          void OSInit(void)
  525          {
  526   1          OSTaskInit();
  527   1          OSTimerInit();
  528   1      }
  529          
  530          /****************************************************************************************************
  531          **  函数名: OSTaskMsgPost
  532          **  描  述: 消息发送函数,不等待目标处理,不管收到与否
  533          **  输 入: TaskID:目标任务的ID,
  534                      Msg:消息内容,
  535                      wParam:消息参数
  536                      lParam:消息参数
  537          **  输 出: 返回0表示失败,1:表示成功,2:表示对方进入处理队列
  538          **  创建人: 卢益贵
  539          **  日 期: 2007年12月8日
  540          

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -