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

📄 os_mbox.txt

📁 一个电力系统谐波检测的程序
💻 TXT
📖 第 1 页 / 共 3 页
字号:
000184  e59f03ac          LDR      r0,|L1.1336|          ;174
000188  e5804000          STR      r4,[r0,#0]            ;174  ; OSEventFreeList
00018c  ef000003          SVC      0x3  ; formerly SWI   ;175
000190  e3a00000          MOV      r0,#0                 ;176
000194  e5c60000          STRB     r0,[r6,#0]            ;176
000198  eaffffd6          B        |L1.248|              ;177
                  |L1.412|
00019c  ef000003          SVC      0x3  ; formerly SWI   ;179
0001a0  e3a00008          MOV      r0,#8                 ;180
0001a4  e5c60000          STRB     r0,[r6,#0]            ;180
0001a8  e1a00004          MOV      r0,r4                 ;181
0001ac  eaffffd1          B        |L1.248|              ;181
                  |L1.432|
0001b0  e1a00000          MOV      r0,r0                 ;184
0001b4  ea000003          B        |L1.456|              ;185
                  |L1.440|
0001b8  e3a02002          MOV      r2,#2                 ;186
0001bc  e3a01000          MOV      r1,#0                 ;186
0001c0  e1a00004          MOV      r0,r4                 ;186
0001c4  ebfffffe          BL       OS_EventTaskRdy       ;186
                  |L1.456|
0001c8  e5d40001          LDRB     r0,[r4,#1]            ;185
0001cc  e3500000          CMP      r0,#0                 ;185
0001d0  1afffff8          BNE      |L1.440|              ;185
0001d4  e3a00000          MOV      r0,#0                 ;188
0001d8  e5c40000          STRB     r0,[r4,#0]            ;188
0001dc  e59f0354          LDR      r0,|L1.1336|          ;189
0001e0  e5900000          LDR      r0,[r0,#0]            ;189  ; OSEventFreeList
0001e4  e5840004          STR      r0,[r4,#4]            ;189
0001e8  e59f0348          LDR      r0,|L1.1336|          ;190
0001ec  e5804000          STR      r4,[r0,#0]            ;190  ; OSEventFreeList
0001f0  ef000003          SVC      0x3  ; formerly SWI   ;191
0001f4  e3570001          CMP      r7,#1                 ;192
0001f8  1a000000          BNE      |L1.512|              ;192
0001fc  ebfffffe          BL       OS_Sched              ;193
                  |L1.512|
000200  e3a00000          MOV      r0,#0                 ;195
000204  e5c60000          STRB     r0,[r6,#0]            ;195
000208  eaffffba          B        |L1.248|              ;196
                  |L1.524|
00020c  e1a00000          MOV      r0,r0                 ;198
000210  ef000003          SVC      0x3  ; formerly SWI   ;199
000214  e3a00007          MOV      r0,#7                 ;200
000218  e5c60000          STRB     r0,[r6,#0]            ;200
00021c  e1a00004          MOV      r0,r4                 ;201
000220  eaffffb4          B        |L1.248|              ;201
                          ENDP

                  OSMboxPend PROC
;;;238    void  *OSMboxPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)
;;;239    {
000224  e92d41f0          PUSH     {r4-r8,lr}
000228  e1a04000          MOV      r4,r0
00022c  e1a05001          MOV      r5,r1
000230  e1a07002          MOV      r7,r2
;;;240    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;241        OS_CPU_SR  cpu_sr;
;;;242    #endif    
;;;243        void      *msg;
;;;244    
;;;245    
;;;246        if (OSIntNesting > 0) {                           /* See if called from ISR ...                    */
000234  e59f02f8          LDR      r0,|L1.1332|
000238  e5d00000          LDRB     r0,[r0,#0]  ; OSIntNesting
00023c  e3500000          CMP      r0,#0
000240  da000004          BLE      |L1.600|
;;;247            *err = OS_ERR_PEND_ISR;                       /* ... can't PEND from an ISR                    */
000244  e3a00002          MOV      r0,#2
000248  e5c70000          STRB     r0,[r7,#0]
;;;248            return ((void *)0);
00024c  e3a00000          MOV      r0,#0
                  |L1.592|
000250  e8bd41f0          POP      {r4-r8,lr}
;;;249        }
;;;250    #if OS_ARG_CHK_EN > 0
;;;251        if (pevent == (OS_EVENT *)0) {                    /* Validate 'pevent'                             */
;;;252            *err = OS_ERR_PEVENT_NULL;
;;;253            return ((void *)0);
;;;254        }
;;;255        if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) {  /* Validate event block type                     */
;;;256            *err = OS_ERR_EVENT_TYPE;
;;;257            return ((void *)0);
;;;258        }
;;;259    #endif
;;;260        OS_ENTER_CRITICAL();
;;;261        msg = pevent->OSEventPtr;
;;;262        if (msg != (void *)0) {                           /* See if there is already a message             */
;;;263            pevent->OSEventPtr = (void *)0;               /* Clear the mailbox                             */
;;;264            OS_EXIT_CRITICAL();
;;;265            *err = OS_NO_ERR;
;;;266            return (msg);                                 /* Return the message received (or NULL)         */
;;;267        }
;;;268        OSTCBCur->OSTCBStat |= OS_STAT_MBOX;              /* Message not available, task will pend         */
;;;269        OSTCBCur->OSTCBDly   = timeout;                   /* Load timeout in TCB                           */
;;;270        OS_EventTaskWait(pevent);                         /* Suspend task until event or timeout occurs    */
;;;271        OS_EXIT_CRITICAL();
;;;272        OS_Sched();                                       /* Find next highest priority task ready to run  */
;;;273        OS_ENTER_CRITICAL();
;;;274        msg = OSTCBCur->OSTCBMsg;
;;;275        if (msg != (void *)0) {                           /* See if we were given the message              */
;;;276            OSTCBCur->OSTCBMsg      = (void *)0;          /* Yes, clear message received                   */
;;;277            OSTCBCur->OSTCBStat     = OS_STAT_RDY;
;;;278            OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0;      /* No longer waiting for event                   */
;;;279            OS_EXIT_CRITICAL();
;;;280            *err                    = OS_NO_ERR;
;;;281            return (msg);                                 /* Return the message received                   */
;;;282        }
;;;283        OS_EventTO(pevent);                               /* Timed out, Make task ready                    */
;;;284        OS_EXIT_CRITICAL();
;;;285        *err = OS_TIMEOUT;                                /* Indicate that a timeout occured               */
;;;286        return ((void *)0);                               /* Return a NULL message                         */
;;;287    }
000254  e12fff1e          BX       lr
                  |L1.600|
000258  e3540000          CMP      r4,#0                 ;251
00025c  1a000003          BNE      |L1.624|              ;251
000260  e3a00004          MOV      r0,#4                 ;252
000264  e5c70000          STRB     r0,[r7,#0]            ;252
000268  e3a00000          MOV      r0,#0                 ;253
00026c  eafffff7          B        |L1.592|              ;253
                  |L1.624|
000270  e5d40000          LDRB     r0,[r4,#0]            ;255
000274  e3500001          CMP      r0,#1                 ;255
000278  0a000003          BEQ      |L1.652|              ;255
00027c  e3a00001          MOV      r0,#1                 ;256
000280  e5c70000          STRB     r0,[r7,#0]            ;256
000284  e3a00000          MOV      r0,#0                 ;257
000288  eafffff0          B        |L1.592|              ;257
                  |L1.652|
00028c  ef000002          SVC      0x2  ; formerly SWI   ;260
000290  e5946004          LDR      r6,[r4,#4]            ;261
000294  e3560000          CMP      r6,#0                 ;262
000298  0a000006          BEQ      |L1.696|              ;262
00029c  e3a00000          MOV      r0,#0                 ;263
0002a0  e5840004          STR      r0,[r4,#4]            ;263
0002a4  ef000003          SVC      0x3  ; formerly SWI   ;264
0002a8  e3a00000          MOV      r0,#0                 ;265
0002ac  e5c70000          STRB     r0,[r7,#0]            ;265
0002b0  e1a00006          MOV      r0,r6                 ;266
0002b4  eaffffe5          B        |L1.592|              ;266
                  |L1.696|
0002b8  e59f027c          LDR      r0,|L1.1340|          ;268
0002bc  e5900000          LDR      r0,[r0,#0]            ;268  ; OSTCBCur
0002c0  e5d0002c          LDRB     r0,[r0,#0x2c]         ;268
0002c4  e3800002          ORR      r0,r0,#2              ;268
0002c8  e59f126c          LDR      r1,|L1.1340|          ;268
0002cc  e5911000          LDR      r1,[r1,#0]            ;268  ; OSTCBCur
0002d0  e5c1002c          STRB     r0,[r1,#0x2c]         ;268
0002d4  e59f0260          LDR      r0,|L1.1340|          ;269
0002d8  e5900000          LDR      r0,[r0,#0]            ;269  ; OSTCBCur
0002dc  e1c052ba          STRH     r5,[r0,#0x2a]         ;269
0002e0  e1a00004          MOV      r0,r4                 ;270
0002e4  ebfffffe          BL       OS_EventTaskWait      ;270
0002e8  ef000003          SVC      0x3  ; formerly SWI   ;271
0002ec  ebfffffe          BL       OS_Sched              ;272
0002f0  ef000002          SVC      0x2  ; formerly SWI   ;273
0002f4  e59f0240          LDR      r0,|L1.1340|          ;274
0002f8  e5900000          LDR      r0,[r0,#0]            ;274  ; OSTCBCur
0002fc  e5906020          LDR      r6,[r0,#0x20]         ;274
000300  e3560000          CMP      r6,#0                 ;275
000304  0a00000e          BEQ      |L1.836|              ;275
000308  e3a00000          MOV      r0,#0                 ;276
00030c  e59f1228          LDR      r1,|L1.1340|          ;276
000310  e5911000          LDR      r1,[r1,#0]            ;276  ; OSTCBCur
000314  e5810020          STR      r0,[r1,#0x20]         ;276
000318  e59f121c          LDR      r1,|L1.1340|          ;277
00031c  e5911000          LDR      r1,[r1,#0]            ;277  ; OSTCBCur
000320  e5c1002c          STRB     r0,[r1,#0x2c]         ;277
000324  e59f1210          LDR      r1,|L1.1340|          ;278
000328  e5911000          LDR      r1,[r1,#0]            ;278  ; OSTCBCur
00032c  e581001c          STR      r0,[r1,#0x1c]         ;278
000330  ef000003          SVC      0x3  ; formerly SWI   ;279
000334  e3a00000          MOV      r0,#0                 ;280
000338  e5c70000          STRB     r0,[r7,#0]            ;280
00033c  e1a00006          MOV      r0,r6                 ;281
000340  eaffffc2          B        |L1.592|              ;281
                  |L1.836|
000344  e1a00004          MOV      r0,r4                 ;283
000348  ebfffffe          BL       OS_EventTO            ;283
00034c  ef000003          SVC      0x3  ; formerly SWI   ;284
000350  e3a0000a          MOV      r0,#0xa               ;285
000354  e5c70000          STRB     r0,[r7,#0]            ;285
000358  e3a00000          MOV      r0,#0                 ;286
00035c  eaffffbb          B        |L1.592|              ;286
                          ENDP

                  OSMboxPost PROC
;;;310    INT8U  OSMboxPost (OS_EVENT *pevent, void *msg)
;;;311    {
000360  e92d4070          PUSH     {r4-r6,lr}
000364  e1a05000          MOV      r5,r0
000368  e1a04001          MOV      r4,r1
;;;312    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;313        OS_CPU_SR  cpu_sr;
;;;314    #endif    
;;;315        
;;;316        
;;;317    #if OS_ARG_CHK_EN > 0
;;;318        if (pevent == (OS_EVENT *)0) {                    /* Validate 'pevent'                             */
00036c  e3550000          CMP      r5,#0
000370  1a000002          BNE      |L1.896|
;;;319            return (OS_ERR_PEVENT_NULL);
000374  e3a00004          MOV      r0,#4
                  |L1.888|
000378  e8bd4070          POP      {r4-r6,lr}
;;;320        }
;;;321        if (msg == (void *)0) {                           /* Make sure we are not posting a NULL pointer   */
;;;322            return (OS_ERR_POST_NULL_PTR);
;;;323        }
;;;324        if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) {  /* Validate event block type                     */
;;;325            return (OS_ERR_EVENT_TYPE);
;;;326        }
;;;327    #endif
;;;328        OS_ENTER_CRITICAL();
;;;329        if (pevent->OSEventGrp != 0x00) {                 /* See if any task pending on mailbox            */
;;;330            OS_EventTaskRdy(pevent, msg, OS_STAT_MBOX);   /* Ready highest priority task waiting on event  */
;;;331            OS_EXIT_CRITICAL();
;;;332            OS_Sched();                                   /* Find highest priority task ready to run       */
;;;333            return (OS_NO_ERR);
;;;334        }
;;;335        if (pevent->OSEventPtr != (void *)0) {            /* Make sure mailbox doesn't already have a msg  */
;;;336            OS_EXIT_CRITICAL();
;;;337            return (OS_MBOX_FULL);
;;;338        }
;;;339        pevent->OSEventPtr = msg;                         /* Place message in mailbox                      */
;;;340        OS_EXIT_CRITICAL();
;;;341        return (OS_NO_ERR);
;;;342    }
00037c  e12fff1e          BX       lr
                  |L1.896|
000380  e3540000          CMP      r4,#0                 ;321
000384  1a000001          BNE      |L1.912|              ;321
000388  e3a00003          MOV      r0,#3                 ;322
00038c  eafffff9          B        |L1.888|              ;322
                  |L1.912|

⌨️ 快捷键说明

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