📄 os_flag.txt
字号:
0001ac f8dff8df LDR r10,|L1.1200|
0001b0 f04ff04f MOV r9,#0x3f ;319
0001b4 f04ff04f MOV r11,#0 ;319
0001b8 d002 BEQ |L1.448|
0001ba 2801 CMP r0,#1 ;319
0001bc d13b BNE |L1.566|
0001be e020 B |L1.514|
|L1.448|
0001c0 b99f CBNZ r7,|L1.490|
0001c2 f884f884 STRB r9,[r4,#0xa] ;323
0001c6 f884f884 STRB r11,[r4,#0xb] ;324
0001ca f884f884 STRB r11,[r4,#0] ;326
0001ce f8daf8da LDR r0,[r10,#0] ;327 ; OSFlagFreeList
0001d2 6060 STR r0,[r4,#4] ;327
0001d4 f8a4f8a4 STRH r11,[r4,#8] ;328
0001d8 f8caf8ca STR r4,[r10,#0] ;329 ; OSFlagFreeList
0001dc 4640 MOV r0,r8 ;330
0001de f7fff7ff BL OS_CPU_SR_Restore
0001e2 f886f886 STRB r11,[r6,#0] ;331
0001e6 2000 MOVS r0,#0 ;332
0001e8 e7cd B |L1.390|
|L1.490|
0001ea 4640 MOV r0,r8 ;334
0001ec f7fff7ff BL OS_CPU_SR_Restore
0001f0 2049 MOVS r0,#0x49 ;335
0001f2 7030 STRB r0,[r6,#0] ;335
0001f4 4620 MOV r0,r4 ;336
0001f6 e7c6 B |L1.390|
|L1.504|
0001f8 2100 MOVS r1,#0 ;343
0001fa 4628 MOV r0,r5 ;343
0001fc f7fff7ff BL OS_FlagTaskRdy
000200 682d LDR r5,[r5,#0] ;344
|L1.514|
000202 2d00 CMP r5,#0 ;342
000204 d1f8 BNE |L1.504|
000206 f884f884 STRB r9,[r4,#0xa] ;347
00020a f884f884 STRB r11,[r4,#0xb] ;348
00020e f884f884 STRB r11,[r4,#0] ;350
000212 f8daf8da LDR r0,[r10,#0] ;351 ; OSFlagFreeList
000216 6060 STR r0,[r4,#4] ;351
000218 f8a4f8a4 STRH r11,[r4,#8] ;352
00021c f8caf8ca STR r4,[r10,#0] ;353 ; OSFlagFreeList
000220 4640 MOV r0,r8 ;354
000222 f7fff7ff BL OS_CPU_SR_Restore
000226 2f01 CMP r7,#1 ;355
000228 d101 BNE |L1.558|
00022a f7fff7ff BL OS_Sched
|L1.558|
00022e f886f886 STRB r11,[r6,#0] ;358
000232 2000 MOVS r0,#0 ;359
000234 e7a7 B |L1.390|
|L1.566|
000236 4640 MOV r0,r8 ;363
000238 f7fff7ff BL OS_CPU_SR_Restore
00023c 2007 MOVS r0,#7 ;364
00023e 7030 STRB r0,[r6,#0] ;364
000240 4620 MOV r0,r4 ;365
000242 e7a0 B |L1.390|
;;;370 #endif
ENDP
OSFlagNameGet PROC
;;;396 INT8U OSFlagNameGet (OS_FLAG_GRP *pgrp, INT8U *pname, INT8U *perr)
;;;397 {
000244 e92de92d PUSH {r4-r8,lr}
000248 4606 MOV r6,r0
00024a 460f MOV r7,r1
00024c 4615 MOV r5,r2
;;;398 INT8U len;
;;;399 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;400 OS_CPU_SR cpu_sr = 0;
;;;401 #endif
;;;402
;;;403
;;;404
;;;405 #if OS_ARG_CHK_EN > 0
;;;406 if (perr == (INT8U *)0) { /* Validate 'perr' */
;;;407 return (0);
;;;408 }
;;;409 if (pgrp == (OS_FLAG_GRP *)0) { /* Is 'pgrp' a NULL pointer? */
;;;410 *perr = OS_ERR_FLAG_INVALID_PGRP;
;;;411 return (0);
;;;412 }
;;;413 if (pname == (INT8U *)0) { /* Is 'pname' a NULL pointer? */
;;;414 *perr = OS_ERR_PNAME_NULL;
;;;415 return (0);
;;;416 }
;;;417 #endif
;;;418 if (OSIntNesting > 0) { /* See if trying to call from an ISR */
00024e 4897 LDR r0,|L1.1196|
000250 7800 LDRB r0,[r0,#0] ; OSIntNesting
000252 b118 CBZ r0,|L1.604|
;;;419 *perr = OS_ERR_NAME_GET_ISR;
000254 2011 MOVS r0,#0x11
000256 7028 STRB r0,[r5,#0]
;;;420 return (0);
000258 2000 MOVS r0,#0
;;;421 }
;;;422 OS_ENTER_CRITICAL();
;;;423 if (pgrp->OSFlagType != OS_EVENT_TYPE_FLAG) {
;;;424 OS_EXIT_CRITICAL();
;;;425 *perr = OS_ERR_EVENT_TYPE;
;;;426 return (0);
;;;427 }
;;;428 len = OS_StrCopy(pname, pgrp->OSFlagName); /* Copy name from OS_FLAG_GRP */
;;;429 OS_EXIT_CRITICAL();
;;;430 *perr = OS_ERR_NONE;
;;;431 return (len);
;;;432 }
00025a e6dd B |L1.24|
|L1.604|
00025c f7fff7ff BL OS_CPU_SR_Save
000260 4604 MOV r4,r0 ;422
000262 7830 LDRB r0,[r6,#0] ;423
000264 2805 CMP r0,#5 ;423
000266 d006 BEQ |L1.630|
000268 4620 MOV r0,r4 ;424
00026a f7fff7ff BL OS_CPU_SR_Restore
00026e 2001 MOVS r0,#1 ;425
000270 7028 STRB r0,[r5,#0] ;425
000272 2000 MOVS r0,#0 ;426
000274 e6d0 B |L1.24|
|L1.630|
000276 f106f106 ADD r1,r6,#0xa ;428
00027a 4638 MOV r0,r7 ;428
00027c f7fff7ff BL OS_StrCopy
000280 4606 MOV r6,r0 ;428
000282 4620 MOV r0,r4 ;429
000284 f7fff7ff BL OS_CPU_SR_Restore
000288 2000 MOVS r0,#0 ;430
00028a 7028 STRB r0,[r5,#0] ;430
00028c 4630 MOV r0,r6 ;431
00028e e6c3 B |L1.24|
;;;433 #endif
ENDP
OSFlagNameSet PROC
;;;460 void OSFlagNameSet (OS_FLAG_GRP *pgrp, INT8U *pname, INT8U *perr)
;;;461 {
000290 e92de92d PUSH {r4-r8,lr}
000294 4605 MOV r5,r0
000296 460f MOV r7,r1
000298 4614 MOV r4,r2
;;;462 INT8U len;
;;;463 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;464 OS_CPU_SR cpu_sr = 0;
;;;465 #endif
;;;466
;;;467
;;;468
;;;469 #if OS_ARG_CHK_EN > 0
;;;470 if (perr == (INT8U *)0) { /* Validate 'perr' */
;;;471 return;
;;;472 }
;;;473 if (pgrp == (OS_FLAG_GRP *)0) { /* Is 'pgrp' a NULL pointer? */
;;;474 *perr = OS_ERR_FLAG_INVALID_PGRP;
;;;475 return;
;;;476 }
;;;477 if (pname == (INT8U *)0) { /* Is 'pname' a NULL pointer? */
;;;478 *perr = OS_ERR_PNAME_NULL;
;;;479 return;
;;;480 }
;;;481 #endif
;;;482 if (OSIntNesting > 0) { /* See if trying to call from an ISR */
00029a 4884 LDR r0,|L1.1196|
00029c 7800 LDRB r0,[r0,#0] ; OSIntNesting
00029e b110 CBZ r0,|L1.678|
;;;483 *perr = OS_ERR_NAME_SET_ISR;
0002a0 2012 MOVS r0,#0x12
0002a2 7020 STRB r0,[r4,#0]
;;;484 return;
;;;485 }
;;;486 OS_ENTER_CRITICAL();
;;;487 if (pgrp->OSFlagType != OS_EVENT_TYPE_FLAG) {
;;;488 OS_EXIT_CRITICAL();
;;;489 *perr = OS_ERR_EVENT_TYPE;
;;;490 return;
;;;491 }
;;;492 len = OS_StrLen(pname); /* Can we fit the string in the storage area? */
;;;493 if (len > (OS_FLAG_NAME_SIZE - 1)) { /* No */
;;;494 OS_EXIT_CRITICAL();
;;;495 *perr = OS_ERR_FLAG_NAME_TOO_LONG;
;;;496 return;
;;;497 }
;;;498 (void)OS_StrCopy(pgrp->OSFlagName, pname); /* Yes, copy name from OS_FLAG_GRP */
;;;499 OS_EXIT_CRITICAL();
;;;500 *perr = OS_ERR_NONE;
;;;501 return;
;;;502 }
0002a4 e6b8 B |L1.24|
|L1.678|
0002a6 f7fff7ff BL OS_CPU_SR_Save
0002aa 4606 MOV r6,r0 ;486
0002ac 7828 LDRB r0,[r5,#0] ;487
0002ae 2805 CMP r0,#5 ;487
0002b0 d005 BEQ |L1.702|
0002b2 4630 MOV r0,r6 ;488
0002b4 f7fff7ff BL OS_CPU_SR_Restore
0002b8 2001 MOVS r0,#1 ;489
0002ba 7020 STRB r0,[r4,#0] ;489
0002bc e6ac B |L1.24|
|L1.702|
0002be 4638 MOV r0,r7 ;492
0002c0 f7fff7ff BL OS_StrLen
0002c4 280f CMP r0,#0xf ;493
0002c6 d905 BLS |L1.724|
0002c8 4630 MOV r0,r6 ;494
0002ca f7fff7ff BL OS_CPU_SR_Restore
0002ce 2073 MOVS r0,#0x73 ;495
0002d0 7020 STRB r0,[r4,#0] ;495
0002d2 e6a1 B |L1.24|
|L1.724|
0002d4 4639 MOV r1,r7 ;498
0002d6 f105f105 ADD r0,r5,#0xa ;498
0002da f7fff7ff BL OS_StrCopy
0002de 4630 MOV r0,r6 ;499
0002e0 f7fff7ff BL OS_CPU_SR_Restore
0002e4 2000 MOVS r0,#0 ;500
0002e6 7020 STRB r0,[r4,#0] ;500
0002e8 e696 B |L1.24|
;;;503 #endif
ENDP
OS_FlagBlock PROC
;;;988 static void OS_FlagBlock (OS_FLAG_GRP *pgrp, OS_FLAG_NODE *pnode, OS_FLAGS flags, INT8U wait_type, INT16U timeout)
;;;989 {
0002ea b5f0 PUSH {r4-r7,lr}
0002ec 9f05 LDR r7,[sp,#0x14]
;;;990 OS_FLAG_NODE *pnode_next;
;;;991 INT8U y;
;;;992
;;;993
;;;994 OSTCBCur->OSTCBStat |= OS_STAT_FLAG;
0002ee 4d73 LDR r5,|L1.1212|
0002f0 682c LDR r4,[r5,#0] ; OSTCBCur
0002f2 3428 ADDS r4,r4,#0x28
0002f4 7a26 LDRB r6,[r4,#8]
0002f6 f046f046 ORR r6,r6,#0x20
0002fa 7226 STRB r6,[r4,#8]
;;;995 OSTCBCur->OSTCBStatPend = OS_STAT_PEND_OK;
0002fc 2600 MOVS r6,#0
0002fe 7266 STRB r6,[r4,#9]
;;;996 OSTCBCur->OSTCBDly = timeout; /* Store timeout in task's TCB */
000300 80e7 STRH r7,[r4,#6]
;;;997 #if OS_TASK_DEL_EN > 0
;;;998 OSTCBCur->OSTCBFlagNode = pnode; /* TCB to link to node */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -