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

📄 os_mbox.txt

📁 一个电力系统谐波检测的程序
💻 TXT
📖 第 1 页 / 共 3 页
字号:
000390  e5d50000          LDRB     r0,[r5,#0]            ;324
000394  e3500001          CMP      r0,#1                 ;324
000398  0a000001          BEQ      |L1.932|              ;324
00039c  e3a00001          MOV      r0,#1                 ;325
0003a0  eafffff4          B        |L1.888|              ;325
                  |L1.932|
0003a4  ef000002          SVC      0x2  ; formerly SWI   ;328
0003a8  e5d50001          LDRB     r0,[r5,#1]            ;329
0003ac  e3500000          CMP      r0,#0                 ;329
0003b0  0a000007          BEQ      |L1.980|              ;329
0003b4  e3a02002          MOV      r2,#2                 ;330
0003b8  e1a01004          MOV      r1,r4                 ;330
0003bc  e1a00005          MOV      r0,r5                 ;330
0003c0  ebfffffe          BL       OS_EventTaskRdy       ;330
0003c4  ef000003          SVC      0x3  ; formerly SWI   ;331
0003c8  ebfffffe          BL       OS_Sched              ;332
0003cc  e3a00000          MOV      r0,#0                 ;333
0003d0  eaffffe8          B        |L1.888|              ;333
                  |L1.980|
0003d4  e5950004          LDR      r0,[r5,#4]            ;335
0003d8  e3500000          CMP      r0,#0                 ;335
0003dc  0a000002          BEQ      |L1.1004|             ;335
0003e0  ef000003          SVC      0x3  ; formerly SWI   ;336
0003e4  e3a00014          MOV      r0,#0x14              ;337
0003e8  eaffffe2          B        |L1.888|              ;337
                  |L1.1004|
0003ec  e5854004          STR      r4,[r5,#4]            ;339
0003f0  ef000003          SVC      0x3  ; formerly SWI   ;340
0003f4  e3a00000          MOV      r0,#0                 ;341
0003f8  eaffffde          B        |L1.888|              ;341
                          ENDP

                  OSMboxPostOpt PROC
;;;375    INT8U  OSMboxPostOpt (OS_EVENT *pevent, void *msg, INT8U opt)
;;;376    {
0003fc  e92d4070          PUSH     {r4-r6,lr}
000400  e1a04000          MOV      r4,r0
000404  e1a05001          MOV      r5,r1
000408  e1a06002          MOV      r6,r2
;;;377    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;378        OS_CPU_SR  cpu_sr;
;;;379    #endif    
;;;380        
;;;381        
;;;382    #if OS_ARG_CHK_EN > 0
;;;383        if (pevent == (OS_EVENT *)0) {                    /* Validate 'pevent'                             */
00040c  e3540000          CMP      r4,#0
000410  1a000002          BNE      |L1.1056|
;;;384            return (OS_ERR_PEVENT_NULL);
000414  e3a00004          MOV      r0,#4
                  |L1.1048|
000418  e8bd4070          POP      {r4-r6,lr}
;;;385        }
;;;386        if (msg == (void *)0) {                           /* Make sure we are not posting a NULL pointer   */
;;;387            return (OS_ERR_POST_NULL_PTR);
;;;388        }
;;;389        if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) {  /* Validate event block type                     */
;;;390            return (OS_ERR_EVENT_TYPE);
;;;391        }
;;;392    #endif
;;;393        OS_ENTER_CRITICAL();
;;;394        if (pevent->OSEventGrp != 0x00) {                 /* See if any task pending on mailbox            */
;;;395            if ((opt & OS_POST_OPT_BROADCAST) != 0x00) {  /* Do we need to post msg to ALL waiting tasks ? */
;;;396                while (pevent->OSEventGrp != 0x00) {      /* Yes, Post to ALL tasks waiting on mailbox     */           
;;;397                    OS_EventTaskRdy(pevent, msg, OS_STAT_MBOX);    
;;;398                }
;;;399            } else {
;;;400                OS_EventTaskRdy(pevent, msg, OS_STAT_MBOX);    /* No,  Post to HPT waiting on mbox         */
;;;401            }
;;;402            OS_EXIT_CRITICAL();
;;;403            OS_Sched();                                        /* Find highest priority task ready to run  */
;;;404            return (OS_NO_ERR);
;;;405        }
;;;406        if (pevent->OSEventPtr != (void *)0) {            /* Make sure mailbox doesn't already have a msg  */
;;;407            OS_EXIT_CRITICAL();
;;;408            return (OS_MBOX_FULL);
;;;409        }
;;;410        pevent->OSEventPtr = msg;                         /* Place message in mailbox                      */
;;;411        OS_EXIT_CRITICAL();
;;;412        return (OS_NO_ERR);
;;;413    }
00041c  e12fff1e          BX       lr
                  |L1.1056|
000420  e3550000          CMP      r5,#0                 ;386
000424  1a000001          BNE      |L1.1072|             ;386
000428  e3a00003          MOV      r0,#3                 ;387
00042c  eafffff9          B        |L1.1048|             ;387
                  |L1.1072|
000430  e5d40000          LDRB     r0,[r4,#0]            ;389
000434  e3500001          CMP      r0,#1                 ;389
000438  0a000001          BEQ      |L1.1092|             ;389
00043c  e3a00001          MOV      r0,#1                 ;390
000440  eafffff4          B        |L1.1048|             ;390
                  |L1.1092|
000444  ef000002          SVC      0x2  ; formerly SWI   ;393
000448  e5d40001          LDRB     r0,[r4,#1]            ;394
00044c  e3500000          CMP      r0,#0                 ;394
000450  0a000012          BEQ      |L1.1184|             ;394
000454  e3160001          TST      r6,#1                 ;395
000458  0a000008          BEQ      |L1.1152|             ;395
00045c  ea000003          B        |L1.1136|             ;396
                  |L1.1120|
000460  e3a02002          MOV      r2,#2                 ;397
000464  e1a01005          MOV      r1,r5                 ;397
000468  e1a00004          MOV      r0,r4                 ;397
00046c  ebfffffe          BL       OS_EventTaskRdy       ;397
                  |L1.1136|
000470  e5d40001          LDRB     r0,[r4,#1]            ;396
000474  e3500000          CMP      r0,#0                 ;396
000478  1afffff8          BNE      |L1.1120|             ;396
00047c  ea000003          B        |L1.1168|             ;396
                  |L1.1152|
000480  e3a02002          MOV      r2,#2                 ;400
000484  e1a01005          MOV      r1,r5                 ;400
000488  e1a00004          MOV      r0,r4                 ;400
00048c  ebfffffe          BL       OS_EventTaskRdy       ;400
                  |L1.1168|
000490  ef000003          SVC      0x3  ; formerly SWI   ;402
000494  ebfffffe          BL       OS_Sched              ;403
000498  e3a00000          MOV      r0,#0                 ;404
00049c  eaffffdd          B        |L1.1048|             ;404
                  |L1.1184|
0004a0  e5940004          LDR      r0,[r4,#4]            ;406
0004a4  e3500000          CMP      r0,#0                 ;406
0004a8  0a000002          BEQ      |L1.1208|             ;406
0004ac  ef000003          SVC      0x3  ; formerly SWI   ;407
0004b0  e3a00014          MOV      r0,#0x14              ;408
0004b4  eaffffd7          B        |L1.1048|             ;408
                  |L1.1208|
0004b8  e5845004          STR      r5,[r4,#4]            ;410
0004bc  ef000003          SVC      0x3  ; formerly SWI   ;411
0004c0  e3a00000          MOV      r0,#0                 ;412
0004c4  eaffffd3          B        |L1.1048|             ;412
                          ENDP

                  OSMboxQuery PROC
;;;435    INT8U  OSMboxQuery (OS_EVENT *pevent, OS_MBOX_DATA *pdata)
;;;436    {
0004c8  e92d41f0          PUSH     {r4-r8,lr}
0004cc  e1a04000          MOV      r4,r0
0004d0  e1a05001          MOV      r5,r1
;;;437    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;438        OS_CPU_SR  cpu_sr;
;;;439    #endif    
;;;440        INT8U     *psrc;
;;;441        INT8U     *pdest;
;;;442    
;;;443    
;;;444    #if OS_ARG_CHK_EN > 0
;;;445        if (pevent == (OS_EVENT *)0) {                         /* Validate 'pevent'                        */
0004d4  e3540000          CMP      r4,#0
0004d8  1a000002          BNE      |L1.1256|
;;;446            return (OS_ERR_PEVENT_NULL);
0004dc  e3a00004          MOV      r0,#4
                  |L1.1248|
0004e0  e8bd41f0          POP      {r4-r8,lr}
;;;447        }
;;;448        if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) {       /* Validate event block type                */
;;;449            return (OS_ERR_EVENT_TYPE);
;;;450        }
;;;451    #endif
;;;452        OS_ENTER_CRITICAL();
;;;453        pdata->OSEventGrp = pevent->OSEventGrp;                /* Copy message mailbox wait list           */
;;;454        psrc              = &pevent->OSEventTbl[0];
;;;455        pdest             = &pdata->OSEventTbl[0];
;;;456    
;;;457    #if OS_EVENT_TBL_SIZE > 0
;;;458        *pdest++          = *psrc++;
;;;459    #endif
;;;460    
;;;461    #if OS_EVENT_TBL_SIZE > 1
;;;462        *pdest++          = *psrc++;
;;;463    #endif
;;;464    
;;;465    #if OS_EVENT_TBL_SIZE > 2
;;;466        *pdest++          = *psrc++;
;;;467    #endif
;;;468    
;;;469    #if OS_EVENT_TBL_SIZE > 3
;;;470        *pdest++          = *psrc++;
;;;471    #endif
;;;472    
;;;473    #if OS_EVENT_TBL_SIZE > 4
;;;474        *pdest++          = *psrc++;
;;;475    #endif
;;;476    
;;;477    #if OS_EVENT_TBL_SIZE > 5
;;;478        *pdest++          = *psrc++;
;;;479    #endif
;;;480    
;;;481    #if OS_EVENT_TBL_SIZE > 6
;;;482        *pdest++          = *psrc++;
;;;483    #endif
;;;484    
;;;485    #if OS_EVENT_TBL_SIZE > 7
;;;486        *pdest            = *psrc;
;;;487    #endif
;;;488        pdata->OSMsg = pevent->OSEventPtr;                     /* Get message from mailbox                 */
;;;489        OS_EXIT_CRITICAL();
;;;490        return (OS_NO_ERR);
;;;491    }
0004e4  e12fff1e          BX       lr
                  |L1.1256|
0004e8  e5d40000          LDRB     r0,[r4,#0]            ;448
0004ec  e3500001          CMP      r0,#1                 ;448
0004f0  0a000001          BEQ      |L1.1276|             ;448
0004f4  e3a00001          MOV      r0,#1                 ;449
0004f8  eafffff8          B        |L1.1248|             ;449
                  |L1.1276|
0004fc  ef000002          SVC      0x2  ; formerly SWI   ;452
000500  e5d40001          LDRB     r0,[r4,#1]            ;453
000504  e5c50006          STRB     r0,[r5,#6]            ;453
000508  e2846008          ADD      r6,r4,#8              ;454
00050c  e2857004          ADD      r7,r5,#4              ;455
000510  e4d60001          LDRB     r0,[r6],#1            ;458
000514  e4c70001          STRB     r0,[r7],#1            ;458
000518  e4d60001          LDRB     r0,[r6],#1            ;462
00051c  e4c70001          STRB     r0,[r7],#1            ;462
000520  e5940004          LDR      r0,[r4,#4]            ;488
000524  e5850000          STR      r0,[r5,#0]            ;488
000528  ef000003          SVC      0x3  ; formerly SWI   ;489
00052c  e3a00000          MOV      r0,#0                 ;490
000530  eaffffea          B        |L1.1248|             ;490
                  |L1.1332|
000534  00000000          DCD      OSIntNesting          ;490
                  |L1.1336|
000538  00000000          DCD      OSEventFreeList       ;490
                  |L1.1340|
00053c  00000000          DCD      OSTCBCur              ;490
                          ENDP


⌨️ 快捷键说明

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