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

📄 ggt_kernel.lst

📁 ARM下的多任务操作系统源码:GogotoOS
💻 LST
📖 第 1 页 / 共 5 页
字号:
ARM COMPILER V2.32a,  GGT_Kernel                                                           28/02/08  23:05:55  PAGE 1   


ARM COMPILER V2.32a, COMPILATION OF MODULE GGT_Kernel
OBJECT MODULE PLACED IN .\Output\GGT_Kernel.obj
COMPILER INVOKED BY: D:\Program Files\Keil\ARM\BIN\CA.exe Source\Kernel\GGT_Kernel.c ARM BROWSE DEBUG PRINT(.\LIST\GGT_K
                    -ERNEL.LST) TABS(4) OBJECT(.\Output\GGT_Kernel.obj) 

stmt  level    source

    1          /****************************************************************************************************
    2          **                                        Gogoto OS
    3          **                           (c) Copyright 2007-2008, luyigui(卢益贵)
    4          **                                     All Rights Reserved
    5          **                                         V1.00.0
    6          **
    7          **                             狗狗兔嵌入式多任务系统(基于消息机制)    
    8          **                       绿城代码、GGT-OS、Gogoto OS、狗狗兔嵌入式、狗狗兔系统
    9          **                                      QQ:48092788
   10          **
   11          **------------------文件信息------------------------------------------------------------------------
   12          **  文件名: GGT_Kernel.c
   13          **  创建人: 卢益贵
   14          **  日 期: 2007年12月8日
   15          **  版  本: V1.00.0
   16          **  描  述: Gogoto OS 与CPU无关的核心代码部分
   17          **
   18          
   19          **------------------修改记录------------------------------------------------------------------------
   20          **  修改人: 卢益贵
   21          **  版  本: V1.20.0
   22          **  日 期: 2008年1月30日
   23          **  描 述: 
   24          **
   25          
   26          ****************************************************************************************************/
   27          
   28          #include        "GGT_OS.h"
   29          #include        "GGT_CPU.h"
   30          #include        "GGT_Func.h"
   31          #include        "GGT_Kernel.h"
   32          
   33          _pOSTask
   34          //系统默认任务变量,指向默认任务的数据区,默认任务在系统出世化时,具有最高优先级别,
   35          //初始化完了以后,默认任务进行永久的休眠(挂起),直到用户任务都挂起后,担当工作的角色
   36          pOSTskMain = NULL,
   37          //当前任务变量
   38          pOSTskNow = NULL,
   39          //就绪任务队列变量
   40          pOSTskReady = NULL,
   41          //迟延等待任务队列变量
   42          pOSTskDelay = NULL;
   43          
   44          //指向任务数据机构数据的变量
   45          _pOSTask pOSTask;
   46          
   47          UINT32 *pOSBoxMsg;
   48          
   49          /****************************************************************************************************
   50          **  函数名: OSTaskGetPrioTick
   51          **  描  述: 根据任务权限,计算任务权限节拍
   52          **  输 入: Prio:任务权限
   53          **  输 出: 任务权限节拍
   54          **  创建人: 卢益贵
   55          **  日 期: 2008年1月5日
   56          
   57          **------------------修改记录------------------------------------------------------------------------
   58          **  修改人: 
ARM COMPILER V2.32a,  GGT_Kernel                                                           28/02/08  23:05:55  PAGE 2   

   59          **  日 期:
   60          **  说  明:
   61          **  原代码:
   62          **--------------------------------------------------------------------------------------------------
   63          ****************************************************************************************************/
   64          UINT32 OSTaskGetPrioTick(UINT32 Prio)
   65          {
   66   1          if(0 == Prio)
   67   1              return(255);
   68   1          else
   69   1          if(255 < Prio)
   70   1              return(1);
   71   1          else
   72   1              return(256 - Prio);
   73   1      }
   74          
   75          /****************************************************************************************************
   76          **  函数名: OSTaskOrderByPrio
   77          **  描  述: 根据任务权限,告诉ListInsert函数是否在此处插入。
   78          **  输 入: pNode:当前节点
   79                      pNodeIns:欲插入的节点
   80          **  输 出: 1:允许在此处插入,其他不定义
   81          **  创建人: 卢益贵
   82          **  日 期: 2008年1月7日
   83          
   84          **------------------修改记录------------------------------------------------------------------------
   85          **  修改人: 
   86          **  日 期:
   87          **  说  明:
   88          **  原代码:
   89          **--------------------------------------------------------------------------------------------------
   90          ****************************************************************************************************/
   91          BOOL OSTaskOrderByPrio(void *pNode, void *pNodeIns)
   92          {
   93   1          if(((_pOSTask)pNodeIns)->PrioTick < ((_pOSTask)pNode)->PrioTick)
   94   1              return(1);
   95   1          else
   96   1              return(0);
   97   1      }
   98          
   99          /****************************************************************************************************
  100          **  函数名: OSTaskDataInit
  101          **  描  述: 执行新建任务的任务数据初始化
  102          **  输 入: pTask:任务数据区指针
  103          **  输 出: 无
  104          **  创建人: 卢益贵
  105          **  日 期: 2007年12月8日
  106          
  107          **------------------修改记录------------------------------------------------------------------------
  108          **  修改人: 
  109          **  日 期:
  110          **  说  明:
  111          **  原代码:
  112          **--------------------------------------------------------------------------------------------------
  113          ****************************************************************************************************/
  114          void OSTaskDataInit(_pOSTask pTask)
  115          {
  116   1          pTask->pNext = NULL;
  117   1          pTask->pTskStack = NULL;
  118   1          pTask->pStack = NULL;
  119   1          pTask->PrioTick = 0;
  120   1          pTask->State = OS_STATE_TSK_NULL;
  121   1          pTask->StateValue = 0;
  122   1          pTask->pMsg = NULL; 
  123   1      }
  124          
ARM COMPILER V2.32a,  GGT_Kernel                                                           28/02/08  23:05:55  PAGE 3   

  125          /****************************************************************************************************
  126          **  函数名: OSTaskCreate
  127          **  描  述: 任务创建函数
  128          **  输 入: pTaskBody:带UINT32类型参数的任务主函数体
  129                      Prio:任务权限,必须在1~255之间,数值越大,权限越大
  130                      Mode:任务运行模式,取决于CPU提供的模式
  131          
  132          **  输 出: 任务ID号
  133          **  创建人: 卢益贵
  134          **  日 期: 2007年12月8日
  135          
  136          **------------------修改记录------------------------------------------------------------------------
  137          **  修改人: 
  138          **  日 期:
  139          **  说  明:
  140          **  原代码:
  141          **--------------------------------------------------------------------------------------------------
  142          ****************************************************************************************************/
  143          UINT32 OSTaskUserCreate(void *pTaskBody, const UINT32 Prio, const UINT32 Mode, const UINT32 TaskParam)
  144          {
  145   1          _pOSTask pTask;
  146   1      
  147   1          //独占CPU
  148   1          OSIRQLock();
  149   1      
  150   1          //分配任务空间
  151   1          pTask = BoxAlloc(OSGetBoxTask());
  152   1          OSTaskDataInit(pTask);
  153   1          pTask->PrioTick = OSTaskGetPrioTick(Prio);
  154   1          //分配堆栈空间
  155   1          pTask->pStack = OSStackAlloc();
  156   1          //初始化堆栈空间
  157   1          pTask->pTskStack = OSStackInit(pTaskBody, pTask->pStack, Mode, TaskParam);
  158   1          //初始化任务空间
  159   1          
  160   1      
  161   1          //挂入就绪队列
  162   1          ListAppend((void *)(&pOSTskReady), (void *)pTask);
  163   1      
  164   1          //释放独占权
  165   1          OSIRQUnlock();
  166   1          
  167   1          return(pTask->ID);
  168   1      }
  169          
  170          /****************************************************************************************************
  171          **  函数名: OSTaskSelf
  172          **  描  述: 获取当前任务的ID
  173          **  输 入: 无
  174          **  输 出: 任务ID号
  175          **  创建人: 卢益贵
  176          **  日 期: 2007年12月8日
  177          
  178          **------------------修改记录------------------------------------------------------------------------
  179          **  修改人: 
  180          **  日 期:
  181          **  说  明:
  182          **  原代码:
  183          **--------------------------------------------------------------------------------------------------
  184          ****************************************************************************************************/
  185          UINT32 OSTaskSelf(void)
  186          {
  187   1          return(pOSTskNow->ID);
  188   1      }
  189          
  190          /****************************************************************************************************
ARM COMPILER V2.32a,  GGT_Kernel                                                           28/02/08  23:05:55  PAGE 4   

  191          **  函数名: OSTaskKill
  192          **  描  述: 摧毁指定ID的任务
  193          **  输 入: 任务ID号
  194          **  输 出: 无
  195          **  创建人: 卢益贵
  196          **  日 期: 2007年12月8日
  197          
  198          **------------------修改记录------------------------------------------------------------------------
  199          **  修改人: 
  200          **  日 期:
  201          **  说  明:
  202          **  原代码:
  203          **--------------------------------------------------------------------------------------------------
  204          ****************************************************************************************************/
  205          void OSTaskKill(OS_ID TaskID)
  206          {
  207   1          _pOSTask pTask;
  208   1      
  209   1          OSIRQLock();
  210   1      
  211   1          pTask = &(pOSTask[TaskID - 1]);
  212   1          //从队列中删除改任务
  213   1          ListDelete((void *)(&pOSTskReady), (void *)pTask);
  214   1          ListDelete((void *)(&pOSTskDelay), (void *)pTask);
  215   1      
  216   1          //释放改任务占有的所有空间
  217   1          BoxFree(OSGetBoxStack(), pTask->pStack);
  218   1          BoxFree(OSGetBoxTask(), pTask);
  219   1      
  220   1          //如果是当前任务
  221   1          if(pOSTskNow->ID == TaskID)
  222   1          {
  223   2              //如果就绪任务空,则运行默认任务
  224   2              OSTaskIsNULLLoadDef();
  225   2              //进行任务切换
  226   2              OSTaskSW();
  227   2          }
  228   1      
  229   1          OSIRQUnlock();
  230   1      }
  231          
  232          /****************************************************************************************************
  233          **  函数名: OSTaskSetPrio
  234          **  描  述: 修改指定任务的权限
  235          **  输 入: TaskID:任务ID号
  236                      Prio:新权限,必须在1-255之间
  237          **  输 出: 无
  238          **  创建人: 卢益贵
  239          **  日 期: 2007年12月8日
  240          
  241          **------------------修改记录------------------------------------------------------------------------
  242          **  修改人: 
  243          **  日 期:
  244          **  说  明:
  245          **  原代码:
  246          **--------------------------------------------------------------------------------------------------
  247          ****************************************************************************************************/
  248          void OSTaskSetPrio(OS_ID TaskID, UINT32 Prio)
  249          {
  250   1          if(0 == Prio)
  251   1              Prio = 1;
  252   1          if(255 < Prio)
  253   1              Prio = 255;
  254   1          OSIRQLock();
  255   1          pOSTask[TaskID -1].PrioTick = 256 - Prio;
  256   1          OSIRQUnlock();
ARM COMPILER V2.32a,  GGT_Kernel                                                           28/02/08  23:05:55  PAGE 5   

  257   1      }
  258          
  259          /****************************************************************************************************
  260          **  函数名: Resume
  261          **  描  述: 将挂起的任务继续
  262          **  输 入: TaskID:任务ID号
  263          **  输 出: 布尔型,TRUE表示成功
  264          **  创建人: 卢益贵
  265          **  日 期: 2007年12月8日

⌨️ 快捷键说明

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