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

📄 os_task.txt

📁 IARSOURCECODE是基于LPC2478嵌入式软件IAR EWARM V4.42的应用实例代码
💻 TXT
📖 第 1 页 / 共 5 页
字号:
;;;565        }
;;;566        OS_ENTER_CRITICAL();
;;;567        ptcb = OSTCBPrioTbl[prio];
;;;568        if (ptcb == (OS_TCB *)0) {                                  /* Task to delete must exist           */
;;;569            OS_EXIT_CRITICAL();
;;;570            return (OS_ERR_TASK_NOT_EXIST);                         /* Task must already be deleted        */
;;;571        }
;;;572        if (ptcb == (OS_TCB *)1) {                                  /* Must NOT be assigned to a Mutex     */
;;;573            OS_EXIT_CRITICAL();
;;;574            return (OS_ERR_TASK_DEL);
;;;575        }
;;;576        ptcb->OSTCBDelReq = OS_ERR_TASK_DEL_REQ;                    /* Set flag indicating task to be DEL. */
;;;577        OS_EXIT_CRITICAL();
;;;578        return (OS_ERR_NONE);
;;;579    }
0006f0  e12fff1e          BX       lr
                  |L1.1780|
0006f4  e354001f          CMP      r4,#0x1f
0006f8  ba000003          BLT      |L1.1804|
0006fc  e35400ff          CMP      r4,#0xff
000700  0a000001          BEQ      |L1.1804|
000704  e3a0002a          MOV      r0,#0x2a
000708  eafffff7          B        |L1.1772|
                  |L1.1804|
00070c  e35400ff          CMP      r4,#0xff
000710  1a000008          BNE      |L1.1848|
000714  ebfffffe          BL       OS_CPU_SR_Save
000718  e1a07000          MOV      r7,r0
00071c  e59f0634          LDR      r0,|L1.3416|
000720  e5900000          LDR      r0,[r0,#0]  ; OSTCBCur
000724  e5d05033          LDRB     r5,[r0,#0x33]
000728  e1a00007          MOV      r0,r7
00072c  ebfffffe          BL       OS_CPU_SR_Restore
000730  e1a00005          MOV      r0,r5
000734  eaffffec          B        |L1.1772|
                  |L1.1848|
000738  ebfffffe          BL       OS_CPU_SR_Save
00073c  e1a07000          MOV      r7,r0
000740  e59f060c          LDR      r0,|L1.3412|
000744  e7906104          LDR      r6,[r0,r4,LSL #2]
000748  e3560000          CMP      r6,#0
00074c  1a000003          BNE      |L1.1888|
000750  e1a00007          MOV      r0,r7
000754  ebfffffe          BL       OS_CPU_SR_Restore
000758  e3a00043          MOV      r0,#0x43
00075c  eaffffe2          B        |L1.1772|
                  |L1.1888|
000760  e3560001          CMP      r6,#1
000764  1a000003          BNE      |L1.1912|
000768  e1a00007          MOV      r0,r7
00076c  ebfffffe          BL       OS_CPU_SR_Restore
000770  e3a0003d          MOV      r0,#0x3d
000774  eaffffdc          B        |L1.1772|
                  |L1.1912|
000778  e3a0003f          MOV      r0,#0x3f
00077c  e5c60033          STRB     r0,[r6,#0x33]
000780  e1a00007          MOV      r0,r7
000784  ebfffffe          BL       OS_CPU_SR_Restore
000788  e3a00000          MOV      r0,#0
00078c  eaffffd6          B        |L1.1772|
                          ENDP

                  OSTaskNameGet PROC
;;;606    INT8U  OSTaskNameGet (INT8U prio, INT8U *pname, INT8U *err)
;;;607    {
000790  e92d47f0          PUSH     {r4-r10,lr}
000794  e1a04000          MOV      r4,r0
000798  e1a05001          MOV      r5,r1
00079c  e1a06002          MOV      r6,r2
;;;608        OS_TCB    *ptcb;
;;;609        INT8U      len;
;;;610    #if OS_CRITICAL_METHOD == 3                              /* Allocate storage for CPU status register   */
;;;611        OS_CPU_SR  cpu_sr = 0;
0007a0  e3a08000          MOV      r8,#0
;;;612    #endif
;;;613    
;;;614    
;;;615    
;;;616    #if OS_ARG_CHK_EN > 0
;;;617        if (err == (INT8U *)0) {                             /* Validate 'err'                             */
0007a4  e3560000          CMP      r6,#0
0007a8  1a000002          BNE      |L1.1976|
;;;618            return (0);
0007ac  e3a00000          MOV      r0,#0
                  |L1.1968|
0007b0  e8bd47f0          POP      {r4-r10,lr}
;;;619        }
;;;620        if (prio > OS_LOWEST_PRIO) {                         /* Task priority valid ?                      */
;;;621            if (prio != OS_PRIO_SELF) {
;;;622                *err = OS_ERR_PRIO_INVALID;                  /* No                                         */
;;;623                return (0);
;;;624            }
;;;625        }
;;;626        if (pname == (INT8U *)0) {                           /* Is 'pname' a NULL pointer?                 */
;;;627            *err = OS_ERR_PNAME_NULL;                        /* Yes                                        */
;;;628            return (0);
;;;629        }
;;;630    #endif
;;;631        OS_ENTER_CRITICAL();
;;;632        if (prio == OS_PRIO_SELF) {                          /* See if caller desires it's own name        */
;;;633            prio = OSTCBCur->OSTCBPrio;
;;;634        }
;;;635        ptcb = OSTCBPrioTbl[prio];
;;;636        if (ptcb == (OS_TCB *)0) {                           /* Does task exist?                           */
;;;637            OS_EXIT_CRITICAL();                              /* No                                         */
;;;638            *err = OS_ERR_TASK_NOT_EXIST;
;;;639            return (0);
;;;640        }
;;;641        if (ptcb == (OS_TCB *)1) {                           /* Task assigned to a Mutex?                  */
;;;642            OS_EXIT_CRITICAL();                              /* Yes                                        */
;;;643            *err = OS_ERR_TASK_NOT_EXIST;
;;;644            return (0);
;;;645        }
;;;646        len  = OS_StrCopy(pname, ptcb->OSTCBTaskName);       /* Yes, copy name from TCB                    */
;;;647        OS_EXIT_CRITICAL();
;;;648        *err = OS_ERR_NONE;
;;;649        return (len);
;;;650    }
0007b4  e12fff1e          BX       lr
                  |L1.1976|
0007b8  e354001f          CMP      r4,#0x1f
0007bc  da000005          BLE      |L1.2008|
0007c0  e35400ff          CMP      r4,#0xff
0007c4  0a000003          BEQ      |L1.2008|
0007c8  e3a0002a          MOV      r0,#0x2a
0007cc  e5c60000          STRB     r0,[r6,#0]
0007d0  e3a00000          MOV      r0,#0
0007d4  eafffff5          B        |L1.1968|
                  |L1.2008|
0007d8  e3550000          CMP      r5,#0
0007dc  1a000003          BNE      |L1.2032|
0007e0  e3a0000c          MOV      r0,#0xc
0007e4  e5c60000          STRB     r0,[r6,#0]
0007e8  e3a00000          MOV      r0,#0
0007ec  eaffffef          B        |L1.1968|
                  |L1.2032|
0007f0  ebfffffe          BL       OS_CPU_SR_Save
0007f4  e1a08000          MOV      r8,r0
0007f8  e35400ff          CMP      r4,#0xff
0007fc  1a000002          BNE      |L1.2060|
000800  e59f0550          LDR      r0,|L1.3416|
000804  e5900000          LDR      r0,[r0,#0]  ; OSTCBCur
000808  e5d0402e          LDRB     r4,[r0,#0x2e]
                  |L1.2060|
00080c  e59f0540          LDR      r0,|L1.3412|
000810  e7907104          LDR      r7,[r0,r4,LSL #2]
000814  e3570000          CMP      r7,#0
000818  1a000005          BNE      |L1.2100|
00081c  e1a00008          MOV      r0,r8
000820  ebfffffe          BL       OS_CPU_SR_Restore
000824  e3a00043          MOV      r0,#0x43
000828  e5c60000          STRB     r0,[r6,#0]
00082c  e3a00000          MOV      r0,#0
000830  eaffffde          B        |L1.1968|
                  |L1.2100|
000834  e3570001          CMP      r7,#1
000838  1a000005          BNE      |L1.2132|
00083c  e1a00008          MOV      r0,r8
000840  ebfffffe          BL       OS_CPU_SR_Restore
000844  e3a00043          MOV      r0,#0x43
000848  e5c60000          STRB     r0,[r6,#0]
00084c  e3a00000          MOV      r0,#0
000850  eaffffd6          B        |L1.1968|
                  |L1.2132|
000854  e2871048          ADD      r1,r7,#0x48
000858  e1a00005          MOV      r0,r5
00085c  ebfffffe          BL       OS_StrCopy
000860  e1a09000          MOV      r9,r0
000864  e1a00008          MOV      r0,r8
000868  ebfffffe          BL       OS_CPU_SR_Restore
00086c  e3a00000          MOV      r0,#0
000870  e5c60000          STRB     r0,[r6,#0]
000874  e1a00009          MOV      r0,r9
000878  eaffffcc          B        |L1.1968|
                          ENDP

                  OSTaskNameSet PROC
;;;680    void  OSTaskNameSet (INT8U prio, INT8U *pname, INT8U *err)
;;;681    {
00087c  e92d47f0          PUSH     {r4-r10,lr}
000880  e1a04000          MOV      r4,r0
000884  e1a05001          MOV      r5,r1
000888  e1a06002          MOV      r6,r2
;;;682        INT8U      len;
;;;683        OS_TCB    *ptcb;
;;;684    #if OS_CRITICAL_METHOD == 3                          /* Allocate storage for CPU status register       */
;;;685        OS_CPU_SR  cpu_sr = 0;
00088c  e3a09000          MOV      r9,#0
;;;686    #endif
;;;687    
;;;688    
;;;689    
;;;690    #if OS_ARG_CHK_EN > 0
;;;691        if (err == (INT8U *)0) {                         /* Validate 'err'                                 */
000890  e3560000          CMP      r6,#0
000894  1a000001          BNE      |L1.2208|
                  |L1.2200|
;;;692            return;
;;;693        }
;;;694        if (prio > OS_LOWEST_PRIO) {                     /* Task priority valid ?                          */
;;;695            if (prio != OS_PRIO_SELF) {
;;;696                *err = OS_ERR_PRIO_INVALID;              /* No                                             */
;;;697                return;
;;;698            }
;;;699        }
;;;700        if (pname == (INT8U *)0) {                       /* Is 'pname' a NULL pointer?                     */
;;;701            *err = OS_ERR_PNAME_NULL;                    /* Yes                                            */
;;;702            return;
;;;703        }
;;;704    #endif
;;;705        OS_ENTER_CRITICAL();
;;;706        if (prio == OS_PRIO_SELF) {                      /* See if caller desires to set it's own name     */
;;;707            prio = OSTCBCur->OSTCBPrio;
;;;708        }
;;;709        ptcb = OSTCBPrioTbl[prio];
;;;710        if (ptcb == (OS_TCB *)0) {                       /* Does task exist?                               */
;;;711            OS_EXIT_CRITICAL();                          /* No                                             */
;;;712            *err = OS_ERR_TASK_NOT_EXIST;
;;;713            return;
;;;714        }
;;;715        if (ptcb == (OS_TCB *)1) {                       /* Task assigned to a Mutex?                      */
;;;716            OS_EXIT_CRITICAL();                          /* Yes                                            */
;;;717            *err = OS_ERR_TASK_NOT_EXIST;
;;;718            return;
;;;719        }
;;;720        len = OS_StrLen(pname);                          /* Yes, Can we fit the string in the TCB?         */
;;;721        if (len > (OS_TASK_NAME_SIZE - 1)) {             /*      No                                        */
;;;722            OS_EXIT_CRITICAL();
;;;723            *err = OS_ERR_TASK_NAME_TOO_LONG;
;;;724            return;
;;;725        }
;;;726        (void)OS_StrCopy(ptcb->OSTCBTaskName, pname);    /*      Yes, copy to TCB                          */
;;;727        OS_EXIT_CRITICAL();
;;;728        *err = OS_ERR_NONE;
;;;729    }
000898  e8bd47f0          POP      {r4-r10,lr}
00089c  e12fff1e          BX       lr
                  |L1.2208|
0008a0  e354001f          CMP      r4,#0x1f
0008a4  da000004          BLE      |L1.2236|
0008a8  e35400ff          CMP      r4,#0xff
0008ac  0a000002          BEQ      |L1.2236|
0008b0  e3a0002a          MOV      r0,#0x2a
0008b4  e5c60000          STRB     r0,[r6,#0]
0008b8  eafffff6          B        |L1.2200|
                  |L1.2236|
0008bc  e3550000          CMP      r5,#0
0008c0  1a000002          BNE      |L1.2256|
0008c4  e3a0000c          MOV      r0,#0xc
0008c8  e5c60000          STRB     r0,[r6,#0]
0008cc  eafffff1          B        |L1.2200|
                  |L1.2256|
0008d0  ebfffffe          BL       OS_CPU_SR_Save
0008d4  e1a09000          MOV      r9,r0
0008d8  e35400ff          CMP      r4,#0xff
0008dc  1a000002          BNE      |L1.2284|
0008e0  e59f0470          LDR      r0,|L1.3416|
0008e4  e5900000          LDR      r0,[r0,#0]  ; OSTCBCur
0008e8  e5d0402e          LDRB     r4,[r0,#0x2e]
                  |L1.2284|
0008ec  e59f0460          LDR      r0,|L1.3412|
0008f0  e7908104          LDR      r8,[r0,r4,LSL #2]
0008f4  e3580000          CMP      r8,#0
0008f8  1a000004          BNE      |L1.2320|
0008fc  e1a00009          MOV      r0,r9
000900  ebfffffe          BL       OS_CPU_SR_Restore
000904  e3a00043          MOV      r0,#0x43
000908  e5c60000          STRB     r0,[r6,#0]
00090c  eaffffe1          B        |L1.2200|
                  |L1.2320|
000910  e3580001          CMP      r8,#1
000914  1a000004          BNE      |L1.2348|
000918  e1a00009          MOV      r0,r9
00091c  ebfffffe          BL       OS_CPU_SR_Restore
000920  e3a00043          MOV      r0,#0x43
000924  e5c60000          STRB     r0,[r6,#0]

⌨️ 快捷键说明

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