os_tmr.txt

来自「针对STM32F103的UCOS移植」· 文本 代码 · 共 1,333 行 · 第 1/5 页

TXT
1,333
字号
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 942] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\rvmdk\os_tmr.o --depend=.\rvmdk\os_tmr.d --device=DARMSTM --apcs=interwork -O1 -Otime -I. -I..\BSP -I..\..\..\..\..\uCOS-II\Ports\arm-cortex-m3\Generic\RealView -I..\..\..\..\..\uCOS-II\Source -I..\..\..\..\..\CPU\ST\STM32\inc -I..\..\..\..\..\uC-CPU -I..\..\..\..\..\uC-CPU\Arm-Cortex-M3\RealView -I..\..\..\..\..\uC-LIB -I..\..\..\..\..\uC-Probe\Target\Plugins\uCOS-II -I..\..\..\..\..\uC-Probe\Target\Communication\Generic\Source -I..\..\..\..\..\uC-Probe\Target\Communication\Generic\RS-232\Ports\ST\STM32 -I..\..\..\..\..\uC-Probe\Target\Communication\Generic\RS-232\Source -IC:\Keil\ARM\INC\ST\STM32F10x ..\..\..\..\..\uCOS-II\Source\os_tmr.c]
                          THUMB

                          AREA ||.text||, CODE, READONLY, ALIGN=2

                  OSTmr_Unlock PROC
;;;1059   {
;;;1060       (void)OSSemPost(OSTmrSem);
000000  48f8              LDR      r0,|L1.996|
000002  6800              LDR      r0,[r0,#0]  ; OSTmrSem
000004  f7ffbffe          B.W      OSSemPost
;;;1061   }
;;;1062   #endif
                          ENDP

                  OSTmr_Alloc PROC
;;;739    
;;;740        if (OSTmrFreeList == (OS_TMR *)0) {
000008  49f7              LDR      r1,|L1.1000|
00000a  6808              LDR      r0,[r1,#0]  ; OSTmrFreeList
00000c  b908              CBNZ     r0,|L1.18|
;;;741            return ((OS_TMR *)0);
00000e  2000              MOVS     r0,#0
;;;742        }
;;;743        ptmr            = (OS_TMR *)OSTmrFreeList;
;;;744        OSTmrFreeList   = (OS_TMR *)ptmr->OSTmrNext;
;;;745        ptmr->OSTmrNext = (OS_TCB *)0;
;;;746        ptmr->OSTmrPrev = (OS_TCB *)0;
;;;747        OSTmrUsed++;
;;;748        OSTmrFree--;
;;;749        return (ptmr);
;;;750    }
000010  4770              BX       lr
                  |L1.18|
000012  68c2              LDR      r2,[r0,#0xc]          ;744
000014  600a              STR      r2,[r1,#0]            ;744  ; OSTmrFreeList
000016  2100              MOVS     r1,#0                 ;745
000018  60c1              STR      r1,[r0,#0xc]          ;745
00001a  6101              STR      r1,[r0,#0x10]         ;746
00001c  4af3              LDR      r2,|L1.1004|
00001e  8811              LDRH     r1,[r2,#0]            ;747  ; OSTmrUsed
000020  1c49              ADDS     r1,r1,#1              ;747
000022  8011              STRH     r1,[r2,#0]            ;747  ; OSTmrUsed
000024  49f2              LDR      r1,|L1.1008|
000026  880a              LDRH     r2,[r1,#0]            ;748  ; OSTmrFree
000028  1e52              SUBS     r2,r2,#1              ;748
00002a  800a              STRH     r2,[r1,#0]            ;748  ; OSTmrFree
00002c  4770              BX       lr
;;;751    #endif
                          ENDP

                  OSTmr_Lock PROC
;;;1045   static  void  OSTmr_Lock (void)
;;;1046   {
00002e  b508              PUSH     {r3,lr}
;;;1047       INT8U  err;
;;;1048   
;;;1049   
;;;1050       OSSemPend(OSTmrSem, 0, &err);
000030  48ec              LDR      r0,|L1.996|
000032  466a              MOV      r2,sp
000034  2100              MOVS     r1,#0
000036  6800              LDR      r0,[r0,#0]  ; OSTmrSem
000038  f7fffffe          BL       OSSemPend
;;;1051       (void)err;
;;;1052   }
00003c  bd08              POP      {r3,pc}
;;;1053   #endif
                          ENDP

                  OSTmrCreate PROC
;;;119                          INT8U           *perr)
;;;120    {
00003e  e92d5ff0          PUSH     {r4-r12,lr}
000042  f8dda02c          LDR      r10,[sp,#0x2c]
000046  f8dd9028          LDR      r9,[sp,#0x28]
00004a  9d0c              LDR      r5,[sp,#0x30]
00004c  4607              MOV      r7,r0
00004e  4688              MOV      r8,r1
000050  4616              MOV      r6,r2
000052  469b              MOV      r11,r3
;;;121        OS_TMR   *ptmr;
;;;122    #if OS_TMR_CFG_NAME_SIZE > 0
;;;123        INT8U     len;
;;;124    #endif
;;;125    
;;;126    
;;;127    #if OS_ARG_CHK_EN > 0
;;;128        if (perr == (INT8U *)0) {                               /* Validate arguments                                     */
000054  b915              CBNZ     r5,|L1.92|
;;;129            return ((OS_TMR *)0);
000056  2000              MOVS     r0,#0
;;;130        }
;;;131        switch (opt) {
;;;132            case OS_TMR_OPT_PERIODIC:
;;;133                 if (period == 0) {
;;;134                     *perr = OS_ERR_TMR_INVALID_PERIOD;
;;;135                     return ((OS_TMR *)0);
;;;136                 }
;;;137                 break;
;;;138    
;;;139            case OS_TMR_OPT_ONE_SHOT:
;;;140                 if (dly == 0) {
;;;141                     *perr = OS_ERR_TMR_INVALID_DLY;
;;;142                     return ((OS_TMR *)0);
;;;143                 }
;;;144                 break;
;;;145    
;;;146            default:
;;;147                 *perr = OS_ERR_TMR_INVALID_OPT;
;;;148                 return ((OS_TMR *)0);
;;;149        }
;;;150    #endif
;;;151        if (OSIntNesting > 0) {                                 /* See if trying to call from an ISR                      */
;;;152            *perr  = OS_ERR_TMR_ISR;
;;;153            return ((OS_TMR *)0);
;;;154        }
;;;155        OSTmr_Lock();
;;;156        ptmr = OSTmr_Alloc();                                   /* Obtain a timer from the free pool                      */
;;;157        if (ptmr == (OS_TMR *)0) {
;;;158            OSTmr_Unlock();
;;;159            *perr = OS_ERR_TMR_NON_AVAIL;
;;;160            return ((OS_TMR *)0);
;;;161        }
;;;162        ptmr->OSTmrState       = OS_TMR_STATE_STOPPED;          /* Indicate that timer is not running yet                 */
;;;163        ptmr->OSTmrDly         = dly;
;;;164        ptmr->OSTmrPeriod      = period;
;;;165        ptmr->OSTmrOpt         = opt;
;;;166        ptmr->OSTmrCallback    = callback;
;;;167        ptmr->OSTmrCallbackArg = callback_arg;
;;;168    #if OS_TMR_CFG_NAME_SIZE > 0
;;;169        if (pname !=(INT8U *)0) {
;;;170            len = OS_StrLen(pname);                             /* Copy timer name                                        */
;;;171            if (len < OS_TMR_CFG_NAME_SIZE) {
;;;172                (void)OS_StrCopy(ptmr->OSTmrName, pname);
;;;173            } else {
;;;174    #if OS_TMR_CFG_NAME_SIZE > 1
;;;175                ptmr->OSTmrName[0] = '#';                       /* Invalid size specified                                 */
;;;176                ptmr->OSTmrName[1] = OS_ASCII_NUL;
;;;177    #endif
;;;178                *perr              = OS_ERR_TMR_NAME_TOO_LONG;
;;;179                OSTmr_Unlock();
;;;180                return (ptmr);
;;;181            }
;;;182        }
;;;183    #endif
;;;184        OSTmr_Unlock();
;;;185        *perr = OS_ERR_NONE;
;;;186        return (ptmr);
;;;187    }
000058  e8bd9ff0          POP      {r4-r12,pc}
                  |L1.92|
00005c  2e01              CMP      r6,#1                 ;131
00005e  d009              BEQ      |L1.116|
000060  2e02              CMP      r6,#2                 ;131
000062  d10d              BNE      |L1.128|
000064  f1b80f00          CMP      r8,#0                 ;133
000068  d10f              BNE      |L1.138|
00006a  2083              MOVS     r0,#0x83              ;134
00006c  7028              STRB     r0,[r5,#0]            ;134
00006e  2000              MOVS     r0,#0                 ;135
000070  e8bd9ff0          POP      {r4-r12,pc}
                  |L1.116|
000074  b94f              CBNZ     r7,|L1.138|
000076  2082              MOVS     r0,#0x82              ;141
000078  7028              STRB     r0,[r5,#0]            ;141
00007a  2000              MOVS     r0,#0                 ;142
00007c  e8bd9ff0          POP      {r4-r12,pc}
                  |L1.128|
000080  2084              MOVS     r0,#0x84              ;147
000082  7028              STRB     r0,[r5,#0]            ;147
000084  2000              MOVS     r0,#0                 ;148
000086  e8bd9ff0          POP      {r4-r12,pc}
                  |L1.138|
00008a  48da              LDR      r0,|L1.1012|
00008c  7800              LDRB     r0,[r0,#0]            ;151  ; OSIntNesting
00008e  b120              CBZ      r0,|L1.154|
000090  208b              MOVS     r0,#0x8b              ;152
000092  7028              STRB     r0,[r5,#0]            ;152
000094  2000              MOVS     r0,#0                 ;153
000096  e8bd9ff0          POP      {r4-r12,pc}
                  |L1.154|
00009a  f7fffffe          BL       OSTmr_Lock
00009e  f7fffffe          BL       OSTmr_Alloc
0000a2  4604              MOV      r4,r0                 ;156
0000a4  b934              CBNZ     r4,|L1.180|
0000a6  f7fffffe          BL       OSTmr_Unlock
0000aa  2086              MOVS     r0,#0x86              ;159
0000ac  7028              STRB     r0,[r5,#0]            ;159
0000ae  2000              MOVS     r0,#0                 ;160
0000b0  e8bd9ff0          POP      {r4-r12,pc}
                  |L1.180|
0000b4  2001              MOVS     r0,#1                 ;162
0000b6  f8840031          STRB     r0,[r4,#0x31]         ;162
0000ba  61a7              STR      r7,[r4,#0x18]         ;163
0000bc  f8c4801c          STR      r8,[r4,#0x1c]         ;164
0000c0  f8846030          STRB     r6,[r4,#0x30]         ;165
0000c4  f8c4b004          STR      r11,[r4,#4]           ;166
0000c8  f8c49008          STR      r9,[r4,#8]            ;167
0000cc  2600              MOVS     r6,#0                 ;169
0000ce  f1ba0f00          CMP      r10,#0                ;169
0000d2  d009              BEQ      |L1.232|
0000d4  4650              MOV      r0,r10                ;170
0000d6  f7fffffe          BL       OS_StrLen
0000da  2810              CMP      r0,#0x10              ;171
0000dc  d20a              BCS      |L1.244|
0000de  4651              MOV      r1,r10                ;172
0000e0  f1040020          ADD      r0,r4,#0x20           ;172
0000e4  f7fffffe          BL       OS_StrCopy
                  |L1.232|
0000e8  f7fffffe          BL       OSTmr_Unlock
0000ec  702e              STRB     r6,[r5,#0]            ;185
0000ee  4620              MOV      r0,r4                 ;186
0000f0  e8bd9ff0          POP      {r4-r12,pc}
                  |L1.244|
0000f4  2023              MOVS     r0,#0x23              ;175
0000f6  f8840020          STRB     r0,[r4,#0x20]         ;175
0000fa  f8846021          STRB     r6,[r4,#0x21]         ;176
0000fe  208c              MOVS     r0,#0x8c              ;178
000100  7028              STRB     r0,[r5,#0]            ;178
000102  f7fffffe          BL       OSTmr_Unlock
000106  4620              MOV      r0,r4                 ;180
000108  e8bd9ff0          POP      {r4-r12,pc}
;;;188    #endif
                          ENDP

                  OSTmr_Free PROC
;;;768    {
;;;769        ptmr->OSTmrState       = OS_TMR_STATE_UNUSED;      /* Clear timer object fields                                   */
00010c  2100              MOVS     r1,#0
00010e  f8801031          STRB     r1,[r0,#0x31]
;;;770        ptmr->OSTmrOpt         = OS_TMR_OPT_NONE;
000112  f8801030          STRB     r1,[r0,#0x30]
;;;771        ptmr->OSTmrPeriod      = 0;
000116  61c1              STR      r1,[r0,#0x1c]
;;;772        ptmr->OSTmrMatch       = 0;
000118  6141              STR      r1,[r0,#0x14]
;;;773        ptmr->OSTmrCallback    = (OS_TMR_CALLBACK)0;
00011a  6041              STR      r1,[r0,#4]
;;;774        ptmr->OSTmrCallbackArg = (void *)0;
00011c  6081              STR      r1,[r0,#8]
;;;775    #if OS_TMR_CFG_NAME_SIZE > 1
;;;776        ptmr->OSTmrName[0]     = '?';                      /* Unknown name                                                */
00011e  223f              MOVS     r2,#0x3f
000120  f8802020          STRB     r2,[r0,#0x20]
;;;777        ptmr->OSTmrName[1]     = OS_ASCII_NUL;
000124  f8801021          STRB     r1,[r0,#0x21]
;;;778    #endif
;;;779    
;;;780        ptmr->OSTmrPrev        = (OS_TCB *)0;              /* Chain timer to free list                                    */
000128  6101              STR      r1,[r0,#0x10]
;;;781        ptmr->OSTmrNext        = OSTmrFreeList;
00012a  49af              LDR      r1,|L1.1000|
00012c  680a              LDR      r2,[r1,#0]  ; OSTmrFreeList
00012e  60c2              STR      r2,[r0,#0xc]
;;;782        OSTmrFreeList          = ptmr;
000130  6008              STR      r0,[r1,#0]  ; OSTmrFreeList
;;;783    
;;;784        OSTmrUsed--;                                       /* Update timer object statistics                              */
000132  48ae              LDR      r0,|L1.1004|
000134  8801              LDRH     r1,[r0,#0]  ; OSTmrUsed
000136  1e49              SUBS     r1,r1,#1
000138  8001              STRH     r1,[r0,#0]  ; OSTmrUsed
;;;785        OSTmrFree++;
00013a  48ad              LDR      r0,|L1.1008|
00013c  8801              LDRH     r1,[r0,#0]  ; OSTmrFree

⌨️ 快捷键说明

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