📄 os_q.txt
字号:
000694 eafffff7 B |L1.1656|
|L1.1688|
000698 e5d40000 LDRB r0,[r4,#0]
00069c e3500002 CMP r0,#2
0006a0 0a000003 BEQ |L1.1716|
0006a4 e3a00001 MOV r0,#1
0006a8 e5c60000 STRB r0,[r6,#0]
0006ac e3a00000 MOV r0,#0
0006b0 eafffff0 B |L1.1656|
|L1.1716|
0006b4 ebfffffe BL OS_CPU_SR_Save
0006b8 e1a08000 MOV r8,r0
0006bc e5d4000a LDRB r0,[r4,#0xa]
0006c0 e3500000 CMP r0,#0
0006c4 0a000023 BEQ |L1.1880|
0006c8 e3a07000 MOV r7,#0
0006cc e3550000 CMP r5,#0
0006d0 0a00000e BEQ |L1.1808|
0006d4 e3550001 CMP r5,#1
0006d8 1a00000e BNE |L1.1816|
0006dc e1a00000 MOV r0,r0
0006e0 ea000006 B |L1.1792|
|L1.1764|
0006e4 e3a03002 MOV r3,#2
0006e8 e3a02004 MOV r2,#4
0006ec e3a01000 MOV r1,#0
0006f0 e1a00004 MOV r0,r4
0006f4 ebfffffe BL OS_EventTaskRdy
0006f8 e2870001 ADD r0,r7,#1
0006fc e20070ff AND r7,r0,#0xff
|L1.1792|
000700 e5d4000a LDRB r0,[r4,#0xa]
000704 e3500000 CMP r0,#0
000708 1afffff5 BNE |L1.1764|
00070c ea000009 B |L1.1848|
|L1.1808|
000710 e1a00000 MOV r0,r0
000714 e1a00000 MOV r0,r0
|L1.1816|
000718 e3a03002 MOV r3,#2
00071c e3a02004 MOV r2,#4
000720 e3a01000 MOV r1,#0
000724 e1a00004 MOV r0,r4
000728 ebfffffe BL OS_EventTaskRdy
00072c e2870001 ADD r0,r7,#1
000730 e20070ff AND r7,r0,#0xff
000734 e1a00000 MOV r0,r0
|L1.1848|
000738 e1a00000 MOV r0,r0
00073c e1a00008 MOV r0,r8
000740 ebfffffe BL OS_CPU_SR_Restore
000744 ebfffffe BL OS_Sched
000748 e3a0000e MOV r0,#0xe
00074c e5c60000 STRB r0,[r6,#0]
000750 e1a00007 MOV r0,r7
000754 eaffffc7 B |L1.1656|
|L1.1880|
000758 e1a00008 MOV r0,r8
00075c ebfffffe BL OS_CPU_SR_Restore
000760 e3a00000 MOV r0,#0
000764 e5c60000 STRB r0,[r6,#0]
000768 eaffffc2 B |L1.1656|
ENDP
OSQPost PROC
;;;568 INT8U OSQPost (OS_EVENT *pevent, void *msg)
;;;569 {
00076c e92d41f0 PUSH {r4-r8,lr}
000770 e1a04000 MOV r4,r0
000774 e1a05001 MOV r5,r1
;;;570 OS_Q *pq;
;;;571 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;572 OS_CPU_SR cpu_sr = 0;
000778 e3a07000 MOV r7,#0
;;;573 #endif
;;;574
;;;575
;;;576
;;;577 #if OS_ARG_CHK_EN > 0
;;;578 if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
00077c e3540000 CMP r4,#0
000780 1a000002 BNE |L1.1936|
;;;579 return (OS_ERR_PEVENT_NULL);
000784 e3a00004 MOV r0,#4
|L1.1928|
000788 e8bd41f0 POP {r4-r8,lr}
;;;580 }
;;;581 #endif
;;;582 if (pevent->OSEventType != OS_EVENT_TYPE_Q) { /* Validate event block type */
;;;583 return (OS_ERR_EVENT_TYPE);
;;;584 }
;;;585 OS_ENTER_CRITICAL();
;;;586 if (pevent->OSEventGrp != 0) { /* See if any task pending on queue */
;;;587 /* Ready highest priority task waiting on event */
;;;588 (void)OS_EventTaskRdy(pevent, msg, OS_STAT_Q, OS_STAT_PEND_OK);
;;;589 OS_EXIT_CRITICAL();
;;;590 OS_Sched(); /* Find highest priority task ready to run */
;;;591 return (OS_ERR_NONE);
;;;592 }
;;;593 pq = (OS_Q *)pevent->OSEventPtr; /* Point to queue control block */
;;;594 if (pq->OSQEntries >= pq->OSQSize) { /* Make sure queue is not full */
;;;595 OS_EXIT_CRITICAL();
;;;596 return (OS_ERR_Q_FULL);
;;;597 }
;;;598 *pq->OSQIn++ = msg; /* Insert message into queue */
;;;599 pq->OSQEntries++; /* Update the nbr of entries in the queue */
;;;600 if (pq->OSQIn == pq->OSQEnd) { /* Wrap IN ptr if we are at end of queue */
;;;601 pq->OSQIn = pq->OSQStart;
;;;602 }
;;;603 OS_EXIT_CRITICAL();
;;;604 return (OS_ERR_NONE);
;;;605 }
00078c e12fff1e BX lr
|L1.1936|
000790 e5d40000 LDRB r0,[r4,#0]
000794 e3500002 CMP r0,#2
000798 0a000001 BEQ |L1.1956|
00079c e3a00001 MOV r0,#1
0007a0 eafffff8 B |L1.1928|
|L1.1956|
0007a4 ebfffffe BL OS_CPU_SR_Save
0007a8 e1a07000 MOV r7,r0
0007ac e5d4000a LDRB r0,[r4,#0xa]
0007b0 e3500000 CMP r0,#0
0007b4 0a000009 BEQ |L1.2016|
0007b8 e3a03000 MOV r3,#0
0007bc e3a02004 MOV r2,#4
0007c0 e1a01005 MOV r1,r5
0007c4 e1a00004 MOV r0,r4
0007c8 ebfffffe BL OS_EventTaskRdy
0007cc e1a00007 MOV r0,r7
0007d0 ebfffffe BL OS_CPU_SR_Restore
0007d4 ebfffffe BL OS_Sched
0007d8 e3a00000 MOV r0,#0
0007dc eaffffe9 B |L1.1928|
|L1.2016|
0007e0 e5946004 LDR r6,[r4,#4]
0007e4 e1d601b6 LDRH r0,[r6,#0x16]
0007e8 e1d611b4 LDRH r1,[r6,#0x14]
0007ec e1500001 CMP r0,r1
0007f0 ba000003 BLT |L1.2052|
0007f4 e1a00007 MOV r0,r7
0007f8 ebfffffe BL OS_CPU_SR_Restore
0007fc e3a0001e MOV r0,#0x1e
000800 eaffffe0 B |L1.1928|
|L1.2052|
000804 e596000c LDR r0,[r6,#0xc]
000808 e2801004 ADD r1,r0,#4
00080c e586100c STR r1,[r6,#0xc]
000810 e5805000 STR r5,[r0,#0]
000814 e1d601b6 LDRH r0,[r6,#0x16]
000818 e2800001 ADD r0,r0,#1
00081c e3c00801 BIC r0,r0,#0x10000
000820 e1c601b6 STRH r0,[r6,#0x16]
000824 e596000c LDR r0,[r6,#0xc]
000828 e5961008 LDR r1,[r6,#8]
00082c e1500001 CMP r0,r1
000830 1a000001 BNE |L1.2108|
000834 e5960004 LDR r0,[r6,#4]
000838 e586000c STR r0,[r6,#0xc]
|L1.2108|
00083c e1a00007 MOV r0,r7
000840 ebfffffe BL OS_CPU_SR_Restore
000844 e3a00000 MOV r0,#0
000848 eaffffce B |L1.1928|
ENDP
OSQPostFront PROC
;;;630 INT8U OSQPostFront (OS_EVENT *pevent, void *msg)
;;;631 {
00084c e92d41f0 PUSH {r4-r8,lr}
000850 e1a04000 MOV r4,r0
000854 e1a05001 MOV r5,r1
;;;632 OS_Q *pq;
;;;633 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;634 OS_CPU_SR cpu_sr = 0;
000858 e3a07000 MOV r7,#0
;;;635 #endif
;;;636
;;;637
;;;638
;;;639 #if OS_ARG_CHK_EN > 0
;;;640 if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
00085c e3540000 CMP r4,#0
000860 1a000002 BNE |L1.2160|
;;;641 return (OS_ERR_PEVENT_NULL);
000864 e3a00004 MOV r0,#4
|L1.2152|
000868 e8bd41f0 POP {r4-r8,lr}
;;;642 }
;;;643 #endif
;;;644 if (pevent->OSEventType != OS_EVENT_TYPE_Q) { /* Validate event block type */
;;;645 return (OS_ERR_EVENT_TYPE);
;;;646 }
;;;647 OS_ENTER_CRITICAL();
;;;648 if (pevent->OSEventGrp != 0) { /* See if any task pending on queue */
;;;649 /* Ready highest priority task waiting on event */
;;;650 (void)OS_EventTaskRdy(pevent, msg, OS_STAT_Q, OS_STAT_PEND_OK);
;;;651 OS_EXIT_CRITICAL();
;;;652 OS_Sched(); /* Find highest priority task ready to run */
;;;653 return (OS_ERR_NONE);
;;;654 }
;;;655 pq = (OS_Q *)pevent->OSEventPtr; /* Point to queue control block */
;;;656 if (pq->OSQEntries >= pq->OSQSize) { /* Make sure queue is not full */
;;;657 OS_EXIT_CRITICAL();
;;;658 return (OS_ERR_Q_FULL);
;;;659 }
;;;660 if (pq->OSQOut == pq->OSQStart) { /* Wrap OUT ptr if we are at the 1st queue entry */
;;;661 pq->OSQOut = pq->OSQEnd;
;;;662 }
;;;663 pq->OSQOut--;
;;;664 *pq->OSQOut = msg; /* Insert message into queue */
;;;665 pq->OSQEntries++; /* Update the nbr of entries in the queue */
;;;666 OS_EXIT_CRITICAL();
;;;667 return (OS_ERR_NONE);
;;;668 }
00086c e12fff1e BX lr
|L1.2160|
000870 e5d40000 LDRB r0,[r4,#0]
000874 e3500002 CMP r0,#2
000878 0a000001 BEQ |L1.2180|
00087c e3a00001 MOV r0,#1
000880 eafffff8 B |L1.2152|
|L1.2180|
000884 ebfffffe BL OS_CPU_SR_Save
000888 e1a07000 MOV r7,r0
00088c e5d4000a LDRB r0,[r4,#0xa]
000890 e3500000 CMP r0,#0
000894 0a000009 BEQ |L1.2240|
000898 e3a03000 MOV r3,#0
00089c e3a02004 MOV r2,#4
0008a0 e1a01005 MOV r1,r5
0008a4 e1a00004 MOV r0,r4
0008a8 ebfffffe BL OS_EventTaskRdy
0008ac e1a00007 MOV r0,r7
0008b0 ebfffffe BL OS_CPU_SR_Restore
0008b4 ebfffffe BL OS_Sched
0008b8 e3a00000 MOV r0,#0
0008bc eaffffe9 B |L1.2152|
|L1.2240|
0008c0 e5946004 LDR r6,[r4,#4]
0008c4 e1d601b6 LDRH r0,[r6,#0x16]
0008c8 e1d611b4 LDRH r1,[r6,#0x14]
0008cc e1500001 CMP r0,r1
0008d0 ba000003 BLT |L1.2276|
0008d4 e1a00007 MOV r0,r7
0008d8 ebfffffe BL OS_CPU_SR_Restore
0008dc e3a0001e MOV r0,#0x1e
0008e0 eaffffe0 B |L1.2152|
|L1.2276|
0008e4 e5960010 LDR r0,[r6,#0x10]
0008e8 e5961004 LDR r1,[r6,#4]
0008ec e1500001 CMP r0,r1
0008f0 1a000001 BNE |L1.2300|
0008f4 e5960008 LDR r0,[r6,#8]
0008f8 e5860010 STR r0,[r6,#0x10]
|L1.2300|
0008fc e5960010 LDR r0,[r6,#0x10]
000900 e2400004 SUB r0,r0,#4
000904 e5860010 STR r0,[r6,#0x10]
000908 e5960010 LDR r0,[r6,#0x10]
00090c e5805000 STR r5,[r0,#0]
000910 e1d601b6 LDRH r0,[r6,#0x16]
000914 e2800001 ADD r0,r0,#1
000918 e3c00801 BIC r0,r0,#0x10000
00091c e1c601b6 STRH r0,[r6,#0x16]
000920 e1a00007 MOV r0,r7
000924 ebfffffe BL OS_CPU_SR_Restore
000928 e3a00000 MOV r0,#0
00092c eaffffcd B |L1.2152|
ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -