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

📄 os_tmr.txt

📁 ucos2.86版本结合STM板极支持包
💻 TXT
📖 第 1 页 / 共 5 页
字号:
0003de  808a              STRH     r2,[r1,#4]
0003e0  e014              B        |L1.1036|
0003e2  0000              DCW      0x0000
                  |L1.996|
0003e4  00000000          DCD      OSTmrSem
                  |L1.1000|
0003e8  00000000          DCD      OSTmrFreeList
                  |L1.1004|
0003ec  00000000          DCD      OSTmrUsed
                  |L1.1008|
0003f0  00000000          DCD      OSTmrFree
                  |L1.1012|
0003f4  00000000          DCD      OSIntNesting
                  |L1.1016|
0003f8  00000000          DCD      OSTmrWheelTbl
                  |L1.1020|
0003fc  00000000          DCD      OSTmrTime
                  |L1.1024|
;;;974        } else {
;;;975            ptmr1                = pspoke->OSTmrFirst;                 /* Point to first timer in the spoke               */
;;;976            pspoke->OSTmrFirst   = ptmr;
000400  6008              STR      r0,[r1,#0]
;;;977            ptmr->OSTmrNext      = (void *)ptmr1;
000402  60c2              STR      r2,[r0,#0xc]
;;;978            ptmr1->OSTmrPrev     = (void *)ptmr;
000404  6110              STR      r0,[r2,#0x10]
;;;979            pspoke->OSTmrEntries++;
000406  888a              LDRH     r2,[r1,#4]
000408  1c52              ADDS     r2,r2,#1
00040a  808a              STRH     r2,[r1,#4]
                  |L1.1036|
;;;980        }
;;;981        ptmr->OSTmrPrev = (void *)0;                                   /* Timer always inserted as first node in list     */
00040c  6103              STR      r3,[r0,#0x10]
;;;982    }
00040e  4770              BX       lr
;;;983    #endif
                          ENDP

                  OSTmrStart PROC
;;;526                         INT8U    *perr)
;;;527    {
000410  b570              PUSH     {r4-r6,lr}
000412  4605              MOV      r5,r0
000414  460c              MOV      r4,r1
;;;528    #if OS_ARG_CHK_EN > 0
;;;529        if (perr == (INT8U *)0) {                               /* Validate arguments                                     */
000416  b90c              CBNZ     r4,|L1.1052|
;;;530            return (OS_FALSE);
000418  2000              MOVS     r0,#0
;;;531        }
;;;532        if (ptmr == (OS_TMR *)0) {
;;;533            *perr = OS_ERR_TMR_INVALID;
;;;534            return (OS_FALSE);
;;;535        }
;;;536    #endif
;;;537        if (ptmr->OSTmrType != OS_TMR_TYPE) {                   /* Validate timer structure                               */
;;;538            *perr = OS_ERR_TMR_INVALID_TYPE;
;;;539            return (OS_FALSE);
;;;540        }
;;;541        if (OSIntNesting > 0) {                                 /* See if trying to call from an ISR                      */
;;;542            *perr  = OS_ERR_TMR_ISR;
;;;543            return (OS_FALSE);
;;;544        }
;;;545        OSTmr_Lock();
;;;546        switch (ptmr->OSTmrState) {
;;;547            case OS_TMR_STATE_RUNNING:                          /* Restart the timer                                      */
;;;548                 OSTmr_Unlink(ptmr);                            /* ... Stop the timer                                     */
;;;549                 OSTmr_Link(ptmr, OS_TMR_LINK_DLY);             /* ... Link timer to timer wheel                          */
;;;550                 OSTmr_Unlock();
;;;551                 *perr = OS_ERR_NONE;
;;;552                 return (OS_TRUE);
;;;553    
;;;554            case OS_TMR_STATE_STOPPED:                          /* Start the timer                                        */
;;;555            case OS_TMR_STATE_COMPLETED:
;;;556                 OSTmr_Link(ptmr, OS_TMR_LINK_DLY);             /* ... Link timer to timer wheel                          */
;;;557                 OSTmr_Unlock();
;;;558                 *perr = OS_ERR_NONE;
;;;559                 return (OS_TRUE);
;;;560    
;;;561            case OS_TMR_STATE_UNUSED:                           /* Timer not created                                      */
;;;562                 OSTmr_Unlock();
;;;563                 *perr = OS_ERR_TMR_INACTIVE;
;;;564                 return (OS_FALSE);
;;;565    
;;;566            default:
;;;567                 OSTmr_Unlock();
;;;568                 *perr = OS_ERR_TMR_INVALID_STATE;
;;;569                 return (OS_FALSE);
;;;570        }
;;;571    }
00041a  bd70              POP      {r4-r6,pc}
                  |L1.1052|
00041c  b91d              CBNZ     r5,|L1.1062|
00041e  208a              MOVS     r0,#0x8a
000420  7020              STRB     r0,[r4,#0]
000422  2000              MOVS     r0,#0
000424  bd70              POP      {r4-r6,pc}
                  |L1.1062|
000426  7828              LDRB     r0,[r5,#0]
000428  2864              CMP      r0,#0x64
00042a  d003              BEQ      |L1.1076|
00042c  2089              MOVS     r0,#0x89
00042e  7020              STRB     r0,[r4,#0]
000430  2000              MOVS     r0,#0
000432  bd70              POP      {r4-r6,pc}
                  |L1.1076|
000434  489c              LDR      r0,|L1.1704|
000436  7800              LDRB     r0,[r0,#0]  ; OSIntNesting
000438  b118              CBZ      r0,|L1.1090|
00043a  208b              MOVS     r0,#0x8b
00043c  7020              STRB     r0,[r4,#0]
00043e  2000              MOVS     r0,#0
000440  bd70              POP      {r4-r6,pc}
                  |L1.1090|
000442  f7fff7ff          BL       OSTmr_Lock
000446  f895f895          LDRB     r0,[r5,#0x31]
00044a  b1d8              CBZ      r0,|L1.1156|
00044c  2600              MOVS     r6,#0
00044e  2801              CMP      r0,#1
000450  d00f              BEQ      |L1.1138|
000452  2802              CMP      r0,#2
000454  d00d              BEQ      |L1.1138|
000456  2803              CMP      r0,#3
000458  d11a              BNE      |L1.1168|
00045a  4628              MOV      r0,r5
00045c  f7fff7ff          BL       OSTmr_Unlink
000460  2100              MOVS     r1,#0
000462  4628              MOV      r0,r5
000464  f7fff7ff          BL       OSTmr_Link
000468  f7fff7ff          BL       OSTmr_Unlock
00046c  7026              STRB     r6,[r4,#0]
00046e  2001              MOVS     r0,#1
000470  bd70              POP      {r4-r6,pc}
                  |L1.1138|
000472  2100              MOVS     r1,#0
000474  4628              MOV      r0,r5
000476  f7fff7ff          BL       OSTmr_Link
00047a  f7fff7ff          BL       OSTmr_Unlock
00047e  7026              STRB     r6,[r4,#0]
000480  2001              MOVS     r0,#1
000482  bd70              POP      {r4-r6,pc}
                  |L1.1156|
000484  f7fff7ff          BL       OSTmr_Unlock
000488  2087              MOVS     r0,#0x87
00048a  7020              STRB     r0,[r4,#0]
00048c  2000              MOVS     r0,#0
00048e  bd70              POP      {r4-r6,pc}
                  |L1.1168|
000490  f7fff7ff          BL       OSTmr_Unlock
000494  208d              MOVS     r0,#0x8d
000496  7020              STRB     r0,[r4,#0]
000498  2000              MOVS     r0,#0
00049a  bd70              POP      {r4-r6,pc}
;;;572    #endif
                          ENDP

                  OSTmrStop PROC
;;;615                        INT8U   *perr)
;;;616    {
00049c  e92de92d          PUSH     {r4-r8,lr}
0004a0  4605              MOV      r5,r0
0004a2  460e              MOV      r6,r1
0004a4  4617              MOV      r7,r2
0004a6  461c              MOV      r4,r3
;;;617        OS_TMR_CALLBACK  pfnct;
;;;618    
;;;619    
;;;620    #if OS_ARG_CHK_EN > 0
;;;621        if (perr == (INT8U *)0) {                                     /* Validate arguments                               */
0004a8  b914              CBNZ     r4,|L1.1200|
;;;622            return (OS_FALSE);
0004aa  2000              MOVS     r0,#0
0004ac  e8bde8bd          POP      {r4-r8,pc}
                  |L1.1200|
;;;623        }
;;;624        if (ptmr == (OS_TMR *)0) {
0004b0  b925              CBNZ     r5,|L1.1212|
;;;625            *perr = OS_ERR_TMR_INVALID;
0004b2  208a              MOVS     r0,#0x8a
0004b4  7020              STRB     r0,[r4,#0]
;;;626            return (OS_FALSE);
0004b6  2000              MOVS     r0,#0
0004b8  e8bde8bd          POP      {r4-r8,pc}
                  |L1.1212|
;;;627        }
;;;628    #endif
;;;629        if (ptmr->OSTmrType != OS_TMR_TYPE) {                         /* Validate timer structure                         */
0004bc  7828              LDRB     r0,[r5,#0]
0004be  2864              CMP      r0,#0x64
0004c0  d004              BEQ      |L1.1228|
;;;630            *perr = OS_ERR_TMR_INVALID_TYPE;
0004c2  2089              MOVS     r0,#0x89
0004c4  7020              STRB     r0,[r4,#0]
;;;631            return (OS_FALSE);
0004c6  2000              MOVS     r0,#0
0004c8  e8bde8bd          POP      {r4-r8,pc}
                  |L1.1228|
;;;632        }
;;;633        if (OSIntNesting > 0) {                                       /* See if trying to call from an ISR                */
0004cc  4876              LDR      r0,|L1.1704|
0004ce  7800              LDRB     r0,[r0,#0]  ; OSIntNesting
0004d0  b120              CBZ      r0,|L1.1244|
;;;634            *perr  = OS_ERR_TMR_ISR;
0004d2  208b              MOVS     r0,#0x8b
0004d4  7020              STRB     r0,[r4,#0]
;;;635            return (OS_FALSE);
0004d6  2000              MOVS     r0,#0
0004d8  e8bde8bd          POP      {r4-r8,pc}
                  |L1.1244|
;;;636        }
;;;637        OSTmr_Lock();
0004dc  f7fff7ff          BL       OSTmr_Lock
;;;638        switch (ptmr->OSTmrState) {
0004e0  f895f895          LDRB     r0,[r5,#0x31]
0004e4  2800              CMP      r0,#0
0004e6  d02e              BEQ      |L1.1350|
0004e8  2801              CMP      r0,#1
0004ea  d025              BEQ      |L1.1336|
0004ec  2802              CMP      r0,#2
0004ee  d023              BEQ      |L1.1336|
0004f0  2803              CMP      r0,#3
0004f2  d12f              BNE      |L1.1364|
;;;639            case OS_TMR_STATE_RUNNING:
;;;640                 OSTmr_Unlink(ptmr);                                  /* Remove from current wheel spoke                  */
0004f4  4628              MOV      r0,r5
0004f6  f7fff7ff          BL       OSTmr_Unlink
;;;641                 *perr = OS_ERR_NONE;
0004fa  2000              MOVS     r0,#0
0004fc  7020              STRB     r0,[r4,#0]
;;;642                 switch (opt) {
0004fe  b1b6              CBZ      r6,|L1.1326|
000500  208f              MOVS     r0,#0x8f
000502  2e03              CMP      r6,#3
000504  d007              BEQ      |L1.1302|
000506  2e04              CMP      r6,#4
000508  d10f              BNE      |L1.1322|
;;;643                     case OS_TMR_OPT_CALLBACK:
;;;644                          pfnct = ptmr->OSTmrCallback;                /* Execute callback function if available ...       */
;;;645                          if (pfnct != (OS_TMR_CALLBACK)0) {
;;;646                              (*pfnct)((void *)ptmr, ptmr->OSTmrCallbackArg);  /* Use callback arg when timer was created */
;;;647                          } else {
;;;648                              *perr = OS_ERR_TMR_NO_CALLBACK;
;;;649                          }
;;;650                          break;
;;;651    
;;;652                     case OS_TMR_OPT_CALLBACK_ARG:
;;;653                          pfnct = ptmr->OSTmrCallback;                /* Execute callback function if available ...       */
00050a  686a              LDR      r2,[r5,#4]
;;;654                          if (pfnct != (OS_TMR_CALLBACK)0) {
00050c  b15a              CBZ      r2,|L1.1318|
00050e  4639              MOV      r1,r7
000510  4628              MOV      r0,r5
000512  4790              BLX      r2
;;;655                              (*pfnct)((void *)ptmr, callback_arg);   /* ... using the 'callback_arg' provided in call    */
000514  e00b              B        |L1.1326|
                  |L1.1302|
000516  686a              LDR      r2,[r5,#4]
000518  b11a              CBZ      r2,|L1.1314|
00051a  4628              MOV      r0,r5
00051c  68a9              LDR      r1,[r5,#8]
00051e  4790              BLX      r2
000520  e005              B        |L1.1326|
                  |L1.1314|
000522  7020              STRB     r0,[r4,#0]
000524  e003              B        |L1.1326|
                  |L1.1318|
;;;656                          } else {
;;;657                              *perr = OS_ERR_TMR_NO_CALLBACK;
000526  7020              STRB     r0,[r4,#0]
000528  e001              B        |L1.1326|
                  |L1.1322|
;;;658                          }
;;;659                          break;
;;;660    
;;;661                     case OS_TMR_OPT_NONE:
;;;662                          break;
;;;663    
;;;664                     default:
;;;665                         *perr = OS_ERR_TMR_INVALID_OPT;
00052a  2084              MOVS     r0,#0x84
00052c  7020              STRB     r0,[r4,#0]
                  |L1.1326|
;;;666                         break;
;;;667                 }
;;;668                 OSTmr_Unlock();

⌨️ 快捷键说明

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