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

📄 os_sem.txt

📁 一个电力系统谐波检测的程序
💻 TXT
📖 第 1 页 / 共 3 页
字号:
;;;206                 OS_EXIT_CRITICAL();
;;;207                 *err = OS_ERR_INVALID_OPT;
;;;208                 return (pevent);
;;;209        }
;;;210    }
000108  e12fff1e          BX       lr
                  |L1.268|
00010c  e3540000          CMP      r4,#0                 ;161
000110  1a000003          BNE      |L1.292|              ;161
000114  e3a00004          MOV      r0,#4                 ;162
000118  e5c60000          STRB     r0,[r6,#0]            ;162
00011c  e1a00004          MOV      r0,r4                 ;163
000120  eafffff7          B        |L1.260|              ;163
                  |L1.292|
000124  e5d40000          LDRB     r0,[r4,#0]            ;165
000128  e3500003          CMP      r0,#3                 ;165
00012c  0a000003          BEQ      |L1.320|              ;165
000130  e3a00001          MOV      r0,#1                 ;166
000134  e5c60000          STRB     r0,[r6,#0]            ;166
000138  e1a00004          MOV      r0,r4                 ;167
00013c  eafffff0          B        |L1.260|              ;167
                  |L1.320|
000140  ef000002          SVC      0x2  ; formerly SWI   ;170
000144  e5d40001          LDRB     r0,[r4,#1]            ;171
000148  e3500000          CMP      r0,#0                 ;171
00014c  0a000001          BEQ      |L1.344|              ;171
000150  e3a07001          MOV      r7,#1                 ;172
000154  ea000000          B        |L1.348|              ;172
                  |L1.344|
000158  e3a07000          MOV      r7,#0                 ;174
                  |L1.348|
00015c  e3550000          CMP      r5,#0                 ;176
000160  0a000002          BEQ      |L1.368|              ;176
000164  e3550001          CMP      r5,#1                 ;176
000168  1a00002a          BNE      |L1.536|              ;176
00016c  ea000012          B        |L1.444|              ;176
                  |L1.368|
000170  e1a00000          MOV      r0,r0                 ;177
000174  e3570000          CMP      r7,#0                 ;178
000178  1a00000a          BNE      |L1.424|              ;178
00017c  e3a00000          MOV      r0,#0                 ;179
000180  e5c40000          STRB     r0,[r4,#0]            ;179
000184  e59f02bc          LDR      r0,|L1.1096|          ;180
000188  e5900000          LDR      r0,[r0,#0]            ;180  ; OSEventFreeList
00018c  e5840004          STR      r0,[r4,#4]            ;180
000190  e59f02b0          LDR      r0,|L1.1096|          ;181
000194  e5804000          STR      r4,[r0,#0]            ;181  ; OSEventFreeList
000198  ef000003          SVC      0x3  ; formerly SWI   ;182
00019c  e3a00000          MOV      r0,#0                 ;183
0001a0  e5c60000          STRB     r0,[r6,#0]            ;183
0001a4  eaffffd6          B        |L1.260|              ;184
                  |L1.424|
0001a8  ef000003          SVC      0x3  ; formerly SWI   ;186
0001ac  e3a00008          MOV      r0,#8                 ;187
0001b0  e5c60000          STRB     r0,[r6,#0]            ;187
0001b4  e1a00004          MOV      r0,r4                 ;188
0001b8  eaffffd1          B        |L1.260|              ;188
                  |L1.444|
0001bc  e1a00000          MOV      r0,r0                 ;191
0001c0  ea000003          B        |L1.468|              ;192
                  |L1.452|
0001c4  e3a02001          MOV      r2,#1                 ;193
0001c8  e3a01000          MOV      r1,#0                 ;193
0001cc  e1a00004          MOV      r0,r4                 ;193
0001d0  ebfffffe          BL       OS_EventTaskRdy       ;193
                  |L1.468|
0001d4  e5d40001          LDRB     r0,[r4,#1]            ;192
0001d8  e3500000          CMP      r0,#0                 ;192
0001dc  1afffff8          BNE      |L1.452|              ;192
0001e0  e3a00000          MOV      r0,#0                 ;195
0001e4  e5c40000          STRB     r0,[r4,#0]            ;195
0001e8  e59f0258          LDR      r0,|L1.1096|          ;196
0001ec  e5900000          LDR      r0,[r0,#0]            ;196  ; OSEventFreeList
0001f0  e5840004          STR      r0,[r4,#4]            ;196
0001f4  e59f024c          LDR      r0,|L1.1096|          ;197
0001f8  e5804000          STR      r4,[r0,#0]            ;197  ; OSEventFreeList
0001fc  ef000003          SVC      0x3  ; formerly SWI   ;198
000200  e3570001          CMP      r7,#1                 ;199
000204  1a000000          BNE      |L1.524|              ;199
000208  ebfffffe          BL       OS_Sched              ;200
                  |L1.524|
00020c  e3a00000          MOV      r0,#0                 ;202
000210  e5c60000          STRB     r0,[r6,#0]            ;202
000214  eaffffba          B        |L1.260|              ;203
                  |L1.536|
000218  e1a00000          MOV      r0,r0                 ;205
00021c  ef000003          SVC      0x3  ; formerly SWI   ;206
000220  e3a00007          MOV      r0,#7                 ;207
000224  e5c60000          STRB     r0,[r6,#0]            ;207
000228  e1a00004          MOV      r0,r4                 ;208
00022c  eaffffb4          B        |L1.260|              ;208
                          ENDP

                  OSSemPend PROC
;;;244    void  OSSemPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)
;;;245    {
000230  e92d4070          PUSH     {r4-r6,lr}
000234  e1a04000          MOV      r4,r0
000238  e1a05001          MOV      r5,r1
00023c  e1a06002          MOV      r6,r2
;;;246    #if OS_CRITICAL_METHOD == 3                           /* Allocate storage for CPU status register      */
;;;247        OS_CPU_SR  cpu_sr;
;;;248    #endif    
;;;249    
;;;250    
;;;251        if (OSIntNesting > 0) {                           /* See if called from ISR ...                    */
000240  e59f01fc          LDR      r0,|L1.1092|
000244  e5d00000          LDRB     r0,[r0,#0]  ; OSIntNesting
000248  e3500000          CMP      r0,#0
00024c  da000003          BLE      |L1.608|
;;;252            *err = OS_ERR_PEND_ISR;                       /* ... can't PEND from an ISR                    */
000250  e3a00002          MOV      r0,#2
000254  e5c60000          STRB     r0,[r6,#0]
;;;253            return;
;;;254        }
;;;255    #if OS_ARG_CHK_EN > 0
;;;256        if (pevent == (OS_EVENT *)0) {                    /* Validate 'pevent'                             */
;;;257            *err = OS_ERR_PEVENT_NULL;
;;;258            return;
;;;259        }
;;;260        if (pevent->OSEventType != OS_EVENT_TYPE_SEM) {   /* Validate event block type                     */
;;;261            *err = OS_ERR_EVENT_TYPE;
;;;262            return;
;;;263        }
;;;264    #endif
;;;265        OS_ENTER_CRITICAL();
;;;266        if (pevent->OSEventCnt > 0) {                     /* If sem. is positive, resource available ...   */
;;;267            pevent->OSEventCnt--;                         /* ... decrement semaphore only if positive.     */
;;;268            OS_EXIT_CRITICAL();
;;;269            *err = OS_NO_ERR;
;;;270            return;
;;;271        }
;;;272                                                          /* Otherwise, must wait until event occurs       */
;;;273        OSTCBCur->OSTCBStat |= OS_STAT_SEM;               /* Resource not available, pend on semaphore     */
;;;274        OSTCBCur->OSTCBDly   = timeout;                   /* Store pend timeout in TCB                     */
;;;275        OS_EventTaskWait(pevent);                         /* Suspend task until event or timeout occurs    */
;;;276        OS_EXIT_CRITICAL();
;;;277        OS_Sched();                                       /* Find next highest priority task ready         */
;;;278        OS_ENTER_CRITICAL();
;;;279        if (OSTCBCur->OSTCBStat & OS_STAT_SEM) {          /* Must have timed out if still waiting for event*/
;;;280            OS_EventTO(pevent);
;;;281            OS_EXIT_CRITICAL();
;;;282            *err = OS_TIMEOUT;                            /* Indicate that didn't get event within TO      */
;;;283            return;
;;;284        }
;;;285        OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0;
;;;286        OS_EXIT_CRITICAL();
;;;287        *err = OS_NO_ERR;
;;;288    }
                  |L1.600|
000258  e8bd4070          POP      {r4-r6,lr}
00025c  e12fff1e          BX       lr
                  |L1.608|
000260  e3540000          CMP      r4,#0                 ;256
000264  1a000002          BNE      |L1.628|              ;256
000268  e3a00004          MOV      r0,#4                 ;257
00026c  e5c60000          STRB     r0,[r6,#0]            ;257
000270  eafffff8          B        |L1.600|              ;258
                  |L1.628|
000274  e5d40000          LDRB     r0,[r4,#0]            ;260
000278  e3500003          CMP      r0,#3                 ;260
00027c  0a000002          BEQ      |L1.652|              ;260
000280  e3a00001          MOV      r0,#1                 ;261
000284  e5c60000          STRB     r0,[r6,#0]            ;261
000288  eafffff2          B        |L1.600|              ;262
                  |L1.652|
00028c  ef000002          SVC      0x2  ; formerly SWI   ;265
000290  e1d400b2          LDRH     r0,[r4,#2]            ;266
000294  e3500000          CMP      r0,#0                 ;266
000298  da000006          BLE      |L1.696|              ;266
00029c  e1d400b2          LDRH     r0,[r4,#2]            ;267
0002a0  e2400001          SUB      r0,r0,#1              ;267
0002a4  e1c400b2          STRH     r0,[r4,#2]            ;267
0002a8  ef000003          SVC      0x3  ; formerly SWI   ;268
0002ac  e3a00000          MOV      r0,#0                 ;269
0002b0  e5c60000          STRB     r0,[r6,#0]            ;269
0002b4  eaffffe7          B        |L1.600|              ;270
                  |L1.696|
0002b8  e59f018c          LDR      r0,|L1.1100|          ;273
0002bc  e5900000          LDR      r0,[r0,#0]            ;273  ; OSTCBCur
0002c0  e5d0002c          LDRB     r0,[r0,#0x2c]         ;273
0002c4  e3800001          ORR      r0,r0,#1              ;273
0002c8  e59f117c          LDR      r1,|L1.1100|          ;273
0002cc  e5911000          LDR      r1,[r1,#0]            ;273  ; OSTCBCur
0002d0  e5c1002c          STRB     r0,[r1,#0x2c]         ;273
0002d4  e59f0170          LDR      r0,|L1.1100|          ;274
0002d8  e5900000          LDR      r0,[r0,#0]            ;274  ; OSTCBCur
0002dc  e1c052ba          STRH     r5,[r0,#0x2a]         ;274
0002e0  e1a00004          MOV      r0,r4                 ;275
0002e4  ebfffffe          BL       OS_EventTaskWait      ;275
0002e8  ef000003          SVC      0x3  ; formerly SWI   ;276
0002ec  ebfffffe          BL       OS_Sched              ;277
0002f0  ef000002          SVC      0x2  ; formerly SWI   ;278
0002f4  e59f0150          LDR      r0,|L1.1100|          ;279
0002f8  e5900000          LDR      r0,[r0,#0]            ;279  ; OSTCBCur
0002fc  e5d0002c          LDRB     r0,[r0,#0x2c]         ;279

⌨️ 快捷键说明

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