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

📄 ggt_mut.lst

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


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

stmt  level    source

    1          /****************************************************************************************************
    2          **                                        Gogoto OS
    3          **                                   The Real-Time Kernel
    4          **                           (c) Copyright 2007-2008, luyigui(卢益贵)
    5          **                                     All Rights Reserved
    6          **                                         V1.00.0
    7          **
    8          **                             狗狗兔嵌入式多任务系统(基于消息机制)    
    9          **                       绿城代码、GGT-OS、Gogoto OS、狗狗兔嵌入式、狗狗兔系统
   10          **                                      QQ:48092788
   11          **
   12          **------------------文件信息------------------------------------------------------------------------
   13          **  文件名: GGT_Mut.c
   14          **  创建人: 卢益贵
   15          **  日 期: 2007年12月8日
   16          **  版  本: V1.00.0
   17          **  描  述: Gogoto OS 任务排斥功能单元
   18          **
   19          
   20          **------------------修改记录------------------------------------------------------------------------
   21          **  修改人:
   22          **  版  本:
   23          **  日 期:
   24          **  描 述:
   25          **
   26          
   27          ****************************************************************************************************/
   28          
   29          #include        "GGT_OS.h"
   30          #include        "GGT_CPU.h"
   31          #include        "GGT_Func.h"
   32          #include        "GGT_SysType.h"
   33          #include        "GGT_Kernel.h"
   34          
   35          /****************************************************************************************************
   36          **  函数名: OSMutInit
   37          **  描  述: 互斥变量初始化
   38          **  输 入: pMut:互斥变量指针
   39          **  输 出: 无
   40          **  创建人: 卢益贵
   41          **  日 期: 2007年12月8日
   42          
   43          **------------------修改记录------------------------------------------------------------------------
   44          **  修改人: 卢益贵
   45          **  日 期: 2008年1月7日
   46          **  说  明:
   47          **  原代码:
   48          **--------------------------------------------------------------------------------------------------
   49          ****************************************************************************************************/
   50          void OSMutInit(_pMut pMut)
   51          {
   52   1          OSIRQLock();
   53   1      
   54   1          pMut->IsBusy = FALSE;
   55   1          pMut->pTask = NULL;
   56   1          pMut->Count = 0;
   57   1          pMut->Owner = 0;
   58   1      
ARM COMPILER V2.32a,  GGT_Mut                                                              28/02/08  23:05:55  PAGE 2   

   59   1          OSIRQUnlock();
   60   1      }
   61          
   62          /****************************************************************************************************
   63          **  函数名: OSMutRelease
   64          **  描  述: 互斥量释放
   65          **  输 入: pMut:互斥变量指针
   66          **  输 出: 无
   67          **  创建人: 卢益贵
   68          **  日 期: 2007年12月8日
   69          
   70          **------------------修改记录------------------------------------------------------------------------
   71          **  修改人: 卢益贵
   72          **  日 期: 2008年1月7日
   73          **  说  明:
   74          **  原代码:
   75          **--------------------------------------------------------------------------------------------------
   76          ****************************************************************************************************/
   77          void OSMutRelease(_pMut pMut)
   78          {
   79   1          _pOSTask pTask;
   80   1      
   81   1          OSIRQLock();
   82   1      
   83   1          pMut->Count--;
   84   1      
   85   1          if(0 >= pMut->Count)
   86   1          {   
   87   2              if(pMut->pTask)
   88   2              {
   89   3                  pMut->IsBusy = TRUE;
   90   3                  pMut->Owner = pTask->ID;
   91   3                  pMut->Count = 0;
   92   3                  pTask = pMut->pTask;
   93   3                  ((_pOSTask)(pMut->pTask)) = ((_pOSTask)(pMut->pTask))->pNext;
   94   3                  OSTaskPushReady(pTask);
   95   3                  OSTaskSW();
   96   3              }else
   97   2                  pMut->IsBusy = FALSE;
   98   2          }
   99   1      
  100   1          OSIRQUnlock();
  101   1      }
  102          
  103          /****************************************************************************************************
  104          **  函数名: OSMutWait
  105          **  描  述: 互斥量等待。
  106          **  输 入: pMut:互斥变量指针
  107          **  输 出: 无
  108          **  创建人: 卢益贵
  109          **  日 期: 2007年12月8日
  110          
  111          **------------------修改记录------------------------------------------------------------------------
  112          **  修改人: 卢益贵
  113          **  日 期: 2008年1月7日
  114          **  说  明:
  115          **  原代码:
  116          **--------------------------------------------------------------------------------------------------
  117          ****************************************************************************************************/
  118          void OSMutWait(_pMut pMut)
  119          {
  120   1          OSIRQLock();
  121   1          
  122   1          if(pMut->IsBusy)
  123   1          {
  124   2              if(pMut->Owner != pOSTskNow->ID)            
ARM COMPILER V2.32a,  GGT_Mut                                                              28/02/08  23:05:55  PAGE 3   

  125   2              {
  126   3                  pOSTskNow->State = OS_STATE_TSK_WAIT_MUT;
  127   3                  //按权限排序,权限高的在前面。
  128   3                  ListInsert(&(pMut->pTask), pOSTskNow, OSTaskOrderByPrio);
  129   3                  OSTaskIsNULLLoadDef();
  130   3                  OSTaskSW();
  131   3              }else
  132   2                  pMut->Count++;
  133   2          }else
  134   1          {
  135   2              pMut->Count = 0;
  136   2              pMut->Owner = pOSTskNow->ID;
  137   2              pMut->IsBusy = TRUE;
  138   2          }
  139   1      
  140   1          OSIRQUnlock();
  141   1      }
  142           
  143           
ARM COMPILER V2.32a,  GGT_Mut                                                              28/02/08  23:05:55  PAGE 4   

ASSEMBLY LISTING OF GENERATED OBJECT CODE



*** EXTERNALS:
 EXTERN CODE32 (SWI_Handler?A)
 EXTERN CODE32 (ListInsert?A)
 EXTERN DATA (pOSTskNow)
 EXTERN CODE32 (OSTaskPushReady?A)
 EXTERN CODE32 (OSTaskIsNULLLoadDef?A)
 EXTERN CODE32 (OSTaskOrderByPrio?A)



*** PUBLICS:
 PUBLIC         OSMutWait?A
 PUBLIC         OSMutRelease?A
 PUBLIC         OSMutInit?A



*** CODE SEGMENT '?PR?OSMutInit?A?GGT_Mut':
   50: void OSMutInit(_pMut pMut)
 00000000  E92D4010  STMDB       R13!,{R4,LR}
 00000004  E1A04000  MOV         R4,R0 ; pMut
 00000008  ---- Variable 'pMut' assigned to Register 'R4' ----
   52:     OSIRQLock();
 00000008  E3A00002  MOV         R0,#0x2
 0000000C  EF000000  SWI         0x0 ; SWI_Handler?A
   54:     pMut->IsBusy = FALSE;
 00000010  E3A01000  MOV         R1,#0x0

⌨️ 快捷键说明

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