os_probe.txt

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

TXT
439
字号
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 942] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\rvmdk\os_probe.o --depend=.\rvmdk\os_probe.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 ..\..\..\..\..\uC-Probe\Target\Plugins\uCOS-II\os_probe.c]
                          THUMB

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

                  OSProbe_Task PROC
;;;371    static  void  OSProbe_Task (void *p_arg)
;;;372    {
000000  e92d4ff8          PUSH     {r3-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++) {
000004  2000              MOVS     r0,#0
000006  f8dfa184          LDR      r10,|L1.396|
00000a  f04f0b00          MOV      r11,#0
00000e  f10a0780          ADD      r7,r10,#0x80
000012  f1a70140          SUB      r1,r7,#0x40
                  |L1.22|
;;;385            cycles_tot_last[i]      = 0;
000016  f84ab020          STR      r11,[r10,r0,LSL #2]
;;;386            OSProbe_TaskStkUsage[i] = 0;
00001a  f847b020          STR      r11,[r7,r0,LSL #2]
;;;387            OSProbe_TaskCPUUsage[i] = 0;
00001e  f841b020          STR      r11,[r1,r0,LSL #2]
000022  1c40              ADDS     r0,r0,#1              ;384
000024  b280              UXTH     r0,r0                 ;384
000026  2810              CMP      r0,#0x10              ;384
000028  d3f5              BCC      |L1.22|
;;;388        }
;;;389    
;;;390        while (1) {
00002a  f8df8164          LDR      r8,|L1.400|
00002e  f04f0964          MOV      r9,#0x64
000032  e045              B        |L1.192|
                  |L1.52|
;;;391            OSTimeDlyHMSM(0, 0, 0, OSProbe_Delay);
;;;392            if ((INT32U)OSProbe_CallbackFnct != 0) {
;;;393                OSProbe_CallbackFnct();
000034  4780              BLX      r0
                  |L1.54|
;;;394            }
;;;395    
;;;396                                                                        /* Update task CPU usage                                */
;;;397            i          = 0;
000036  2500              MOVS     r5,#0
;;;398            cycles_tot = 0;
000038  2600              MOVS     r6,#0
;;;399            ptcb       = &OSTCBTbl[0];                                  /*  ... Get pointer to first TCB ...                    */
00003a  4c56              LDR      r4,|L1.404|
                  |L1.60|
;;;400            while (i < OS_MAX_TASKS) {
;;;401                if (ptcb == (OS_TCB *)0 || ptcb == (OS_TCB *)1) {
00003c  2c00              CMP      r4,#0
00003e  d02a              BEQ      |L1.150|
000040  2c01              CMP      r4,#1
000042  d028              BEQ      |L1.150|
;;;402                    break;                                              /*  ... If ptcb is NULL, then last TCB reached ...      */
;;;403                }
;;;404    
;;;405                                                                        /*  ... Calculate new CyclesDif, the number of cycles   */
;;;406                                                                        /*  ... used by the task since the last reading.  Half  */
;;;407                                                                        /*  ... the previous value is added to provide some     */
;;;408                                                                        /*  ... hysteresis, thereby reducing the natural        */
;;;409                                                                        /*  ... "jitter" in the data.                           */
;;;410                cycles_dif[i]       = (ptcb->OSTCBCyclesTot - cycles_tot_last[i]) / 2 + (cycles_dif[i] / 2);
000044  f85a1025          LDR      r1,[r10,r5,LSL #2]
000048  6ba0              LDR      r0,[r4,#0x38]
00004a  1a40              SUBS     r0,r0,r1
00004c  f8581025          LDR      r1,[r8,r5,LSL #2]
000050  0840              LSRS     r0,r0,#1
000052  eb000051          ADD      r0,r0,r1,LSR #1
000056  f8480025          STR      r0,[r8,r5,LSL #2]
;;;411                cycles_tot_last[i]  = ptcb->OSTCBCyclesTot;
00005a  6ba1              LDR      r1,[r4,#0x38]
00005c  f84a1025          STR      r1,[r10,r5,LSL #2]
;;;412                cycles_tot         += cycles_dif[i];
000060  4406              ADD      r6,r6,r0
;;;413    
;;;414                if (ptcb->OSTCBStkSize == 0) {
000062  68e0              LDR      r0,[r4,#0xc]
000064  b910              CBNZ     r0,|L1.108|
;;;415                    OSProbe_TaskStkUsage[i] = 0;
000066  f847b025          STR      r11,[r7,r5,LSL #2]
00006a  e00f              B        |L1.140|
                  |L1.108|
;;;416                } else {
;;;417    #if OS_STK_GROWTH == 1
;;;418                    OSProbe_TaskStkUsage[i] = (FP32)(((INT32U)(ptcb->OSTCBStkBase) - (INT32U)(ptcb->OSTCBStkPtr)) * 100)
00006c  0080              LSLS     r0,r0,#2
00006e  f7fffffe          BL       __aeabi_ui2f
000072  9000              STR      r0,[sp,#0]
000074  6821              LDR      r1,[r4,#0]
000076  6c20              LDR      r0,[r4,#0x40]
000078  1a40              SUBS     r0,r0,r1
00007a  fb00f009          MUL      r0,r0,r9
00007e  f7fffffe          BL       __aeabi_ui2f
000082  9900              LDR      r1,[sp,#0]
000084  f7fffffe          BL       __aeabi_fdiv
000088  f8470025          STR      r0,[r7,r5,LSL #2]
                  |L1.140|
;;;419                                            / ((ptcb->OSTCBStkSize) * sizeof (OS_STK));
;;;420    #else
;;;421                    OSProbe_TaskStkUsage[i] = (FP32)(((INT32U)(ptcb->OSTCBStkPtr) - (INT32U)(ptcb->OSTCBStkBase)) * 100)
;;;422                                            / ((ptcb->OSTCBStkSize) * sizeof (OS_STK));
;;;423    #endif
;;;424                }
;;;425    
;;;426                ptcb = ptcb->OSTCBPrev;
00008c  69a4              LDR      r4,[r4,#0x18]
;;;427    
;;;428                i++;
00008e  1c68              ADDS     r0,r5,#1
000090  b285              UXTH     r5,r0
000092  2d10              CMP      r5,#0x10              ;400
000094  d3d2              BCC      |L1.60|
                  |L1.150|
;;;429            }
;;;430                                                                        /*  ... For each task, calculate percent CPU usage.     */
;;;431            for (i = 0; i < OS_MAX_TASKS; i++) {
000096  2400              MOVS     r4,#0
000098  4d3f              LDR      r5,|L1.408|
00009a  4630              MOV      r0,r6
00009c  f7fffffe          BL       __aeabi_ui2f
0000a0  4606              MOV      r6,r0
                  |L1.162|
;;;432                OSProbe_TaskCPUUsage[i] = (FP32)(cycles_dif[i] * 100) / cycles_tot;
0000a2  f8580024          LDR      r0,[r8,r4,LSL #2]
0000a6  fb00f009          MUL      r0,r0,r9
0000aa  f7fffffe          BL       __aeabi_ui2f
0000ae  4631              MOV      r1,r6
0000b0  f7fffffe          BL       __aeabi_fdiv
0000b4  f8450024          STR      r0,[r5,r4,LSL #2]
0000b8  1c60              ADDS     r0,r4,#1              ;431
0000ba  b284              UXTH     r4,r0                 ;431
0000bc  2c10              CMP      r4,#0x10              ;431
0000be  d3f0              BCC      |L1.162|
                  |L1.192|
0000c0  4c36              LDR      r4,|L1.412|
0000c2  2200              MOVS     r2,#0                 ;391
0000c4  8823              LDRH     r3,[r4,#0]            ;391  ; OSProbe_Delay
0000c6  4611              MOV      r1,r2                 ;391
0000c8  4610              MOV      r0,r2                 ;391
0000ca  f7fffffe          BL       OSTimeDlyHMSM
0000ce  6860              LDR      r0,[r4,#4]            ;392  ; OSProbe_CallbackFnct
0000d0  2800              CMP      r0,#0                 ;392
0000d2  d0b0              BEQ      |L1.54|
0000d4  e7ae              B        |L1.52|
;;;433            }
;;;434        }
;;;435    }
;;;436    #endif
                          ENDP

                  OSProbe_InitOS PROC
;;;143    static  void  OSProbe_InitOS (void)
;;;144    {
0000d6  b500              PUSH     {lr}
0000d8  b087              SUB      sp,sp,#0x1c
;;;145    #if OS_TASK_NAME_SIZE > 12
;;;146        INT8U  err;
;;;147    #endif
;;;148    
;;;149    
;;;150    #if OS_TASK_CREATE_EXT_EN > 0
;;;151        #if OS_STK_GROWTH == 1
;;;152        (void)OSTaskCreateExt(OSProbe_Task,
0000da  2303              MOVS     r3,#3
0000dc  2200              MOVS     r2,#0
0000de  e9cd2303          STRD     r2,r3,[sp,#0xc]
0000e2  f44f7180          MOV      r1,#0x100
0000e6  482e              LDR      r0,|L1.416|
0000e8  9102              STR      r1,[sp,#8]
0000ea  2308              MOVS     r3,#8
0000ec  9001              STR      r0,[sp,#4]
0000ee  f500727f          ADD      r2,r0,#0x3fc
0000f2  2100              MOVS     r1,#0
0000f4  f2af00f7          ADR      r0,OSProbe_Task + 1
0000f8  9300              STR      r3,[sp,#0]
0000fa  f7fffffe          BL       OSTaskCreateExt
;;;153                              (void *)0,                                    /* No arguments passed to OSProbe_Task()            */
;;;154                              &OSProbe_TaskStk[OS_PROBE_TASK_STK_SIZE - 1], /* Set Top-Of-Stack                                 */
;;;155                              OS_PROBE_TASK_PRIO,                           /* Lowest priority level                            */
;;;156                              OS_PROBE_TASK_ID,
;;;157                              &OSProbe_TaskStk[0],                          /* Set Bottom-Of-Stack                              */
;;;158                              OS_PROBE_TASK_STK_SIZE,
;;;159                              (void *)0,                                    /* No TCB extension                                 */
;;;160                              OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);   /* Enable stack checking + clear stack              */
;;;161        #else
;;;162        (void)OSTaskCreateExt(OSProbe_Task,
;;;163                              (void *)0,                                    /* No arguments passed to OSProbe_Task()            */
;;;164                              &OSProbe_TaskStk[0],                          /* Set Top-Of-Stack                                 */
;;;165                              OS_PROBE_TASK_PRIO,                           /* Lowest priority level                            */
;;;166                              OS_PROBE_TASK_ID,
;;;167                              &OSProbe_TaskStk[OS_PROBE_TASK_STK_SIZE - 1], /* Set Bottom-Of-Stack                              */
;;;168                              OS_PROBE_TASK_STK_SIZE,
;;;169                              (void *)0,                                    /* No TCB extension                                 */
;;;170                              OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);   /* Enable stack checking + clear stack              */
;;;171        #endif
;;;172    #else
;;;173        #if OS_STK_GROWTH == 1
;;;174        (void)OSTaskCreate(OSProbe_Task,
;;;175                           (void *)0,
;;;176                           &OSProbe_TaskStk[OS_PROBE_TASK_STK_SIZE - 1],
;;;177                           OS_PROBE_TASK_PRIO);
;;;178        #else
;;;179        (void)OSTaskCreate(OSProbe_Task,
;;;180                           (void *)0,
;;;181                           &OSProbe_TaskStk[0],
;;;182                           OS_PROBE_TASK_PRIO);
;;;183        #endif

⌨️ 快捷键说明

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