📄 os_flag.txt
字号:
;;;354 OS_EXIT_CRITICAL();
;;;355 if (tasks_waiting == OS_TRUE) { /* Reschedule only if task(s) were waiting */
;;;356 OS_Sched(); /* Find highest priority task ready to run */
;;;357 }
;;;358 *err = OS_ERR_NONE;
;;;359 pgrp_return = (OS_FLAG_GRP *)0; /* Event Flag Group has been deleted */
;;;360 break;
;;;361
;;;362 default:
;;;363 OS_EXIT_CRITICAL();
;;;364 *err = OS_ERR_INVALID_OPT;
;;;365 pgrp_return = pgrp;
;;;366 break;
;;;367 }
;;;368 return (pgrp_return);
;;;369 }
0003a4 e12fff1e BX lr
|L1.936|
0003a8 e3540000 CMP r4,#0
0003ac 1a000003 BNE |L1.960|
0003b0 e3a0006e MOV r0,#0x6e
0003b4 e5c60000 STRB r0,[r6,#0]
0003b8 e1a00004 MOV r0,r4
0003bc eafffff7 B |L1.928|
|L1.960|
0003c0 e59f0b9c LDR r0,|L1.3940|
0003c4 e5d00000 LDRB r0,[r0,#0] ; OSIntNesting
0003c8 e3500000 CMP r0,#0
0003cc da000003 BLE |L1.992|
0003d0 e3a0000f MOV r0,#0xf
0003d4 e5c60000 STRB r0,[r6,#0]
0003d8 e1a00004 MOV r0,r4
0003dc eaffffef B |L1.928|
|L1.992|
0003e0 e5d40000 LDRB r0,[r4,#0]
0003e4 e3500005 CMP r0,#5
0003e8 0a000003 BEQ |L1.1020|
0003ec e3a00001 MOV r0,#1
0003f0 e5c60000 STRB r0,[r6,#0]
0003f4 e1a00004 MOV r0,r4
0003f8 eaffffe8 B |L1.928|
|L1.1020|
0003fc ebfffffe BL OS_CPU_SR_Save
000400 e1a0a000 MOV r10,r0
000404 e5940004 LDR r0,[r4,#4]
000408 e3500000 CMP r0,#0
00040c 0a000001 BEQ |L1.1048|
000410 e3a07001 MOV r7,#1
000414 ea000000 B |L1.1052|
|L1.1048|
000418 e3a07000 MOV r7,#0
|L1.1052|
00041c e3550000 CMP r5,#0
000420 0a000002 BEQ |L1.1072|
000424 e3550001 CMP r5,#1
000428 1a000039 BNE |L1.1300|
00042c ea00001a B |L1.1180|
|L1.1072|
000430 e1a00000 MOV r0,r0
000434 e3570000 CMP r7,#0
000438 1a000011 BNE |L1.1156|
00043c e3a0003f MOV r0,#0x3f
000440 e5c4000a STRB r0,[r4,#0xa]
000444 e3a00000 MOV r0,#0
000448 e5c4000b STRB r0,[r4,#0xb]
00044c e5c40000 STRB r0,[r4,#0]
000450 e59f0b10 LDR r0,|L1.3944|
000454 e5900000 LDR r0,[r0,#0] ; OSFlagFreeList
000458 e5840004 STR r0,[r4,#4]
00045c e3a00000 MOV r0,#0
000460 e1c400b8 STRH r0,[r4,#8]
000464 e59f0afc LDR r0,|L1.3944|
000468 e5804000 STR r4,[r0,#0] ; OSFlagFreeList
00046c e1a0000a MOV r0,r10
000470 ebfffffe BL OS_CPU_SR_Restore
000474 e3a00000 MOV r0,#0
000478 e5c60000 STRB r0,[r6,#0]
00047c e3a08000 MOV r8,#0
000480 ea000004 B |L1.1176|
|L1.1156|
000484 e1a0000a MOV r0,r10
000488 ebfffffe BL OS_CPU_SR_Restore
00048c e3a00049 MOV r0,#0x49
000490 e5c60000 STRB r0,[r6,#0]
000494 e1a08004 MOV r8,r4
|L1.1176|
000498 ea000024 B |L1.1328|
|L1.1180|
00049c e1a00000 MOV r0,r0
0004a0 e5949004 LDR r9,[r4,#4]
0004a4 ea000003 B |L1.1208|
|L1.1192|
0004a8 e3a01000 MOV r1,#0
0004ac e1a00009 MOV r0,r9
0004b0 ebfffffe BL OS_FlagTaskRdy
0004b4 e5999000 LDR r9,[r9,#0]
|L1.1208|
0004b8 e3590000 CMP r9,#0
0004bc 1afffff9 BNE |L1.1192|
0004c0 e3a0003f MOV r0,#0x3f
0004c4 e5c4000a STRB r0,[r4,#0xa]
0004c8 e3a00000 MOV r0,#0
0004cc e5c4000b STRB r0,[r4,#0xb]
0004d0 e5c40000 STRB r0,[r4,#0]
0004d4 e59f0a8c LDR r0,|L1.3944|
0004d8 e5900000 LDR r0,[r0,#0] ; OSFlagFreeList
0004dc e5840004 STR r0,[r4,#4]
0004e0 e3a00000 MOV r0,#0
0004e4 e1c400b8 STRH r0,[r4,#8]
0004e8 e59f0a78 LDR r0,|L1.3944|
0004ec e5804000 STR r4,[r0,#0] ; OSFlagFreeList
0004f0 e1a0000a MOV r0,r10
0004f4 ebfffffe BL OS_CPU_SR_Restore
0004f8 e3570001 CMP r7,#1
0004fc 1a000000 BNE |L1.1284|
000500 ebfffffe BL OS_Sched
|L1.1284|
000504 e3a00000 MOV r0,#0
000508 e5c60000 STRB r0,[r6,#0]
00050c e3a08000 MOV r8,#0
000510 ea000006 B |L1.1328|
|L1.1300|
000514 e1a00000 MOV r0,r0
000518 e1a0000a MOV r0,r10
00051c ebfffffe BL OS_CPU_SR_Restore
000520 e3a00007 MOV r0,#7
000524 e5c60000 STRB r0,[r6,#0]
000528 e1a08004 MOV r8,r4
00052c e1a00000 MOV r0,r0
|L1.1328|
000530 e1a00000 MOV r0,r0
000534 e1a00008 MOV r0,r8
000538 eaffff98 B |L1.928|
ENDP
OSFlagNameGet PROC
;;;395 INT8U OSFlagNameGet (OS_FLAG_GRP *pgrp, INT8U *pname, INT8U *err)
;;;396 {
00053c e92d41f0 PUSH {r4-r8,lr}
000540 e1a04000 MOV r4,r0
000544 e1a05001 MOV r5,r1
000548 e1a06002 MOV r6,r2
;;;397 INT8U len;
;;;398 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;399 OS_CPU_SR cpu_sr = 0;
00054c e3a07000 MOV r7,#0
;;;400 #endif
;;;401
;;;402
;;;403
;;;404 OS_ENTER_CRITICAL();
000550 ebfffffe BL OS_CPU_SR_Save
000554 e1a07000 MOV r7,r0
;;;405 #if OS_ARG_CHK_EN > 0
;;;406 if (err == (INT8U *)0) { /* Validate 'err' */
000558 e3560000 CMP r6,#0
00055c 1a000004 BNE |L1.1396|
;;;407 OS_EXIT_CRITICAL();
000560 e1a00007 MOV r0,r7
000564 ebfffffe BL OS_CPU_SR_Restore
;;;408 return (0);
000568 e3a00000 MOV r0,#0
|L1.1388|
00056c e8bd41f0 POP {r4-r8,lr}
;;;409 }
;;;410 if (pgrp == (OS_FLAG_GRP *)0) { /* Is 'pgrp' a NULL pointer? */
;;;411 OS_EXIT_CRITICAL(); /* Yes */
;;;412 *err = OS_ERR_FLAG_INVALID_PGRP;
;;;413 return (0);
;;;414 }
;;;415 if (pname == (INT8U *)0) { /* Is 'pname' a NULL pointer? */
;;;416 OS_EXIT_CRITICAL(); /* Yes */
;;;417 *err = OS_ERR_PNAME_NULL;
;;;418 return (0);
;;;419 }
;;;420 #endif
;;;421 if (pgrp->OSFlagType != OS_EVENT_TYPE_FLAG) {
;;;422 OS_EXIT_CRITICAL();
;;;423 *err = OS_ERR_EVENT_TYPE;
;;;424 return (0);
;;;425 }
;;;426 len = OS_StrCopy(pname, pgrp->OSFlagName); /* Copy name from OS_FLAG_GRP */
;;;427 OS_EXIT_CRITICAL();
;;;428 *err = OS_ERR_NONE;
;;;429 return (len);
;;;430 }
000570 e12fff1e BX lr
|L1.1396|
000574 e3540000 CMP r4,#0
000578 1a000005 BNE |L1.1428|
00057c e1a00007 MOV r0,r7
000580 ebfffffe BL OS_CPU_SR_Restore
000584 e3a0006e MOV r0,#0x6e
000588 e5c60000 STRB r0,[r6,#0]
00058c e3a00000 MOV r0,#0
000590 eafffff5 B |L1.1388|
|L1.1428|
000594 e3550000 CMP r5,#0
000598 1a000005 BNE |L1.1460|
00059c e1a00007 MOV r0,r7
0005a0 ebfffffe BL OS_CPU_SR_Restore
0005a4 e3a0000c MOV r0,#0xc
0005a8 e5c60000 STRB r0,[r6,#0]
0005ac e3a00000 MOV r0,#0
0005b0 eaffffed B |L1.1388|
|L1.1460|
0005b4 e5d40000 LDRB r0,[r4,#0]
0005b8 e3500005 CMP r0,#5
0005bc 0a000005 BEQ |L1.1496|
0005c0 e1a00007 MOV r0,r7
0005c4 ebfffffe BL OS_CPU_SR_Restore
0005c8 e3a00001 MOV r0,#1
0005cc e5c60000 STRB r0,[r6,#0]
0005d0 e3a00000 MOV r0,#0
0005d4 eaffffe4 B |L1.1388|
|L1.1496|
0005d8 e284100a ADD r1,r4,#0xa
0005dc e1a00005 MOV r0,r5
0005e0 ebfffffe BL OS_StrCopy
0005e4 e1a08000 MOV r8,r0
0005e8 e1a00007 MOV r0,r7
0005ec ebfffffe BL OS_CPU_SR_Restore
0005f0 e3a00000 MOV r0,#0
0005f4 e5c60000 STRB r0,[r6,#0]
0005f8 e1a00008 MOV r0,r8
0005fc eaffffda B |L1.1388|
ENDP
OSFlagNameSet PROC
;;;457 void OSFlagNameSet (OS_FLAG_GRP *pgrp, INT8U *pname, INT8U *err)
;;;458 {
000600 e92d41f0 PUSH {r4-r8,lr}
000604 e1a04000 MOV r4,r0
000608 e1a05001 MOV r5,r1
00060c e1a07002 MOV r7,r2
;;;459 INT8U len;
;;;460 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;461 OS_CPU_SR cpu_sr = 0;
000610 e3a08000 MOV r8,#0
;;;462 #endif
;;;463
;;;464
;;;465
;;;466 OS_ENTER_CRITICAL();
000614 ebfffffe BL OS_CPU_SR_Save
000618 e1a08000 MOV r8,r0
;;;467 #if OS_ARG_CHK_EN > 0
;;;468 if (err == (INT8U *)0) { /* Validate 'err' */
00061c e3570000 CMP r7,#0
000620 1a000003 BNE |L1.1588|
;;;469 OS_EXIT_CRITICAL();
000624 e1a00008 MOV r0,r8
000628 ebfffffe BL OS_CPU_SR_Restore
|L1.1580|
;;;470 return;
;;;471 }
;;;472 if (pgrp == (OS_FLAG_GRP *)0) { /* Is 'pgrp' a NULL pointer? */
;;;473 OS_EXIT_CRITICAL(); /* Yes */
;;;474 *err = OS_ERR_FLAG_INVALID_PGRP;
;;;475 return;
;;;476 }
;;;477 if (pname == (INT8U *)0) { /* Is 'pname' a NULL pointer? */
;;;478 OS_EXIT_CRITICAL(); /* Yes */
;;;479 *err = OS_ERR_PNAME_NULL;
;;;480 return;
;;;481 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -