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

📄 ggt_sem.lst

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


ARM COMPILER V2.32a, COMPILATION OF MODULE GGT_Sem
OBJECT MODULE PLACED IN .\Output\GGT_Sem.obj
COMPILER INVOKED BY: D:\Program Files\Keil\ARM\BIN\CA.exe Source\Kernel\GGT_Sem.c ARM BROWSE DEBUG PRINT(.\LIST\GGT_SEM.
                    -LST) TABS(4) OBJECT(.\Output\GGT_Sem.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_Mem.c
   13          **  创建人: 卢益贵
   14          **  日 期: 2008年1月5日
   15          **  版  本: V1.00.0
   16          **  描  述: Gogoto OS 旗帜功能单元
   17          **
   18          
   19          **------------------修改记录------------------------------------------------------------------------
   20          **  修改人:
   21          **  版  本:
   22          **  日 期:
   23          **  描 述:
   24          **
   25          
   26          ****************************************************************************************************/
   27          
   28          #include        "GGT_OS.h"
   29          #include        "GGT_CPU.h"
   30          #include        "GGT_Func.h"
   31          #include        "GGT_SysType.h"
   32          #include        "GGT_Kernel.h"
   33          
   34          /****************************************************************************************************
   35          **  函数名: OSSemInit
   36          **  描  述: 旗帜初始化
   37          **  输 入: pSem:旗帜指针
   38          **  输 出: 无
   39          **  创建人: 卢益贵
   40          **  日 期: 2008年1月5日
   41          
   42          **------------------修改记录------------------------------------------------------------------------
   43          **  修改人: 
   44          **  日 期:
   45          **  说  明:
   46          **  原代码:
   47          **--------------------------------------------------------------------------------------------------
   48          ****************************************************************************************************/
   49          void OSSemInit(_pSem pSem)
   50          {
   51   1          OSIRQLock();
   52   1      
   53   1          pSem->Flag = 0;
   54   1          pSem->pTask = NULL;
   55   1      
   56   1          OSIRQUnlock();
   57   1      }
   58          
ARM COMPILER V2.32a,  GGT_Sem                                                              28/02/08  23:05:55  PAGE 2   

   59          /****************************************************************************************************
   60          **  函数名: OSSemSend
   61          **  描  述: 旗帜发送函数
   62          **  输 入: pSem:互斥变量指针
   63          **  输 出: 无
   64          **  创建人: 卢益贵
   65          **  日 期: 2008年1月5日
   66          
   67          **------------------修改记录------------------------------------------------------------------------
   68          **  修改人: 
   69          **  日 期:
   70          **  说  明:
   71          **  原代码:
   72          **--------------------------------------------------------------------------------------------------
   73          ****************************************************************************************************/
   74          void OSSemSend(_pSem pSem)
   75          {
   76   1          _pOSTask pTask;
   77   1      
   78   1          OSIRQLock();    
   79   1      
   80   1          if(NULL == pSem->pTask)
   81   1          {
   82   2              while(pSem->pTask)
   83   2              {
   84   3                  pTask = pSem->pTask;
   85   3                  pSem->pTask = ((_pOSTask)(pSem->pTask))->pNext;
   86   3                  OSTaskPushReady(pTask);
   87   3              }
   88   2          }else
   89   1              pSem->Flag = 1;
   90   1      
   91   1          OSIRQUnlock();
   92   1      }
   93          
   94          /****************************************************************************************************
   95          **  函数名: OSSemWait
   96          **  描  述: 旗帜等待函数
   97          **  输 入: pSem:旗帜指针
   98          **  输 出: 无
   99          **  创建人: 卢益贵
  100          **  日 期: 2008年1月5日
  101          
  102          **------------------修改记录------------------------------------------------------------------------
  103          **  修改人: 
  104          **  日 期:
  105          **  说  明:
  106          **  原代码:
  107          **--------------------------------------------------------------------------------------------------
  108          ****************************************************************************************************/
  109          void OSSemWait(_pSem pSem)
  110          {
  111   1          OSIRQLock();
  112   1      
  113   1          if(!pSem->Flag)
  114   1          {       
  115   2              pOSTskNow->State = OS_STATE_TSK_WAIT_SEM;
  116   2              ListInsert(&(pSem->pTask), pOSTskNow, OSTaskOrderByPrio);
  117   2              OSTaskIsNULLLoadDef();
  118   2              OSTaskSW();
  119   2          }else
  120   1              pSem->Flag = 0;
  121   1      
  122   1          OSIRQUnlock();
  123   1      }
  124           
ARM COMPILER V2.32a,  GGT_Sem                                                              28/02/08  23:05:55  PAGE 3   

  125           
ARM COMPILER V2.32a,  GGT_Sem                                                              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         OSSemWait?A
 PUBLIC         OSSemSend?A
 PUBLIC         OSSemInit?A



*** CODE SEGMENT '?PR?OSSemInit?A?GGT_Sem':
   49: void OSSemInit(_pSem pSem)
 00000000  E92D4010  STMDB       R13!,{R4,LR}
 00000004  E1A04000  MOV         R4,R0 ; pSem
 00000008  ---- Variable 'pSem' assigned to Register 'R4' ----
   51:     OSIRQLock();
 00000008  E3A00002  MOV         R0,#0x2
 0000000C  EF000000  SWI         0x0 ; SWI_Handler?A
   53:     pSem->Flag = 0;
 00000010  E3A01000  MOV         R1,#0x0
 00000014  E1A00004  MOV         R0,R4 ; pSem
 00000018  E5801000  STR         R1,[R0,#0x0] ; pSem
   54:     pSem->pTask = NULL;
 0000001C  E3A01000  MOV         R1,#0x0
 00000020  E1A00004  MOV         R0,R4 ; pSem
 00000024  E5801004  STR         R1,[R0,#0x4]
   56:     OSIRQUnlock();
 00000028  E3A00003  MOV         R0,#0x3
 0000002C  EF000000  SWI         0x0 ; SWI_Handler?A
   57: }
 00000030  E8BD0010  LDMIA       R13!,{R4}
 00000034  E8BD0008  LDMIA       R13!,{R3}
 00000038  E12FFF13  BX          R3
 0000003C          ENDP ; 'OSSemInit?A'


*** CODE SEGMENT '?PR?OSSemSend?A?GGT_Sem':
   74: void OSSemSend(_pSem pSem)
 00000000  E92D4010  STMDB       R13!,{R4,LR}
 00000004  E1A04000  MOV         R4,R0 ; pSem
 00000008  ---- Variable 'pSem' assigned to Register 'R4' ----
   75: {
 00000008            ; SCOPE-START
   78:     OSIRQLock();    
 00000008  E3A00002  MOV         R0,#0x2
 0000000C  EF000000  SWI         0x0 ; SWI_Handler?A
   80:     if(NULL == pSem->pTask)
 00000010  E1A00004  MOV         R0,R4 ; pSem
 00000014  E5900004  LDR         R0,[R0,#0x4]
 00000018  E3500000  CMP         R0,#0x0000
 0000001C  1A00000D  BNE         L_1  ; Targ=0x58
   82:         while(pSem->pTask)
 00000020  EA000007  B           L_2  ; Targ=0x44
 00000024          L_4:
   84:             pTask = pSem->pTask;
 00000024  E1A00004  MOV         R0,R4 ; pSem
 00000028  E5900004  LDR         R0,[R0,#0x4]
 0000002C  E1A01000  MOV         R1,R0 ; pTask
 00000030  ---- Variable 'pTask' assigned to Register 'R1' ----
   85:             pSem->pTask = ((_pOSTask)(pSem->pTask))->pNext;
 00000030  E5902000  LDR         R2,[R0,#0x0]
 00000034  E1A00004  MOV         R0,R4 ; pSem
ARM COMPILER V2.32a,  GGT_Sem                                                              28/02/08  23:05:55  PAGE 5   

 00000038  E5802004  STR         R2,[R0,#0x4]
   86:             OSTaskPushReady(pTask);
 0000003C  E1A00001  MOV         R0,R1 ; pTask
 00000040  EBFFFFEE  BL          OSTaskPushReady?A  ; Targ=0x0
   87:         }
 00000044          L_2:
 00000044  E1A00004  MOV         R0,R4 ; pSem
 00000048  E5900004  LDR         R0,[R0,#0x4]
 0000004C  E3500000  CMP         R0,#0x0000
 00000050  1AFFFFF3  BNE         L_4  ; Targ=0x24
   88:     }else
 00000054  EA000002  B           L_6  ; Targ=0x64
 00000058          L_1:
   89:         pSem->Flag = 1;
 00000058  E3A01001  MOV         R1,#0x1
 0000005C  E1A00004  MOV         R0,R4 ; pSem
 00000060  E5801000  STR         R1,[R0,#0x0] ; pSem
 00000064          L_6:
   91:     OSIRQUnlock();
 00000064  E3A00003  MOV         R0,#0x3
 00000068  EF000000  SWI         0x0 ; SWI_Handler?A
 0000006C            ; SCOPE-END
   92: }
 0000006C  E8BD0010  LDMIA       R13!,{R4}
 00000070  E8BD0008  LDMIA       R13!,{R3}
 00000074  E12FFF13  BX          R3
 00000078          ENDP ; 'OSSemSend?A'


*** CODE SEGMENT '?PR?OSSemWait?A?GGT_Sem':
  109: void OSSemWait(_pSem pSem)
 00000000  E92D4010  STMDB       R13!,{R4,LR}
 00000004  E1A04000  MOV         R4,R0 ; pSem
 00000008  ---- Variable 'pSem' assigned to Register 'R4' ----
  111:     OSIRQLock();
 00000008  E3A00002  MOV         R0,#0x2
 0000000C  EF000000  SWI         0x0 ; SWI_Handler?A
  113:     if(!pSem->Flag)
 00000010  E1A00004  MOV         R0,R4 ; pSem
 00000014  E5900000  LDR         R0,[R0,#0x0] ; pSem
 00000018  E3500000  CMP         R0,#0x0000
 0000001C  1A00000D  BNE         L_7  ; Targ=0x58
  115:         pOSTskNow->State = OS_STATE_TSK_WAIT_SEM;
 00000020  E3A00010  MOV         R0,#0x10
 00000024  E5101000  LDR         R1,=pOSTskNow ; pOSTskNow
 00000028  E5911000  LDR         R1,[R1,#0x0] ; pOSTskNow
 0000002C  E5810014  STR         R0,[R1,#0x14]
  116:         ListInsert(&(pSem->pTask), pOSTskNow, OSTaskOrderByPrio);
 00000030  E1A00004  MOV         R0,R4 ; pSem
 00000034  E2800004  ADD         R0,R0,#0x0004 ; pSem
 00000038  E5101000  LDR         R1,=pOSTskNow ; pOSTskNow
 0000003C  E5911000  LDR         R1,[R1,#0x0] ; pOSTskNow
 00000040  E5102000  LDR         R2,=OSTaskOrderByPrio?A ; OSTaskOrderByPrio?A
 00000044  EBFFFFED  BL          ListInsert?A  ; Targ=0x0
  117:         OSTaskIsNULLLoadDef();
 00000048  EBFFFFEC  BL          OSTaskIsNULLLoadDef?A  ; Targ=0x0
  118:         OSTaskSW();
 0000004C  E3A00000  MOV         R0,#0x0
 00000050  EF000000  SWI         0x0 ; SWI_Handler?A
  119:     }else
 00000054  EA000002  B           L_8  ; Targ=0x64
 00000058          L_7:
  120:         pSem->Flag = 0;
 00000058  E3A01000  MOV         R1,#0x0
 0000005C  E1A00004  MOV         R0,R4 ; pSem
 00000060  E5801000  STR         R1,[R0,#0x0] ; pSem
 00000064          L_8:
  122:     OSIRQUnlock();
ARM COMPILER V2.32a,  GGT_Sem                                                              28/02/08  23:05:55  PAGE 6   

 00000064  E3A00003  MOV         R0,#0x3
 00000068  EF000000  SWI         0x0 ; SWI_Handler?A
  123: }
 0000006C  E8BD0010  LDMIA       R13!,{R4}
 00000070  E8BD0008  LDMIA       R13!,{R3}
 00000074  E12FFF13  BX          R3
 00000078          ENDP ; 'OSSemWait?A'



Module Information          Static
----------------------------------
  code size            =    ------
  data size            =    ------
  const size           =    ------
End of Module Information.


ARM COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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