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

📄 os_time.lst

📁 lpc2478开发板基于IAR编译器移植ucos实验例程
💻 LST
📖 第 1 页 / 共 3 页
字号:
   \   00000020   0500001A           BNE      ??OSTimeDlyHMSM_0
    101                      if (seconds == 0) {
   \   00000024   000056E3           CMP      R6,#+0
   \   00000028   0300001A           BNE      ??OSTimeDlyHMSM_0
    102                          if (ms == 0) {
   \   0000002C   000057E3           CMP      R7,#+0
   \   00000030   0100001A           BNE      ??OSTimeDlyHMSM_0
    103                              return (OS_ERR_TIME_ZERO_DLY);
   \   00000034   5400A0E3           MOV      R0,#+84
   \   00000038   300000EA           B        ??OSTimeDlyHMSM_1
    104                          }
    105                      }
    106                  }
    107              }
    108              if (minutes > 59) {
   \                     ??OSTimeDlyHMSM_0:
   \   0000003C   3C0055E3           CMP      R5,#+60
   \   00000040   0100003A           BCC      ??OSTimeDlyHMSM_2
    109                  return (OS_ERR_TIME_INVALID_MINUTES);        /* Validate arguments to be within range              */
   \   00000044   5100A0E3           MOV      R0,#+81
   \   00000048   2C0000EA           B        ??OSTimeDlyHMSM_1
    110              }
    111              if (seconds > 59) {
   \                     ??OSTimeDlyHMSM_2:
   \   0000004C   3C0056E3           CMP      R6,#+60
   \   00000050   0100003A           BCC      ??OSTimeDlyHMSM_3
    112                  return (OS_ERR_TIME_INVALID_SECONDS);
   \   00000054   5200A0E3           MOV      R0,#+82
   \   00000058   280000EA           B        ??OSTimeDlyHMSM_1
    113              }
    114              if (ms > 999) {
   \                     ??OSTimeDlyHMSM_3:
   \   0000005C   FA0F57E3           CMP      R7,#+1000
   \   00000060   0100003A           BCC      ??OSTimeDlyHMSM_4
    115                  return (OS_ERR_TIME_INVALID_MS);
   \   00000064   5300A0E3           MOV      R0,#+83
   \   00000068   240000EA           B        ??OSTimeDlyHMSM_1
    116              }
    117          #endif
    118                                                           /* Compute the total number of clock ticks required.. */
    119                                                           /* .. (rounded to the nearest tick)                   */
    120              ticks = ((INT32U)hours * 3600L + (INT32U)minutes * 60L + (INT32U)seconds) * OS_TICKS_PER_SEC
    121                    + OS_TICKS_PER_SEC * ((INT32U)ms + 500L / OS_TICKS_PER_SEC) / 1000L;
   \                     ??OSTimeDlyHMSM_4:
   \   0000006C   0400B0E1           MOVS     R0,R4
   \   00000070   E11EA0E3           MOV      R1,#+3600
   \   00000074   0520B0E1           MOVS     R2,R5
   \   00000078   3C30A0E3           MOV      R3,#+60
   \   0000007C   930212E0           MULS     R2,R3,R2
   \   00000080   912020E0           MLA      R0,R1,R0,R2
   \   00000084   0610B0E1           MOVS     R1,R6
   \   00000088   003091E0           ADDS     R3,R1,R0
   \   0000008C   FA2FA0E3           MOV      R2,#+1000
   \   00000090   0700B0E1           MOVS     R0,R7
   \   00000094   FA1FA0E3           MOV      R1,#+1000
   \   00000098   910010E0           MULS     R0,R1,R0
   \   0000009C   FA1FA0E3           MOV      R1,#+1000
   \   000000A0   ........           _BLF     ??divu32_a,??rA??divu32_a
   \   000000A4   921320E0           MLA      R0,R2,R3,R1
   \   000000A8   0080B0E1           MOVS     R8,R0
    122              loops = (INT16U)(ticks / 65536L);            /* Compute the integral number of 65536 tick delays   */
   \   000000AC   2808B0E1           LSRS     R0,R8,#+16
   \   000000B0   0090B0E1           MOVS     R9,R0
    123              ticks = ticks % 65536L;                      /* Obtain  the fractional number of ticks             */
   \   000000B4   0888A0E1           MOV      R8,R8, LSL #+16
   \   000000B8   2888B0E1           MOVS     R8,R8, LSR #+16
    124              OSTimeDly((INT16U)ticks);
   \   000000BC   0800B0E1           MOVS     R0,R8
   \   000000C0   0008A0E1           MOV      R0,R0, LSL #+16
   \   000000C4   2008B0E1           MOVS     R0,R0, LSR #+16
   \   000000C8   ........           BL       OSTimeDly
    125              while (loops > 0) {
   \                     ??OSTimeDlyHMSM_5:
   \   000000CC   0998A0E1           MOV      R9,R9, LSL #+16
   \   000000D0   2998B0E1           MOVS     R9,R9, LSR #+16
   \   000000D4   010059E3           CMP      R9,#+1
   \   000000D8   0700003A           BCC      ??OSTimeDlyHMSM_6
    126                  OSTimeDly((INT16U)32768u);
   \   000000DC   800CA0E3           MOV      R0,#+32768
   \   000000E0   ........           BL       OSTimeDly
    127                  OSTimeDly((INT16U)32768u);
   \   000000E4   800CA0E3           MOV      R0,#+32768
   \   000000E8   ........           BL       OSTimeDly
    128                  loops--;
   \   000000EC   FF00A0E3           MOV      R0,#+255
   \   000000F0   FF0C80E3           ORR      R0,R0,#0xFF00
   \   000000F4   099090E0           ADDS     R9,R0,R9
   \   000000F8   F3FFFFEA           B        ??OSTimeDlyHMSM_5
    129              }
    130              return (OS_ERR_NONE);
   \                     ??OSTimeDlyHMSM_6:
   \   000000FC   0000A0E3           MOV      R0,#+0
   \                     ??OSTimeDlyHMSM_1:
   \   00000100   F083BDE8           POP      {R4-R9,PC}       ;; return
    131          }
    132          #endif
    133          /*$PAGE*/
    134          /*
    135          *********************************************************************************************************
    136          *                                         RESUME A DELAYED TASK
    137          *
    138          * Description: This function is used resume a task that has been delayed through a call to either
    139          *              OSTimeDly() or OSTimeDlyHMSM().  Note that you can call this function to resume a
    140          *              task that is waiting for an event with timeout.  This would make the task look
    141          *              like a timeout occurred.
    142          *
    143          *              Also, you cannot resume a task that has called OSTimeDlyHMSM() with a combined time that
    144          *              exceeds 65535 clock ticks.  In other words, if the clock tick runs at 100 Hz then, you will
    145          *              not be able to resume a delayed task that called OSTimeDlyHMSM(0, 10, 55, 350) or higher:
    146          *
    147          *                  (10 Minutes * 60 + 55 Seconds + 0.35) * 100 ticks/second.
    148          *
    149          * Arguments  : prio                      specifies the priority of the task to resume
    150          *
    151          * Returns    : OS_ERR_NONE               Task has been resumed
    152          *              OS_ERR_PRIO_INVALID       if the priority you specify is higher that the maximum allowed
    153          *                                        (i.e. >= OS_LOWEST_PRIO)
    154          *              OS_ERR_TIME_NOT_DLY       Task is not waiting for time to expire
    155          *              OS_ERR_TASK_NOT_EXIST     The desired task has not been created or has been assigned to a Mutex.
    156          *********************************************************************************************************
    157          */
    158          
    159          #if OS_TIME_DLY_RESUME_EN > 0

   \                                 In segment CODE, align 4, keep-with-next
    160          INT8U  OSTimeDlyResume (INT8U prio)
    161          {
   \                     OSTimeDlyResume:
   \   00000000   70402DE9           PUSH     {R4-R6,LR}
   \   00000004   0040B0E1           MOVS     R4,R0
    162              OS_TCB    *ptcb;
    163          #if OS_CRITICAL_METHOD == 3                                    /* Storage for CPU status register      */
    164              OS_CPU_SR  cpu_sr = 0;
   \   00000008   0000A0E3           MOV      R0,#+0
   \   0000000C   0060B0E1           MOVS     R6,R0
    165          #endif
    166          
    167          
    168          
    169              if (prio >= OS_LOWEST_PRIO) {
   \   00000010   1F0054E3           CMP      R4,#+31
   \   00000014   0100003A           BCC      ??OSTimeDlyResume_0
    170                  return (OS_ERR_PRIO_INVALID);
   \   00000018   2A00A0E3           MOV      R0,#+42
   \   0000001C   3F0000EA           B        ??OSTimeDlyResume_1
    171              }
    172              OS_ENTER_CRITICAL();
   \                     ??OSTimeDlyResume_0:
   \   00000020   ........           _BLF     OS_CPU_SR_Save,??OS_CPU_SR_Save??rA
   \   00000024   0060B0E1           MOVS     R6,R0
    173              ptcb = OSTCBPrioTbl[prio];                                 /* Make sure that task exist            */
   \   00000028   0400B0E1           MOVS     R0,R4
   \   0000002C   0410A0E3           MOV      R1,#+4
   \   00000030   EC209FE5           LDR      R2,??OSTimeDlyResume_2  ;; OSTCBPrioTbl
   \   00000034   912020E0           MLA      R0,R1,R0,R2
   \   00000038   000090E5           LDR      R0,[R0, #+0]
   \   0000003C   0050B0E1           MOVS     R5,R0
    174              if (ptcb == (OS_TCB *)0) {
   \   00000040   000055E3           CMP      R5,#+0
   \   00000044   0300001A           BNE      ??OSTimeDlyResume_3
    175                  OS_EXIT_CRITICAL();
   \   00000048   0600B0E1           MOVS     R0,R6
   \   0000004C   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
    176                  return (OS_ERR_TASK_NOT_EXIST);                        /* The task does not exist              */
   \   00000050   4300A0E3           MOV      R0,#+67
   \   00000054   310000EA           B        ??OSTimeDlyResume_1
    177              }
    178              if (ptcb == (OS_TCB *)1) {
   \                     ??OSTimeDlyResume_3:
   \   00000058   010055E3           CMP      R5,#+1
   \   0000005C   0300001A           BNE      ??OSTimeDlyResume_4
    179                  OS_EXIT_CRITICAL();
   \   00000060   0600B0E1           MOVS     R0,R6
   \   00000064   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
    180                  return (OS_ERR_TASK_NOT_EXIST);                        /* The task does not exist              */
   \   00000068   4300A0E3           MOV      R0,#+67
   \   0000006C   2B0000EA           B        ??OSTimeDlyResume_1
    181              }
    182              if (ptcb->OSTCBDly == 0) {                                 /* See if task is delayed               */
   \                     ??OSTimeDlyResume_4:
   \   00000070   BA02D5E1           LDRH     R0,[R5, #+42]
   \   00000074   000050E3           CMP      R0,#+0
   \   00000078   0300001A           BNE      ??OSTimeDlyResume_5
    183                  OS_EXIT_CRITICAL();
   \   0000007C   0600B0E1           MOVS     R0,R6
   \   00000080   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
    184                  return (OS_ERR_TIME_NOT_DLY);                          /* Indicate that task was not delayed   */
   \   00000084   5000A0E3           MOV      R0,#+80
   \   00000088   240000EA           B        ??OSTimeDlyResume_1
    185              }
    186          
    187              ptcb->OSTCBDly = 0;                                        /* Clear the time delay                 */
   \                     ??OSTimeDlyResume_5:
   \   0000008C   0000A0E3           MOV      R0,#+0

⌨️ 快捷键说明

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