os_mbox.txt
来自「uc/os在lpc2100系列的KEIL模板 uc/os在lpc2100系列的」· 文本 代码 · 共 681 行 · 第 1/3 页
TXT
681 行
000344 e3500000 CMP r0,#0 ;329
000348 0a000007 BEQ |L1.876|
00034c e3a02002 MOV r2,#2 ;330
000350 e1a01005 MOV r1,r5 ;330
000354 e1a00004 MOV r0,r4 ;330
000358 ebfffffe BL OS_EventTaskRdy
00035c ef000003 SVC #0x3 ;331
000360 ebfffffe BL OS_Sched
000364 e3a00000 MOV r0,#0 ;333
000368 eaffffe8 B |L1.784|
|L1.876|
00036c e5940004 LDR r0,[r4,#4] ;335
000370 e3500000 CMP r0,#0 ;335
000374 0a000002 BEQ |L1.900|
000378 ef000003 SVC #0x3 ;336
00037c e3a00014 MOV r0,#0x14 ;337
000380 eaffffe2 B |L1.784|
|L1.900|
000384 e5845004 STR r5,[r4,#4] ;339
000388 ef000003 SVC #0x3 ;340
00038c e3a00000 MOV r0,#0 ;341
000390 eaffffde B |L1.784|
;;;343 #endif
ENDP
OSMboxPostOpt PROC
;;;375 INT8U OSMboxPostOpt (OS_EVENT *pevent, void *msg, INT8U opt)
;;;376 {
000394 e92d4070 PUSH {r4-r6,lr}
000398 e1a04000 MOV r4,r0
00039c e1a05001 MOV r5,r1
0003a0 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' */
0003a4 e3540000 CMP r4,#0
0003a8 1a000002 BNE |L1.952|
;;;384 return (OS_ERR_PEVENT_NULL);
0003ac e3a00004 MOV r0,#4
|L1.944|
0003b0 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 }
0003b4 e12fff1e BX lr
|L1.952|
0003b8 e3550000 CMP r5,#0 ;386
0003bc 1a000001 BNE |L1.968|
0003c0 e3a00003 MOV r0,#3 ;387
0003c4 eafffff9 B |L1.944|
|L1.968|
0003c8 e5d40000 LDRB r0,[r4,#0] ;389
0003cc e3500001 CMP r0,#1 ;389
0003d0 0a000001 BEQ |L1.988|
0003d4 e3a00001 MOV r0,#1 ;390
0003d8 eafffff4 B |L1.944|
|L1.988|
0003dc ef000002 SVC #0x2 ;393
0003e0 e5d40001 LDRB r0,[r4,#1] ;394
0003e4 e3500000 CMP r0,#0 ;394
0003e8 0a000012 BEQ |L1.1080|
0003ec e3160001 TST r6,#1 ;395
0003f0 0a000008 BEQ |L1.1048|
0003f4 ea000003 B |L1.1032|
|L1.1016|
0003f8 e3a02002 MOV r2,#2 ;397
0003fc e1a01005 MOV r1,r5 ;397
000400 e1a00004 MOV r0,r4 ;397
000404 ebfffffe BL OS_EventTaskRdy
|L1.1032|
000408 e5d40001 LDRB r0,[r4,#1] ;396
00040c e3500000 CMP r0,#0 ;396
000410 1afffff8 BNE |L1.1016|
000414 ea000003 B |L1.1064|
|L1.1048|
000418 e3a02002 MOV r2,#2 ;400
00041c e1a01005 MOV r1,r5 ;400
000420 e1a00004 MOV r0,r4 ;400
000424 ebfffffe BL OS_EventTaskRdy
|L1.1064|
000428 ef000003 SVC #0x3 ;402
00042c ebfffffe BL OS_Sched
000430 e3a00000 MOV r0,#0 ;404
000434 eaffffdd B |L1.944|
|L1.1080|
000438 e5940004 LDR r0,[r4,#4] ;406
00043c e3500000 CMP r0,#0 ;406
000440 0a000002 BEQ |L1.1104|
000444 ef000003 SVC #0x3 ;407
000448 e3a00014 MOV r0,#0x14 ;408
00044c eaffffd7 B |L1.944|
|L1.1104|
000450 e5845004 STR r5,[r4,#4] ;410
000454 ef000003 SVC #0x3 ;411
000458 e3a00000 MOV r0,#0 ;412
00045c eaffffd3 B |L1.944|
;;;414 #endif
ENDP
OSMboxQuery PROC
;;;435 INT8U OSMboxQuery (OS_EVENT *pevent, OS_MBOX_DATA *pdata)
;;;436 {
000460 e92d4070 PUSH {r4-r6,lr}
000464 e1a04000 MOV r4,r0
000468 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' */
00046c e3540000 CMP r4,#0
000470 1a000002 BNE |L1.1152|
;;;446 return (OS_ERR_PEVENT_NULL);
000474 e3a00004 MOV r0,#4
|L1.1144|
000478 e8bd4070 POP {r4-r6,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 }
00047c e12fff1e BX lr
|L1.1152|
000480 e5d40000 LDRB r0,[r4,#0] ;448
000484 e3500001 CMP r0,#1 ;448
000488 0a000001 BEQ |L1.1172|
00048c e3a00001 MOV r0,#1 ;449
000490 eafffff8 B |L1.1144|
|L1.1172|
000494 ef000002 SVC #0x2 ;452
000498 e5d40001 LDRB r0,[r4,#1] ;453
00049c e5c50006 STRB r0,[r5,#6] ;453
0004a0 e2841008 ADD r1,r4,#8 ;454
0004a4 e2850004 ADD r0,r5,#4 ;455
0004a8 e5d12000 LDRB r2,[r1,#0] ;458
0004ac e5c02000 STRB r2,[r0,#0] ;458
0004b0 e5d11001 LDRB r1,[r1,#1] ;462
0004b4 e5c01001 STRB r1,[r0,#1] ;462
0004b8 e5940004 LDR r0,[r4,#4] ;488
0004bc e5850000 STR r0,[r5,#0] ;488
0004c0 ef000003 SVC #0x3 ;489
0004c4 e3a00000 MOV r0,#0 ;490
0004c8 eaffffea B |L1.1144|
;;;492 #endif /* OS_MBOX_QUERY_EN */
ENDP
|L1.1228|
0004cc 00000000 DCD OSIntNesting
|L1.1232|
0004d0 00000000 DCD OSEventFreeList
|L1.1236|
0004d4 00000000 DCD OSTCBCur
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?