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

📄 os_task.txt

📁 IARSOURCECODE是基于LPC2478嵌入式软件IAR EWARM V4.42的应用实例代码
💻 TXT
📖 第 1 页 / 共 5 页
字号:
000928  eaffffda          B        |L1.2200|
                  |L1.2348|
00092c  e1a00005          MOV      r0,r5
000930  ebfffffe          BL       OS_StrLen
000934  e1a07000          MOV      r7,r0
000938  e357000f          CMP      r7,#0xf
00093c  da000004          BLE      |L1.2388|
000940  e1a00009          MOV      r0,r9
000944  ebfffffe          BL       OS_CPU_SR_Restore
000948  e3a00041          MOV      r0,#0x41
00094c  e5c60000          STRB     r0,[r6,#0]
000950  eaffffd0          B        |L1.2200|
                  |L1.2388|
000954  e1a01005          MOV      r1,r5
000958  e2880048          ADD      r0,r8,#0x48
00095c  ebfffffe          BL       OS_StrCopy
000960  e1a00009          MOV      r0,r9
000964  ebfffffe          BL       OS_CPU_SR_Restore
000968  e3a00000          MOV      r0,#0
00096c  e5c60000          STRB     r0,[r6,#0]
000970  eaffffc8          B        |L1.2200|
                          ENDP

                  OSTaskResume PROC
;;;752    INT8U  OSTaskResume (INT8U prio)
;;;753    {
000974  e92d4070          PUSH     {r4-r6,lr}
000978  e1a04000          MOV      r4,r0
;;;754        OS_TCB    *ptcb;
;;;755    #if OS_CRITICAL_METHOD == 3                                   /* Storage for CPU status register       */
;;;756        OS_CPU_SR  cpu_sr = 0;
00097c  e3a06000          MOV      r6,#0
;;;757    #endif
;;;758    
;;;759    
;;;760    
;;;761    #if OS_ARG_CHK_EN > 0
;;;762        if (prio >= OS_LOWEST_PRIO) {                             /* Make sure task priority is valid      */
000980  e354001f          CMP      r4,#0x1f
000984  ba000002          BLT      |L1.2452|
;;;763            return (OS_ERR_PRIO_INVALID);
000988  e3a0002a          MOV      r0,#0x2a
                  |L1.2444|
00098c  e8bd4070          POP      {r4-r6,lr}
;;;764        }
;;;765    #endif
;;;766        OS_ENTER_CRITICAL();
;;;767        ptcb = OSTCBPrioTbl[prio];
;;;768        if (ptcb == (OS_TCB *)0) {                                /* Task to suspend must exist            */
;;;769            OS_EXIT_CRITICAL();
;;;770            return (OS_ERR_TASK_RESUME_PRIO);
;;;771        }
;;;772        if (ptcb == (OS_TCB *)1) {                                /* See if assigned to Mutex              */
;;;773            OS_EXIT_CRITICAL();
;;;774            return (OS_ERR_TASK_NOT_EXIST);
;;;775        }
;;;776        if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) != OS_STAT_RDY) { /* Task must be suspended                */
;;;777            ptcb->OSTCBStat &= ~(INT8U)OS_STAT_SUSPEND;           /* Remove suspension                     */
;;;778            if (ptcb->OSTCBStat == OS_STAT_RDY) {                 /* See if task is now ready              */
;;;779                if (ptcb->OSTCBDly == 0) {
;;;780                    OSRdyGrp               |= ptcb->OSTCBBitY;    /* Yes, Make task ready to run           */
;;;781                    OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
;;;782                    OS_EXIT_CRITICAL();
;;;783                    if (OSRunning == OS_TRUE) {
;;;784                        OS_Sched();                               /* Find new highest priority task        */
;;;785                    }
;;;786                } else {
;;;787                    OS_EXIT_CRITICAL();
;;;788                }
;;;789            } else {                                              /* Must be pending on event              */
;;;790                OS_EXIT_CRITICAL();
;;;791            }
;;;792            return (OS_ERR_NONE);
;;;793        }
;;;794        OS_EXIT_CRITICAL();
;;;795        return (OS_ERR_TASK_NOT_SUSPENDED);
;;;796    }
000990  e12fff1e          BX       lr
                  |L1.2452|
000994  ebfffffe          BL       OS_CPU_SR_Save
000998  e1a06000          MOV      r6,r0
00099c  e59f03b0          LDR      r0,|L1.3412|
0009a0  e7905104          LDR      r5,[r0,r4,LSL #2]
0009a4  e3550000          CMP      r5,#0
0009a8  1a000003          BNE      |L1.2492|
0009ac  e1a00006          MOV      r0,r6
0009b0  ebfffffe          BL       OS_CPU_SR_Restore
0009b4  e3a00046          MOV      r0,#0x46
0009b8  eafffff3          B        |L1.2444|
                  |L1.2492|
0009bc  e3550001          CMP      r5,#1
0009c0  1a000003          BNE      |L1.2516|
0009c4  e1a00006          MOV      r0,r6
0009c8  ebfffffe          BL       OS_CPU_SR_Restore
0009cc  e3a00043          MOV      r0,#0x43
0009d0  eaffffed          B        |L1.2444|
                  |L1.2516|
0009d4  e5d5002c          LDRB     r0,[r5,#0x2c]
0009d8  e3100008          TST      r0,#8
0009dc  0a000025          BEQ      |L1.2680|
0009e0  e5d5002c          LDRB     r0,[r5,#0x2c]
0009e4  e3c00008          BIC      r0,r0,#8
0009e8  e5c5002c          STRB     r0,[r5,#0x2c]
0009ec  e5d5002c          LDRB     r0,[r5,#0x2c]
0009f0  e3500000          CMP      r0,#0
0009f4  1a00001b          BNE      |L1.2664|
0009f8  e1d502ba          LDRH     r0,[r5,#0x2a]
0009fc  e3500000          CMP      r0,#0
000a00  1a000015          BNE      |L1.2652|
000a04  e5d50032          LDRB     r0,[r5,#0x32]
000a08  e59f1350          LDR      r1,|L1.3424|
000a0c  e5d11000          LDRB     r1,[r1,#0]  ; OSRdyGrp
000a10  e1800001          ORR      r0,r0,r1
000a14  e59f1344          LDR      r1,|L1.3424|
000a18  e5c10000          STRB     r0,[r1,#0]  ; OSRdyGrp
000a1c  e5d50030          LDRB     r0,[r5,#0x30]
000a20  e59f1334          LDR      r1,|L1.3420|
000a24  e7d10000          LDRB     r0,[r1,r0]
000a28  e5d51031          LDRB     r1,[r5,#0x31]
000a2c  e1800001          ORR      r0,r0,r1
000a30  e5d51030          LDRB     r1,[r5,#0x30]
000a34  e59f2320          LDR      r2,|L1.3420|
000a38  e7c20001          STRB     r0,[r2,r1]
000a3c  e1a00006          MOV      r0,r6
000a40  ebfffffe          BL       OS_CPU_SR_Restore
000a44  e59f0318          LDR      r0,|L1.3428|
000a48  e5d00000          LDRB     r0,[r0,#0]  ; OSRunning
000a4c  e3500001          CMP      r0,#1
000a50  1a000006          BNE      |L1.2672|
000a54  ebfffffe          BL       OS_Sched
000a58  ea000004          B        |L1.2672|
                  |L1.2652|
000a5c  e1a00006          MOV      r0,r6
000a60  ebfffffe          BL       OS_CPU_SR_Restore
000a64  ea000001          B        |L1.2672|
                  |L1.2664|
000a68  e1a00006          MOV      r0,r6
000a6c  ebfffffe          BL       OS_CPU_SR_Restore
                  |L1.2672|
000a70  e3a00000          MOV      r0,#0
000a74  eaffffc4          B        |L1.2444|
                  |L1.2680|
000a78  e1a00006          MOV      r0,r6
000a7c  ebfffffe          BL       OS_CPU_SR_Restore
000a80  e3a00044          MOV      r0,#0x44
000a84  eaffffc0          B        |L1.2444|
                          ENDP

                  OSTaskStkChk PROC
;;;819    INT8U  OSTaskStkChk (INT8U prio, OS_STK_DATA *p_stk_data)
;;;820    {
000a88  e92d47f0          PUSH     {r4-r10,lr}
000a8c  e1a04000          MOV      r4,r0
000a90  e1a05001          MOV      r5,r1
;;;821        OS_TCB    *ptcb;
;;;822        OS_STK    *pchk;
;;;823        INT32U     free;
;;;824        INT32U     size;
;;;825    #if OS_CRITICAL_METHOD == 3                            /* Allocate storage for CPU status register     */
;;;826        OS_CPU_SR  cpu_sr = 0;
000a94  e3a0a000          MOV      r10,#0
;;;827    #endif
;;;828    
;;;829    
;;;830    
;;;831    #if OS_ARG_CHK_EN > 0
;;;832        if (prio > OS_LOWEST_PRIO) {                       /* Make sure task priority is valid             */
000a98  e354001f          CMP      r4,#0x1f
000a9c  da000004          BLE      |L1.2740|
;;;833            if (prio != OS_PRIO_SELF) {
000aa0  e35400ff          CMP      r4,#0xff
000aa4  0a000002          BEQ      |L1.2740|
;;;834                return (OS_ERR_PRIO_INVALID);
000aa8  e3a0002a          MOV      r0,#0x2a
                  |L1.2732|
000aac  e8bd47f0          POP      {r4-r10,lr}
;;;835            }
;;;836        }
;;;837        if (p_stk_data == (OS_STK_DATA *)0) {              /* Validate 'p_stk_data'                        */
;;;838            return (OS_ERR_PDATA_NULL);
;;;839        }
;;;840    #endif
;;;841        p_stk_data->OSFree = 0;                            /* Assume failure, set to 0 size                */
;;;842        p_stk_data->OSUsed = 0;
;;;843        OS_ENTER_CRITICAL();
;;;844        if (prio == OS_PRIO_SELF) {                        /* See if check for SELF                        */
;;;845            prio = OSTCBCur->OSTCBPrio;
;;;846        }
;;;847        ptcb = OSTCBPrioTbl[prio];
;;;848        if (ptcb == (OS_TCB *)0) {                         /* Make sure task exist                         */
;;;849            OS_EXIT_CRITICAL();
;;;850            return (OS_ERR_TASK_NOT_EXIST);
;;;851        }
;;;852        if (ptcb == (OS_TCB *)1) {
;;;853            OS_EXIT_CRITICAL();
;;;854            return (OS_ERR_TASK_NOT_EXIST);
;;;855        }
;;;856        if ((ptcb->OSTCBOpt & OS_TASK_OPT_STK_CHK) == 0) { /* Make sure stack checking option is set       */
;;;857            OS_EXIT_CRITICAL();
;;;858            return (OS_ERR_TASK_OPT);
;;;859        }
;;;860        free = 0;
;;;861        size = ptcb->OSTCBStkSize;
;;;862        pchk = ptcb->OSTCBStkBottom;
;;;863        OS_EXIT_CRITICAL();
;;;864    #if OS_STK_GROWTH == 1
;;;865        while (*pchk++ == (OS_STK)0) {                    /* Compute the number of zero entries on the stk */
;;;866            free++;
;;;867        }
;;;868    #else
;;;869        while (*pchk-- == (OS_STK)0) {
;;;870            free++;
;;;871        }
;;;872    #endif
;;;873        p_stk_data->OSFree = free * sizeof(OS_STK);           /* Compute number of free bytes on the stack */
;;;874        p_stk_data->OSUsed = (size - free) * sizeof(OS_STK);  /* Compute number of bytes used on the stack */
;;;875        return (OS_ERR_NONE);
;;;876    }
000ab0  e12fff1e          BX       lr
                  |L1.2740|
000ab4  e3550000          CMP      r5,#0
000ab8  1a000001          BNE      |L1.2756|
000abc  e3a00009          MOV      r0,#9
000ac0  eafffff9          B        |L1.2732|
                  |L1.2756|
000ac4  e3a00000          MOV      r0,#0
000ac8  e5850000          STR      r0,[r5,#0]
000acc  e5850004          STR      r0,[r5,#4]
000ad0  ebfffffe          BL       OS_CPU_SR_Save
000ad4  e1a0a000          MOV      r10,r0
000ad8  e35400ff          CMP      r4,#0xff
000adc  1a000002          BNE      |L1.2796|
000ae0  e59f0270          LDR      r0,|L1.3416|
000ae4  e5900000          LDR      r0,[r0,#0]  ; OSTCBCur
000ae8  e5d0402e          LDRB     r4,[r0,#0x2e]
                  |L1.2796|
000aec  e59f0260          LDR      r0,|L1.3412|
000af0  e7906104          LDR      r6,[r0,r4,LSL #2]
000af4  e3560000          CMP      r6,#0
000af8  1a000003          BNE      |L1.2828|
000afc  e1a0000a          MOV      r0,r10
000b00  ebfffffe          BL       OS_CPU_SR_Restore
000b04  e3a00043          MOV      r0,#0x43
000b08  eaffffe7          B        |L1.2732|
                  |L1.2828|
000b0c  e3560001          CMP      r6,#1
000b10  1a000003          BNE      |L1.2852|
000b14  e1a0000a          MOV      r0,r10
000b18  ebfffffe          BL       OS_CPU_SR_Restore
000b1c  e3a00043          MOV      r0,#0x43
000b20  eaffffe1          B        |L1.2732|
                  |L1.2852|
000b24  e1d601b0          LDRH     r0,[r6,#0x10]
000b28  e3100001          TST      r0,#1
000b2c  1a000003          BNE      |L1.2880|
000b30  e1a0000a          MOV      r0,r10
000b34  ebfffffe          BL       OS_CPU_SR_Restore
000b38  e3a00045          MOV      r0,#0x45
000b3c  eaffffda          B        |L1.2732|
                  |L1.2880|
000b40  e3a08000          MOV      r8,#0
000b44  e596900c          LDR      r9,[r6,#0xc]
000b48  e5967008          LDR      r7,[r6,#8]
000b4c  e1a0000a          MOV      r0,r10
000b50  ebfffffe          BL       OS_CPU_SR_Restore
000b54  ea000000          B        |L1.2908|
                  |L1.2904|
000b58  e2888001          ADD      r8,r8,#1
                  |L1.2908|
000b5c  e4970004          LDR      r0,[r7],#4
000b60  e3500000          CMP      r0,#0
000b64  0afffffb          BEQ      |L1.2904|
000b68  e

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -