📄 os_task.txt
字号:
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 + -