?? os_task.txt
字號:
000170 e1a00004 MOV r0,r4 ;629
000174 ebfffffe BL OS_CPU_SR_Restore ;629
000178 e3a00000 MOV r0,#0 ;630
00017c e5c50000 STRB r0,[r5,#0] ;630
000180 e1a00006 MOV r0,r6 ;631
000184 eafffff3 B |L1.344| ;631
ENDP
OSTaskNameSet PROC
;;;662 void OSTaskNameSet (INT8U prio, INT8U *pname, INT8U *err)
;;;663 {
000188 e92d41f0 PUSH {r4-r8,lr}
00018c e1a05000 MOV r5,r0
000190 e1a07001 MOV r7,r1
000194 e1a04002 MOV r4,r2
;;;664 INT8U len;
;;;665 OS_TCB *ptcb;
;;;666 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;667 OS_CPU_SR cpu_sr = 0;
;;;668 #endif
;;;669
;;;670
;;;671
;;;672 #if OS_ARG_CHK_EN > 0
;;;673 if (err == (INT8U *)0) { /* Validate 'err' */
;;;674 return;
;;;675 }
;;;676 if (prio > OS_LOWEST_PRIO) { /* Task priority valid ? */
;;;677 if (prio != OS_PRIO_SELF) {
;;;678 *err = OS_PRIO_INVALID; /* No */
;;;679 return;
;;;680 }
;;;681 }
;;;682 if (pname == (INT8U *)0) { /* Is 'pname' a NULL pointer? */
;;;683 *err = OS_ERR_PNAME_NULL; /* Yes */
;;;684 return;
;;;685 }
;;;686 #endif
;;;687 OS_ENTER_CRITICAL();
000198 ebfffffe BL OS_CPU_SR_Save
;;;688 if (prio == OS_PRIO_SELF) { /* See if caller desires to set it's own name */
00019c e35500ff CMP r5,#0xff
0001a0 e1a06000 MOV r6,r0 ;687
;;;689 prio = OSTCBCur->OSTCBPrio;
0001a4 059f0120 LDREQ r0,|L1.716|
;;;690 }
;;;691 ptcb = OSTCBPrioTbl[prio];
0001a8 e3a0800b MOV r8,#0xb
0001ac 05900000 LDREQ r0,[r0,#0] ;689 ; OSTCBCur
0001b0 05d05020 LDRBEQ r5,[r0,#0x20] ;689
0001b4 e59f0108 LDR r0,|L1.708|
0001b8 e7905105 LDR r5,[r0,r5,LSL #2]
;;;692 if (ptcb == (OS_TCB *)0) { /* Does task exist? */
0001bc e3550000 CMP r5,#0
;;;693 OS_EXIT_CRITICAL(); /* No */
;;;694 *err = OS_TASK_NOT_EXIST;
;;;695 return;
;;;696 }
;;;697 if (ptcb == (OS_TCB *)1) { /* Task assigned to a Mutex? */
0001c0 13550001 CMPNE r5,#1
0001c4 1a000004 BNE |L1.476| ;692
;;;698 OS_EXIT_CRITICAL(); /* Yes */
0001c8 e1a00006 MOV r0,r6
0001cc ebfffffe BL OS_CPU_SR_Restore
;;;699 *err = OS_TASK_NOT_EXIST;
0001d0 e5c48000 STRB r8,[r4,#0]
;;;700 return;
;;;701 }
;;;702 len = OS_StrLen(pname); /* Yes, Can we fit the string in the TCB? */
;;;703 if (len > (OS_TASK_NAME_SIZE - 1)) { /* No */
;;;704 OS_EXIT_CRITICAL();
;;;705 *err = OS_ERR_TASK_NAME_TOO_LONG;
;;;706 return;
;;;707 }
;;;708 (void)OS_StrCopy(ptcb->OSTCBTaskName, pname); /* Yes, copy to TCB */
;;;709 OS_EXIT_CRITICAL();
;;;710 *err = OS_NO_ERR;
;;;711 }
|L1.468|
0001d4 e8bd41f0 POP {r4-r8,lr}
0001d8 e12fff1e BX lr
|L1.476|
0001dc e1a00007 MOV r0,r7 ;702
0001e0 ebfffffe BL OS_StrLen ;702
0001e4 e350000f CMP r0,#0xf ;703
0001e8 9a000003 BLS |L1.508| ;703
0001ec e1a00006 MOV r0,r6 ;704
0001f0 ebfffffe BL OS_CPU_SR_Restore ;704
0001f4 e3a0000e MOV r0,#0xe ;705
0001f8 ea000005 B |L1.532| ;706
|L1.508|
0001fc e1a01007 MOV r1,r7 ;708
000200 e285003c ADD r0,r5,#0x3c ;708
000204 ebfffffe BL OS_StrCopy ;708
000208 e1a00006 MOV r0,r6 ;709
00020c ebfffffe BL OS_CPU_SR_Restore ;709
000210 e3a00000 MOV r0,#0 ;710
|L1.532|
000214 e5c40000 STRB r0,[r4,#0] ;710
000218 eaffffed B |L1.468| ;710
ENDP
OSTaskStkChk PROC
;;;799 INT8U OSTaskStkChk (INT8U prio, OS_STK_DATA *p_stk_data)
;;;800 {
00021c e92d41f0 PUSH {r4-r8,lr}
000220 e1a04000 MOV r4,r0
;;;801 OS_TCB *ptcb;
;;;802 OS_STK *pchk;
;;;803 INT32U free;
;;;804 INT32U size;
;;;805 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;806 OS_CPU_SR cpu_sr = 0;
;;;807 #endif
;;;808
;;;809
;;;810
;;;811 #if OS_ARG_CHK_EN > 0
;;;812 if (prio > OS_LOWEST_PRIO) { /* Make sure task priority is valid */
;;;813 if (prio != OS_PRIO_SELF) {
;;;814 return (OS_PRIO_INVALID);
;;;815 }
;;;816 }
;;;817 if (p_stk_data == (OS_STK_DATA *)0) { /* Validate 'p_stk_data' */
;;;818 return (OS_ERR_PDATA_NULL);
;;;819 }
;;;820 #endif
;;;821 p_stk_data->OSFree = 0; /* Assume failure, set to 0 size */
000224 e3a00000 MOV r0,#0
;;;822 p_stk_data->OSUsed = 0;
000228 e5810000 STR r0,[r1,#0]
00022c e1a06001 MOV r6,r1 ;800
000230 e5810004 STR r0,[r1,#4]
;;;823 OS_ENTER_CRITICAL();
000234 ebfffffe BL OS_CPU_SR_Save
;;;824 if (prio == OS_PRIO_SELF) { /* See if check for SELF */
000238 e35400ff CMP r4,#0xff
;;;825 prio = OSTCBCur->OSTCBPrio;
00023c 059f1088 LDREQ r1,|L1.716|
000240 05911000 LDREQ r1,[r1,#0] ; OSTCBCur
000244 05d14020 LDRBEQ r4,[r1,#0x20]
;;;826 }
;;;827 ptcb = OSTCBPrioTbl[prio];
000248 e59f1074 LDR r1,|L1.708|
00024c e7911104 LDR r1,[r1,r4,LSL #2]
;;;828 if (ptcb == (OS_TCB *)0) { /* Make sure task exist */
000250 e3510000 CMP r1,#0
;;;829 OS_EXIT_CRITICAL();
;;;830 return (OS_TASK_NOT_EXIST);
;;;831 }
;;;832 if (ptcb == (OS_TCB *)1) {
000254 13510001 CMPNE r1,#1
000258 1a000003 BNE |L1.620| ;828
;;;833 OS_EXIT_CRITICAL();
00025c ebfffffe BL OS_CPU_SR_Restore
;;;834 return (OS_TASK_NOT_EXIST);
000260 e3a0000b MOV r0,#0xb
|L1.612|
000264 e8bd41f0 POP {r4-r8,lr}
;;;835 }
;;;836 if ((ptcb->OSTCBOpt & OS_TASK_OPT_STK_CHK) == 0) { /* Make sure stack checking option is set */
;;;837 OS_EXIT_CRITICAL();
;;;838 return (OS_TASK_OPT_ERR);
;;;839 }
;;;840 free = 0;
;;;841 size = ptcb->OSTCBStkSize;
;;;842 pchk = ptcb->OSTCBStkBottom;
;;;843 OS_EXIT_CRITICAL();
;;;844 #if OS_STK_GROWTH == 1
;;;845 while (*pchk++ == (OS_STK)0) { /* Compute the number of zero entries on the stk */
;;;846 free++;
;;;847 }
;;;848 #else
;;;849 while (*pchk-- == (OS_STK)0) {
;;;850 free++;
;;;851 }
;;;852 #endif
;;;853 p_stk_data->OSFree = free * sizeof(OS_STK); /* Compute number of free bytes on the stack */
;;;854 p_stk_data->OSUsed = (size - free) * sizeof(OS_STK); /* Compute number of bytes used on the stack */
;;;855 return (OS_NO_ERR);
;;;856 }
000268 e12fff1e BX lr
|L1.620|
00026c e1d121b0 LDRH r2,[r1,#0x10] ;836
000270 e3120001 TST r2,#1 ;836
000274 1a000002 BNE |L1.644| ;836
000278 ebfffffe BL OS_CPU_SR_Restore ;837
00027c e3a00082 MOV r0,#0x82 ;838
000280 eafffff7 B |L1.612| ;838
|L1.644|
000284 e2817008 ADD r7,r1,#8 ;842
000288 e89700a0 LDM r7,{r5,r7} ;842
00028c e3a04000 MOV r4,#0 ;840
000290 ebfffffe BL OS_CPU_SR_Restore ;843
|L1.660|
000294 e4950004 LDR r0,[r5],#4 ;845
000298 e3500000 CMP r0,#0 ;845
00029c 02844001 ADDEQ r4,r4,#1 ;846
0002a0 0afffffb BEQ |L1.660| ;846
0002a4 e1a00104 LSL r0,r4,#2 ;853
0002a8 e5860000 STR r0,[r6,#0] ;853
0002ac e0470004 SUB r0,r7,r4 ;854
0002b0 e1a00100 LSL r0,r0,#2 ;854
0002b4 e5860004 STR r0,[r6,#4] ;854
0002b8 e3a00000 MOV r0,#0 ;855
0002bc eaffffe8 B |L1.612| ;855
|L1.704|
0002c0 00000000 DCD OSIntNesting ;855
|L1.708|
0002c4 00000000 DCD OSTCBPrioTbl ;855
|L1.712|
0002c8 00000000 DCD OSRunning ;855
|L1.716|
0002cc 00000000 DCD OSTCBCur ;855
ENDP
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -