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

📄 os_task.txt

📁 ATMEL ARM7 SAM64 Porting ucos / Keil ARM VER3.04。不同于其它
💻 TXT
📖 第 1 页 / 共 2 页
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.0 [Build 951] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\ULINK-RAM\Obj\os_task.o --device=DARMATS --apcs=interwork -I..\..\..\..\uCOS-II\Source -I..\..\..\..\uCOS-II\Ports\ARM\Generic\KEILRV -I.\APP -I.\BSP -IC:\DEVELOP\Keil\ARM\INC\Atmel\SAM7S ..\..\..\..\uCOS-II\Source\os_task.c]

                          ARM

                          AREA ||.text.7||, CODE, READONLY, ALIGN=2

                  OS_TaskStkClr PROC
;;;1019   {
;;;1020       if ((opt & OS_TASK_OPT_STK_CHK) != 0x0000) {       /* See if stack checking has been enabled       */
000000  e3120001          TST      r2,#1
;;;1021           if ((opt & OS_TASK_OPT_STK_CLR) != 0x0000) {   /* See if stack needs to be cleared             */
000004  13120002          TSTNE    r2,#2
;;;1022   #if OS_STK_GROWTH == 1
;;;1023               while (size > 0) {                         /* Stack grows from HIGH to LOW memory          */
;;;1024                   size--;
;;;1025                   *pbos++ = (OS_STK)0;                   /* Clear from bottom of stack and up!           */
;;;1026               }
;;;1027   #else
;;;1028               while (size > 0) {                         /* Stack grows from LOW to HIGH memory          */
;;;1029                   size--;
;;;1030                   *pbos-- = (OS_STK)0;                   /* Clear from bottom of stack and down          */
;;;1031               }
;;;1032   #endif
;;;1033           }
;;;1034       }
;;;1035   }
000008  012fff1e          BXEQ     lr
00000c  e3a02000          MOV      r2,#0
                  |L1.16|
000010  e3510000          CMP      r1,#0                 ;1023
000014  12411001          SUBNE    r1,r1,#1              ;1024
000018  14802004          STRNE    r2,[r0],#4            ;1025
00001c  1afffffb          BNE      |L1.16|               ;1025
000020  e12fff1e          BX       lr
                          ENDP

                  OSTaskCreateExt PROC
;;;297                            INT16U   opt)
;;;298    {
000024  e92d4ffe          PUSH     {r1-r11,lr}
000028  e28db030          ADD      r11,sp,#0x30
00002c  e89b0e00          LDM      r11,{r9-r11}
000030  e1a06000          MOV      r6,r0
000034  e1a07001          MOV      r7,r1
000038  e1a08002          MOV      r8,r2
00003c  e1a04003          MOV      r4,r3
;;;299        OS_STK    *psp;
;;;300        INT8U      err;
;;;301    #if OS_CRITICAL_METHOD == 3                  /* Allocate storage for CPU status register               */
;;;302        OS_CPU_SR  cpu_sr = 0;
;;;303    #endif
;;;304    
;;;305    
;;;306    
;;;307    #if OS_ARG_CHK_EN > 0
;;;308        if (prio > OS_LOWEST_PRIO) {             /* Make sure priority is within allowable range           */
;;;309            return (OS_PRIO_INVALID);
;;;310        }
;;;311    #endif
;;;312        OS_ENTER_CRITICAL();
000040  ebfffffe          BL       OS_CPU_SR_Save
;;;313        if (OSIntNesting > 0) {                  /* Make sure we don't create the task from within an ISR  */
000044  e59f1274          LDR      r1,|L1.704|
000048  e5d11000          LDRB     r1,[r1,#0]  ; OSIntNesting
00004c  e3510000          CMP      r1,#0
000050  0a000003          BEQ      |L1.100|
;;;314            OS_EXIT_CRITICAL();
000054  ebfffffe          BL       OS_CPU_SR_Restore
;;;315            return (OS_ERR_TASK_CREATE_ISR);
000058  e3a00010          MOV      r0,#0x10
                  |L1.92|
00005c  e8bd4ffe          POP      {r1-r11,lr}
;;;316        }
;;;317        if (OSTCBPrioTbl[prio] == (OS_TCB *)0) { /* Make sure task doesn't already exist at this priority  */
;;;318            OSTCBPrioTbl[prio] = (OS_TCB *)1;    /* Reserve the priority to prevent others from doing ...  */
;;;319                                                 /* ... the same thing until task is created.              */
;;;320            OS_EXIT_CRITICAL();
;;;321    
;;;322            OS_TaskStkClr(pbos, stk_size, opt);                    /* Clear the task stack (if needed)     */
;;;323    
;;;324            psp = OSTaskStkInit(task, p_arg, ptos, opt);           /* Initialize the task's stack          */
;;;325            err = OS_TCBInit(prio, psp, pbos, id, stk_size, pext, opt);
;;;326            if (err == OS_NO_ERR) {
;;;327                if (OSRunning == TRUE) {                           /* Find HPT if multitasking has started */
;;;328                    OS_Sched();
;;;329                }
;;;330            } else {
;;;331                OS_ENTER_CRITICAL();
;;;332                OSTCBPrioTbl[prio] = (OS_TCB *)0;                  /* Make this priority avail. to others  */
;;;333                OS_EXIT_CRITICAL();
;;;334            }
;;;335            return (err);
;;;336        }
;;;337        OS_EXIT_CRITICAL();
;;;338        return (OS_PRIO_EXIST);
;;;339    }
000060  e12fff1e          BX       lr
                  |L1.100|
000064  e59f5258          LDR      r5,|L1.708|           ;317
000068  e7951104          LDR      r1,[r5,r4,LSL #2]     ;317
00006c  e3510000          CMP      r1,#0                 ;317
000070  1a000021          BNE      |L1.252|              ;317
000074  e3a01001          MOV      r1,#1                 ;318
000078  e7851104          STR      r1,[r5,r4,LSL #2]     ;318
00007c  ebfffffe          BL       OS_CPU_SR_Restore     ;320
000080  e59d2040          LDR      r2,[sp,#0x40]         ;322
000084  e1a0100b          MOV      r1,r11                ;322
000088  e1a0000a          MOV      r0,r10                ;322
00008c  ebfffffe          BL       OS_TaskStkClr         ;322
000090  e59d3040          LDR      r3,[sp,#0x40]         ;324
000094  e1a02008          MOV      r2,r8                 ;324
000098  e1a01007          MOV      r1,r7                 ;324
00009c  e1a00006          MOV      r0,r6                 ;324
0000a0  ebfffffe          BL       OSTaskStkInit         ;324
0000a4  e28d303c          ADD      r3,sp,#0x3c           ;325
0000a8  e893000c          LDM      r3,{r2,r3}            ;325
0000ac  e98d000c          STMIB    sp,{r2,r3}            ;325
0000b0  e1a01000          MOV      r1,r0                 ;325
0000b4  e1a03009          MOV      r3,r9                 ;325
0000b8  e1a0200a          MOV      r2,r10                ;325
0000bc  e1a00004          MOV      r0,r4                 ;325
0000c0  e58db000          STR      r11,[sp,#0]           ;325
0000c4  ebfffffe          BL       OS_TCBInit            ;325
0000c8  e1b06000          MOVS     r6,r0                 ;325
0000cc  1a000004          BNE      |L1.228|              ;326
0000d0  e59f01f0          LDR      r0,|L1.712|           ;327
0000d4  e5d00000          LDRB     r0,[r0,#0]            ;327  ; OSRunning
0000d8  e3500001          CMP      r0,#1                 ;327
0000dc  0bfffffe          BLEQ     OS_Sched              ;328
0000e0  ea000003          B        |L1.244|              ;328
                  |L1.228|
0000e4  ebfffffe          BL       OS_CPU_SR_Save        ;331
0000e8  e3a01000          MOV      r1,#0                 ;332
0000ec  e7851104          STR      r1,[r5,r4,LSL #2]     ;332
0000f0  ebfffffe          BL       OS_CPU_SR_Restore     ;333
                  |L1.244|
0000f4  e1a00006          MOV      r0,r6                 ;335
0000f8  eaffffd7          B        |L1.92|               ;335
                  |L1.252|
0000fc  ebfffffe          BL       OS_CPU_SR_Restore     ;337
000100  e3a00028          MOV      r0,#0x28              ;338
000104  eaffffd4          B        |L1.92|               ;338
                          ENDP

                  OSTaskNameGet PROC
;;;588    INT8U  OSTaskNameGet (INT8U prio, INT8U *pname, INT8U *err)
;;;589    {
000108  e92d41f0          PUSH     {r4-r8,lr}
00010c  e1a06000          MOV      r6,r0
000110  e1a07001          MOV      r7,r1
000114  e1a05002          MOV      r5,r2
;;;590        OS_TCB    *ptcb;
;;;591        INT8U      len;
;;;592    #if OS_CRITICAL_METHOD == 3                              /* Allocate storage for CPU status register   */
;;;593        OS_CPU_SR  cpu_sr = 0;
;;;594    #endif
;;;595    
;;;596    
;;;597    
;;;598    #if OS_ARG_CHK_EN > 0
;;;599        if (err == (INT8U *)0) {                             /* Validate 'err'                             */
;;;600            return (0);
;;;601        }
;;;602        if (prio > OS_LOWEST_PRIO) {                         /* Task priority valid ?                      */
;;;603            if (prio != OS_PRIO_SELF) {
;;;604                *err = OS_PRIO_INVALID;                      /* No                                         */
;;;605                return (0);
;;;606            }
;;;607        }
;;;608        if (pname == (INT8U *)0) {                             /* Is 'pname' a NULL pointer?                */
;;;609            *err = OS_ERR_PNAME_NULL;						  /* Yes                                       */
;;;610            return (0);
;;;611        }
;;;612    #endif
;;;613        OS_ENTER_CRITICAL();
000118  ebfffffe          BL       OS_CPU_SR_Save
;;;614        if (prio == OS_PRIO_SELF) {                           /* See if caller desires it's own name       */
00011c  e35600ff          CMP      r6,#0xff
000120  e1a04000          MOV      r4,r0                 ;613
;;;615            prio = OSTCBCur->OSTCBPrio;
000124  059f01a0          LDREQ    r0,|L1.716|
000128  05900000          LDREQ    r0,[r0,#0]  ; OSTCBCur
00012c  05d06020          LDRBEQ   r6,[r0,#0x20]
;;;616        }
;;;617        ptcb = OSTCBPrioTbl[prio];
000130  e59f018c          LDR      r0,|L1.708|
000134  e7900106          LDR      r0,[r0,r6,LSL #2]
000138  e3a0600b          MOV      r6,#0xb
;;;618        if (ptcb == (OS_TCB *)0) {                            /* Does task exist?                          */
00013c  e3500000          CMP      r0,#0
;;;619            OS_EXIT_CRITICAL();                               /* No                                        */
;;;620            *err = OS_TASK_NOT_EXIST;
;;;621            return (0);
;;;622        }
;;;623        if (ptcb == (OS_TCB *)1) {                            /* Task assigned to a Mutex?                 */
000140  13500001          CMPNE    r0,#1
000144  1a000005          BNE      |L1.352|              ;618
;;;624            OS_EXIT_CRITICAL();                               /* Yes                                       */
000148  e1a00004          MOV      r0,r4
00014c  ebfffffe          BL       OS_CPU_SR_Restore
;;;625            *err = OS_TASK_NOT_EXIST;
;;;626            return (0);
000150  e3a00000          MOV      r0,#0
000154  e5c56000          STRB     r6,[r5,#0]            ;625
                  |L1.344|
000158  e8bd41f0          POP      {r4-r8,lr}
;;;627        }
;;;628        len  = OS_StrCopy(pname, ptcb->OSTCBTaskName);        /* Yes, copy name from TCB                   */
;;;629        OS_EXIT_CRITICAL();
;;;630        *err = OS_NO_ERR;
;;;631        return (len);
;;;632    }
00015c  e12fff1e          BX       lr
                  |L1.352|
000160  e280103c          ADD      r1,r0,#0x3c           ;628
000164  e1a00007          MOV      r0,r7                 ;628
000168  ebfffffe          BL       OS_StrCopy            ;628
00016c  e1a06000          MOV      r6,r0                 ;628

⌨️ 快捷键说明

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