?? os_task.txt
字號:
; 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
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 + -