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

📄 os_tmr.txt

📁 ucos2.86版本结合STM板极支持包
💻 TXT
📖 第 1 页 / 共 5 页
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 914] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\rvmdk\os_tmr.o --depend=.\rvmdk\os_tmr.d --device=DARMSTM -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 -ID:\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  f7fff7ff          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]
000014  600a              STR      r2,[r1,#0]  ; OSTmrFreeList
000016  2100              MOVS     r1,#0
000018  60c1              STR      r1,[r0,#0xc]
00001a  6101              STR      r1,[r0,#0x10]
00001c  4af3              LDR      r2,|L1.1004|
00001e  8811              LDRH     r1,[r2,#0]  ; OSTmrUsed
000020  1c49              ADDS     r1,r1,#1
000022  8011              STRH     r1,[r2,#0]  ; OSTmrUsed
000024  49f2              LDR      r1,|L1.1008|
000026  880a              LDRH     r2,[r1,#0]  ; OSTmrFree
000028  1e52              SUBS     r2,r2,#1
00002a  800a              STRH     r2,[r1,#0]  ; 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  f7fff7ff          BL       OSSemPend
;;;1051       (void)err;
;;;1052   }
00003c  bd08              POP      {r3,pc}
;;;1053   #endif
                          ENDP

                  OSTmrCreate PROC
;;;119                          INT8U           *perr)
;;;120    {
00003e  e92de92d          PUSH     {r4-r12,lr}
000042  f8ddf8dd          LDR      r10,[sp,#0x2c]
000046  f8ddf8dd          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
000058  e8bde8bd          POP      {r4-r12,pc}
                  |L1.92|
;;;130        }
;;;131        switch (opt) {
00005c  2e01              CMP      r6,#1
00005e  d009              BEQ      |L1.116|
000060  2e02              CMP      r6,#2
000062  d10d              BNE      |L1.128|
;;;132            case OS_TMR_OPT_PERIODIC:
;;;133                 if (period == 0) {
000064  f1b8f1b8          CMP      r8,#0
000068  d10f              BNE      |L1.138|
;;;134                     *perr = OS_ERR_TMR_INVALID_PERIOD;
00006a  2083              MOVS     r0,#0x83
00006c  7028              STRB     r0,[r5,#0]
;;;135                     return ((OS_TMR *)0);
00006e  2000              MOVS     r0,#0
000070  e8bde8bd          POP      {r4-r12,pc}
                  |L1.116|
;;;136                 }
;;;137                 break;
;;;138    
;;;139            case OS_TMR_OPT_ONE_SHOT:
;;;140                 if (dly == 0) {
000074  b94f              CBNZ     r7,|L1.138|
;;;141                     *perr = OS_ERR_TMR_INVALID_DLY;
000076  2082              MOVS     r0,#0x82
000078  7028              STRB     r0,[r5,#0]
;;;142                     return ((OS_TMR *)0);
00007a  2000              MOVS     r0,#0
00007c  e8bde8bd          POP      {r4-r12,pc}
                  |L1.128|
;;;143                 }
;;;144                 break;
;;;145    
;;;146            default:
;;;147                 *perr = OS_ERR_TMR_INVALID_OPT;
000080  2084              MOVS     r0,#0x84
000082  7028              STRB     r0,[r5,#0]
;;;148                 return ((OS_TMR *)0);
000084  2000              MOVS     r0,#0
000086  e8bde8bd          POP      {r4-r12,pc}
                  |L1.138|
;;;149        }
;;;150    #endif
;;;151        if (OSIntNesting > 0) {                                 /* See if trying to call from an ISR                      */
00008a  48da              LDR      r0,|L1.1012|
00008c  7800              LDRB     r0,[r0,#0]  ; OSIntNesting
00008e  b120              CBZ      r0,|L1.154|
;;;152            *perr  = OS_ERR_TMR_ISR;
000090  208b              MOVS     r0,#0x8b
000092  7028              STRB     r0,[r5,#0]
;;;153            return ((OS_TMR *)0);
000094  2000              MOVS     r0,#0
000096  e8bde8bd          POP      {r4-r12,pc}
                  |L1.154|
;;;154        }
;;;155        OSTmr_Lock();
00009a  f7fff7ff          BL       OSTmr_Lock
;;;156        ptmr = OSTmr_Alloc();                                   /* Obtain a timer from the free pool                      */
00009e  f7fff7ff          BL       OSTmr_Alloc
0000a2  4604              MOV      r4,r0
;;;157        if (ptmr == (OS_TMR *)0) {
0000a4  b934              CBNZ     r4,|L1.180|
;;;158            OSTmr_Unlock();
0000a6  f7fff7ff          BL       OSTmr_Unlock
;;;159            *perr = OS_ERR_TMR_NON_AVAIL;
0000aa  2086              MOVS     r0,#0x86
0000ac  7028              STRB     r0,[r5,#0]
;;;160            return ((OS_TMR *)0);
0000ae  2000              MOVS     r0,#0
0000b0  e8bde8bd          POP      {r4-r12,pc}
                  |L1.180|
;;;161        }
;;;162        ptmr->OSTmrState       = OS_TMR_STATE_STOPPED;          /* Indicate that timer is not running yet                 */
0000b4  2001              MOVS     r0,#1
0000b6  f884f884          STRB     r0,[r4,#0x31]
;;;163        ptmr->OSTmrDly         = dly;
0000ba  61a7              STR      r7,[r4,#0x18]
;;;164        ptmr->OSTmrPeriod      = period;
0000bc  f8c4f8c4          STR      r8,[r4,#0x1c]
;;;165        ptmr->OSTmrOpt         = opt;
0000c0  f884f884          STRB     r6,[r4,#0x30]
;;;166        ptmr->OSTmrCallback    = callback;
0000c4  f8c4f8c4          STR      r11,[r4,#4]
;;;167        ptmr->OSTmrCallbackArg = callback_arg;
0000c8  f8c4f8c4          STR      r9,[r4,#8]
;;;168    #if OS_TMR_CFG_NAME_SIZE > 0
;;;169        if (pname !=(INT8U *)0) {
0000cc  2600              MOVS     r6,#0
0000ce  f1baf1ba          CMP      r10,#0
0000d2  d009              BEQ      |L1.232|
;;;170            len = OS_StrLen(pname);                             /* Copy timer name                                        */
0000d4  4650              MOV      r0,r10
0000d6  f7fff7ff          BL       OS_StrLen
;;;171            if (len < OS_TMR_CFG_NAME_SIZE) {
0000da  2810              CMP      r0,#0x10
0000dc  d20a              BCS      |L1.244|
;;;172                (void)OS_StrCopy(ptmr->OSTmrName, pname);
0000de  4651              MOV      r1,r10
0000e0  f104f104          ADD      r0,r4,#0x20
0000e4  f7fff7ff          BL       OS_StrCopy
                  |L1.232|
;;;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();
0000e8  f7fff7ff          BL       OSTmr_Unlock
;;;185        *perr = OS_ERR_NONE;
0000ec  702e              STRB     r6,[r5,#0]
;;;186        return (ptmr);
0000ee  4620              MOV      r0,r4
0000f0  e8bde8bd          POP      {r4-r12,pc}
                  |L1.244|
0000f4  2023              MOVS     r0,#0x23
0000f6  f884f884          STRB     r0,[r4,#0x20]
0000fa  f884f884          STRB     r6,[r4,#0x21]
0000fe  208c              MOVS     r0,#0x8c
000100  7028              STRB     r0,[r5,#0]
000102  f7fff7ff          BL       OSTmr_Unlock
000106  4620              MOV      r0,r4
;;;187    }
000108  e8bde8bd          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  f880f880          STRB     r1,[r0,#0x31]
;;;770        ptmr->OSTmrOpt         = OS_TMR_OPT_NONE;
000112  f880f880          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  f880f880          STRB     r2,[r0,#0x20]
;;;777        ptmr->OSTmrName[1]     = OS_ASCII_NUL;
000124  f880f880          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
00013e  1c49              ADDS     r1,r1,#1
000140  8001              STRH     r1,[r0,#0]  ; OSTmrFree
;;;786    }
000142  4770              BX       lr
;;;787    #endif
                          ENDP

                  OSTmr_Unlink PROC
;;;1006   
;;;1007       spoke  = (INT16U)(ptmr->OSTmrMatch % OS_TMR_CFG_WHEEL_SIZE);
000144  6941              LDR      r1,[r0,#0x14]
000146  f001f001          AND      r1,r1,#7
;;;1008       pspoke = &OSTmrWheelTbl[spoke];
00014a  4aab              LDR      r2,|L1.1016|
00014c  eb02eb02          ADD      r1,r2,r1,LSL #3
;;;1009   
;;;1010       if (pspoke->OSTmrFirst == ptmr) {                       /* See if timer to remove is at the beginning of list     */
000150  680b              LDR      r3,[r1,#0]
000152  68c2              LDR      r2,[r0,#0xc]

⌨️ 快捷键说明

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