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

📄 os_q.txt

📁 IARSOURCECODE是基于LPC2478嵌入式软件IAR EWARM V4.42的应用实例代码
💻 TXT
📖 第 1 页 / 共 5 页
字号:
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 + -