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

📄 os_probe.lst

📁 针对STM32F103的UCOS移植
💻 LST
📖 第 1 页 / 共 4 页
字号:
   \   00000000   00B5               PUSH     {LR}
    273              INT32U  cycles;
    274          
    275          
    276              cycles                         = OSProbe_TimeGetCycles();       /* This task is done                                    */
   \   00000002   ........           BL       OSProbe_TimeGetCycles
    277              OSTCBCur->OSTCBCyclesTot      += cycles - OSTCBCur->OSTCBCyclesStart;
   \   00000006   0549               LDR.N    R1,??OSProbe_TaskSwHook_0  ;; OSTCBCur
   \   00000008   0968               LDR      R1,[R1, #+0]
   \   0000000A   8A6B               LDR      R2,[R1, #+56]
   \   0000000C   1218               ADDS     R2,R2,R0
   \   0000000E   CB6B               LDR      R3,[R1, #+60]
   \   00000010   D21A               SUBS     R2,R2,R3
   \   00000012   8A63               STR      R2,[R1, #+56]
    278              OSTCBHighRdy->OSTCBCyclesStart = cycles;                        /* Save absolute #cycles at task activation             */
   \   00000014   0249               LDR.N    R1,??OSProbe_TaskSwHook_0+0x4  ;; OSTCBHighRdy
   \   00000016   0968               LDR      R1,[R1, #+0]
   \   00000018   C863               STR      R0,[R1, #+60]
    279          }
   \   0000001A   00BD               POP      {PC}             ;; return
   \                     ??OSProbe_TaskSwHook_0:
   \   0000001C   ........           DC32     OSTCBCur
   \   00000020   ........           DC32     OSTCBHighRdy
    280          #endif
    281          
    282          
    283          /*
    284          *********************************************************************************************************
    285          *                               uC/Probe Plug-in for uC/OS-II TICK HOOK
    286          *
    287          * Description: This function is currently unused.
    288          *
    289          * Returns    : None
    290          *********************************************************************************************************
    291          */
    292          
    293          #if OS_PROBE_HOOKS_EN > 0

   \                                 In segment CODE, align 4, keep-with-next
    294          void  OSProbe_TickHook (void)
    295          {
   \                     OSProbe_TickHook:
   \   00000000   00B5               PUSH     {LR}
    296              (void)OSProbe_TimeGetCycles();
   \   00000002   ........           BL       OSProbe_TimeGetCycles
    297          }
   \   00000006   00BD               POP      {PC}             ;; return
    298          #endif
    299          
    300          
    301          /*
    302          *********************************************************************************************************
    303          *                                           Get time [cycles]
    304          *
    305          * Description: This routine is required for task execution time measurement.  This function needs to
    306          *              return time as accurately as possible and in a 32-bit variable.
    307          *
    308          * Returns    : A 32-bit representation of time.
    309          *********************************************************************************************************
    310          */
    311          
    312          #if OS_PROBE_HOOKS_EN > 0

   \                                 In segment CODE, align 4, keep-with-next
    313          INT32U   OSProbe_TimeGetCycles(void)
    314          {
   \                     OSProbe_TimeGetCycles:
   \   00000000   30B5               PUSH     {R4,R5,LR}
    315              INT32U     cycles;
    316          #if OS_PROBE_TMR_32_BITS > 0
    317              INT32U     cnts32;
    318              INT32U     cnts32_delta;
    319          #else
    320              INT16U     cnts16;
    321              INT16U     cnts16_delta;
    322          #endif
    323          #if OS_CRITICAL_METHOD == 3                                         /* Allocate storage for CPU status register             */
    324              OS_CPU_SR  cpu_sr = 0;
    325          #endif
    326          
    327          
    328              OS_ENTER_CRITICAL();
   \   00000002   ........           _BLF     OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
   \   00000006   0400               MOVS     R4,R0
    329          #if OS_PROBE_TMR_32_BITS > 0
    330              cnts32               = OSProbe_TmrRd();                         /* Read current counts of the free running counter      */
    331              cnts32_delta         = cnts32 - OSProbe_TmrCntsPrev;
    332              OSProbe_TmrCntsPrev  = cnts32;                                  /* Save current counts for next time                    */
    333              OSProbe_CyclesCtr   += cnts32_delta;
    334          #else
    335              cnts16               = (INT16U)OSProbe_TmrRd();                 /* Read current counts of the free running counter      */
   \   00000008   ........           _BLF     OSProbe_TmrRd,??OSProbe_TmrRd??rT
   \   0000000C   80B2               UXTH     R0,R0
    336              cnts16_delta         = cnts16 - OSProbe_TmrCntsPrev;
   \   0000000E   ....               LDR.N    R1,??DataTable2  ;; OSProbe_TmrCntsPrev
   \   00000010   0200               MOVS     R2,R0
   \   00000012   0B88               LDRH     R3,[R1, #+0]
   \   00000014   D21A               SUBS     R2,R2,R3
   \   00000016   92B2               UXTH     R2,R2
    337              OSProbe_TmrCntsPrev  = cnts16;                                  /* Save current counts for next time                    */
   \   00000018   0880               STRH     R0,[R1, #+0]
    338              OSProbe_CyclesCtr   += (INT32U)cnts16_delta;
   \   0000001A   4868               LDR      R0,[R1, #+4]
   \   0000001C   8518               ADDS     R5,R0,R2
   \   0000001E   4D60               STR      R5,[R1, #+4]
    339          #endif
    340              cycles               = OSProbe_CyclesCtr;
    341              OS_EXIT_CRITICAL();
   \   00000020   2000               MOVS     R0,R4
   \   00000022   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
    342          
    343              return (cycles);
   \   00000026   2800               MOVS     R0,R5
   \   00000028   30BD               POP      {R4,R5,PC}       ;; return
    344          }
    345          #endif
    346          
    347          
    348          /*
    349          *********************************************************************************************************
    350          *********************************************************************************************************
    351          **                                          LOCAL FUNCTION
    352          *********************************************************************************************************
    353          *********************************************************************************************************
    354          */
    355          
    356          /*
    357          *********************************************************************************************************
    358          *                                            uC/OS-II Task
    359          *
    360          * Description: This function updates OSProbe_TaskStkUsage[] and OSProbe_TaskCPUUsage[] and calls
    361          *              a user-specified callback functions (OSProbe_CallbackFnct()), if the user sets this
    362          *              function.
    363          *
    364          * Argument(s): p_arg    is the argument passed to OSProbe_Task() by 'OSTaskCreate()'.
    365          *
    366          * Returns    : None
    367          *********************************************************************************************************
    368          */
    369          
    370          #if OS_PROBE_TASK > 0

   \                                 In segment CODE, align 4, keep-with-next
    371          static  void  OSProbe_Task (void *p_arg)
    372          {
   \                     OSProbe_Task:
   \   00000000   2DE9F04F           PUSH     {R4-R11,LR}
    373                      OS_TCB  *ptcb;
    374                      INT16U   i;
    375                      INT32U   cycles_tot;
    376              static  INT32U   cycles_dif[OS_MAX_TASKS];
    377              static  INT32U   cycles_tot_last[OS_MAX_TASKS];
    378          
    379          
    380          
    381              (void)p_arg;
    382          
    383                                                                              /* Initialize stored CyclesTot values                   */
    384              for (i = 0; i < OS_MAX_TASKS; i++) {
   \   00000004   0020               MOVS     R0,#+0
   \   00000006   8046               MOV      R8,R0
   \   00000008   4546               MOV      R5,R8
   \   0000000A   3949               LDR.N    R1,??OSProbe_Task_0  ;; ??cycles_tot_last
   \   0000000C   394C               LDR.N    R4,??OSProbe_Task_0+0x4  ;; OSProbe_TaskStkUsage
   \   0000000E   09E0               B.N      ??OSProbe_Task_1
    385                  cycles_tot_last[i]      = 0;
   \                     ??OSProbe_Task_2:
   \   00000010   41F82080           STR      R8,[R1, R0, LSL #+2]
    386                  OSProbe_TaskStkUsage[i] = 0;
   \   00000014   44F82090           STR      R9,[R4, R0, LSL #+2]
    387                  OSProbe_TaskCPUUsage[i] = 0;
   \   00000018   1AEB8000           ADDS     R0,R10,R0, LSL #+2
   \   0000001C   C0F80890           STR      R9,[R0, #+8]
    388              }
   \   00000020   6D1C               ADDS     R5,R5,#+1
   \   00000022   ADB2               UXTH     R5,R5
   \                     ??OSProbe_Task_1:
   \   00000024   4046               MOV      R0,R8
   \   00000026   8146               MOV      R9,R0
   \   00000028   ....               LDR.N    R0,??DataTable3  ;; OSProbe_Delay
   \   0000002A   8246               MOV      R10,R0
   \   0000002C   2800               MOVS     R0,R5
   \   0000002E   1028               CMP      R0,#+16
   \   00000030   EED3               BCC.N    ??OSProbe_Task_2
    389          
    390              while (1) {
    391                  OSTimeDlyHMSM(0, 0, 0, OSProbe_Delay);
   \                     ??OSProbe_Task_3:
   \   00000032   BAF80030           LDRH     R3,[R10, #+0]
   \   00000036   4246               MOV      R2,R8
   \   00000038   1146               MOV      R1,R2
   \   0000003A   0846               MOV      R0,R1
   \   0000003C   ........           _BLF     OSTimeDlyHMSM,??OSTimeDlyHMSM??rT
    392                  if ((INT32U)OSProbe_CallbackFnct != 0) {
   \   00000040   DAF80400           LDR      R0,[R10, #+4]
   \   00000044   0028               CMP      R0,#+0
   \   00000046   00D0               BEQ.N    ??OSProbe_Task_4
    393                      OSProbe_CallbackFnct();
   \   00000048   8047               BLX      R0
    394                  }
    395          
    396                                                                              /* Update task CPU usage                                */
    397                  i          = 0;
   \                     ??OSProbe_Task_4:
   \   0000004A   4546               MOV      R5,R8
    398                  cycles_tot = 0;

⌨️ 快捷键说明

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