?? ucos.lst
字號:
01D9 8220 STD Z+0,R2
01DA 01C5 MOVW R24,R10
01DB 9601 ADIW R24,1
01DC 015C MOVW R10,R24
01DD 01C5 MOVW R24,R10
01DE 3081 CPI R24,1
01DF E0E0 LDI R30,0
01E0 079E CPC R25,R30
01E1 F300 BCS 0x01C2
01E2 2422 CLR R2
01E3 2433 CLR R3
01E4 9230022C STS 0x22C,R3
01E6 9220022B STS 0x22B,R2
01E8 E283 LDI R24,0x23
01E9 E092 LDI R25,2
01EA 93900234 STS OSEventFreeList+1,R25
01EC 93800233 STS OSEventFreeList,R24
01EE E08F LDI R24,0xF
01EF 838A STD Y+2,R24
01F0 EE88 LDI R24,0xE8
01F1 E091 LDI R25,1
01F2 8399 STD Y+1,R25
01F3 8388 STD Y+0,R24
01F4 2722 CLR R18
01F5 2733 CLR R19
01F6 E508 LDI R16,0x58
01F7 E010 LDI R17,0
01F8 D32C RCALL _OSTaskCreate
01F9 9623 ADIW R28,3
01FA 940E076B CALL pop_gset3x
01FC 9508 RET
_OSIntExit:
01FD 930A ST R16,-Y
01FE B70F IN R16,0x3F
01FF 94F8 BCLR 7
0200 930F PUSH R16
0201 9109 LD R16,Y+
0202 9180021E LDS R24,OSIntNesting
0204 5081 SUBI R24,1
0205 2E28 MOV R2,R24
0206 9220021E STS OSIntNesting,R2
0208 9040021D LDS R4,OSLockNesting
020A 2824 OR R2,R4
020B F009 BEQ 0x020D
020C C050 RJMP 0x025D
020D E682 LDI R24,0x62
020E E090 LDI R25,0
020F 91E0021A LDS R30,OSRdyGrp
0211 27FF CLR R31
0212 0FE8 ADD R30,R24
0213 1FF9 ADC R31,R25
0214 91E4 LPM R30,0(Z)
0215 93E001E9 STS OSTCBTbl+1,R30
0217 E188 LDI R24,0x18
0218 E092 LDI R25,2
0219 27FF CLR R31
021A 0FE8 ADD R30,R24
021B 1FF9 ADC R31,R25
021C 81E0 LDD R30,Z+0
021D 27FF CLR R31
021E E682 LDI R24,0x62
021F E090 LDI R25,0
0220 0FE8 ADD R30,R24
0221 1FF9 ADC R31,R25
0222 9024 LPM R2,0(Z)
0223 2433 CLR R3
0224 904001E9 LDS R4,OSTCBTbl+1
0226 2455 CLR R5
0227 0C44 LSL R4
0228 1C55 ROL R5
0229 0C44 LSL R4
022A 1C55 ROL R5
022B 0C44 LSL R4
022C 1C55 ROL R5
022D 0C42 ADD R4,R2
022E 1C53 ADC R5,R3
022F 9240021B STS OSPrioHighRdy,R4
0231 9020021C LDS R2,OSPrioCur
0233 1442 CP R4,R2
0234 F141 BEQ 0x025D
0235 2C24 MOV R2,R4
0236 E082 LDI R24,2
0237 9D82 MUL R24,R2
0238 01F0 MOVW R30,R0
0239 EE8E LDI R24,0xEE
023A E091 LDI R25,1
023B 0FE8 ADD R30,R24
023C 1FF9 ADC R31,R25
023D 8020 LDD R2,Z+0
023E 8031 LDD R3,Z+1
023F 92300211 STS OSTCBHighRdy+1,R3
0241 92200210 STS OSTCBHighRdy,R2
0243 E081 LDI R24,1
0244 E090 LDI R25,0
0245 E0A0 LDI R26,0
0246 E0B0 LDI R27,0
0247 90400237 LDS R4,OSCtxSwCtr+2
FILE: C:\DOCUME~1\yjwpm\桌面\UCOS仿~1\ucos_m8_icc\source\os_core.c
(0001)
(0002) #ifndef OS_MASTER_FILE
(0003) #define OS_GLOBALS
(0004) #include "includes.h"
(0005) #endif
(0006)
(0007) /*
(0008) *********************************************************************************************************
(0009) * LOCAL GLOBAL VARIABLES
(0010) *********************************************************************************************************
(0011) */
(0012)
(0013) static INT8U OSIntExitY; /* Variable used by 'OSIntExit' to prevent using locals */
(0014) static OS_STK OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE]; /* Idle task stack */
(0015)
(0016) #if OS_TASK_STAT_EN
(0017) static OS_STK OSTaskStatStk[OS_TASK_STAT_STK_SIZE]; /* Statistics task stack */
(0018) #endif
(0019)
(0020) static OS_TCB OSTCBTbl[OS_MAX_TASKS + OS_N_SYS_TASKS]; /* Table of TCBs */
(0021)
(0022) /*$PAGE*/
(0023) /*
(0024) *********************************************************************************************************
(0025) * MAPPING TABLE TO MAP BIT POSITION TO BIT MASK
(0026) *
(0027) * Note: Index into table is desired bit position, 0..7
(0028) * Indexed value corresponds to bit mask
(0029) *********************************************************************************************************
(0030) */
(0031)
(0032) INT8U const OSMapTbl[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
(0033)
(0034) /*
(0035) *********************************************************************************************************
(0036) * PRIORITY RESOLUTION TABLE
(0037) *
(0038) * Note: Index into table is bit pattern to resolve highest priority
(0039) * Indexed value corresponds to highest priority bit position (i.e. 0..7)
(0040) *********************************************************************************************************
(0041) */
(0042)
(0043) INT8U const OSUnMapTbl[] = {
(0044) 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
(0045) 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
(0046) 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
(0047) 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
(0048) 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
(0049) 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
(0050) 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
(0051) 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
(0052) 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
(0053) 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
(0054) 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
(0055) 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
(0056) 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
(0057) 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
(0058) 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
(0059) 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0
(0060) };
(0061)
(0062) /*$PAGE*/
(0063) /*
(0064) *********************************************************************************************************
(0065) * INITIALIZATION
(0066) *
(0067) * Description: This function is used to initialize the internals of uC/OS-II and MUST be called prior to
(0068) * creating any uC/OS-II object and, prior to calling OSStart().
(0069) *
(0070) * Arguments : none
(0071) *
(0072) * Returns : none
(0073) *********************************************************************************************************
(0074) */
(0075)
(0076) void OSInit (void)
(0077) {
(0078) INT16U i;
(0079)
(0080)
(0081) OSTime = 0L; /* Clear the 32-bit system clock */
0249 90500238 LDS R5,OSCtxSwCtr+3
024B 90200235 LDS R2,OSCtxSwCtr
024D 90300236 LDS R3,OSCtxSwCtr+1
024F 0E28 ADD R2,R24
0250 1E39 ADC R3,R25
0251 1E4A ADC R4,R26
0252 1E5B ADC R5,R27
0253 92300236 STS OSCtxSwCtr+1,R3
(0082) OSIntNesting = 0; /* Clear the interrupt nesting counter */
0255 92200235 STS OSCtxSwCtr,R2
(0083) OSLockNesting = 0; /* Clear the scheduling lock counter */
0257 92500238 STS OSCtxSwCtr+3,R5
(0084) #if OS_TASK_CREATE_EN || OS_TASK_CREATE_EXT_EN || OS_TASK_DEL_EN
(0085) OSTaskCtr = 0; /* Clear the number of tasks */
0259 92400237 STS OSCtxSwCtr+2,R4
(0086) #endif
(0087) OSRunning = FALSE; /* Indicate that multitasking not started */
025B 940E06CF CALL _OSIntCtxSw
(0088) OSIdleCtr = 0L; /* Clear the 32-bit idle counter */
025D 930A ST R16,-Y
025E 910F POP R16
025F BF0F OUT 0x3F,R16
0260 9109 LD R16,Y+
0261 9508 RET
_OSSched:
y --> R10
0262 940E077D CALL push_gset3x
0264 930A ST R16,-Y
0265 B70F IN R16,0x3F
0266 94F8 BCLR 7
0267 930F PUSH R16
0268 9109 LD R16,Y+
(0089)
(0090) OSCtxSwCtr = 0; /* Clear the context switch counter */
0269 9020021E LDS R2,OSIntNesting
026B 9030021D LDS R3,OSLockNesting
026D 2832 OR R3,R2
026E F009 BEQ 0x0270
026F C04E RJMP 0x02BE
0270 E682 LDI R24,0x62
0271 E090 LDI R25,0
0272 91E0021A LDS R30,OSRdyGrp
0274 27FF CLR R31
(0091) OSRdyGrp = 0; /* Clear the ready list */
0275 0FE8 ADD R30,R24
0276 1FF9 ADC R31,R25
(0092) for (i = 0; i < OS_RDY_TBL_SIZE; i++) {
0277 90A4 LPM R10,0(Z)
0278 E188 LDI R24,0x18
0279 E092 LDI R25,2
(0093) OSRdyTbl[i] = 0;
027A 2DEA MOV R30,R10
027B 27FF CLR R31
027C 0FE8 ADD R30,R24
027D 1FF9 ADC R31,R25
027E 81E0 LDD R30,Z+0
027F 27FF CLR R31
0280 E682 LDI R24,0x62
0281 E090 LDI R25,0
0282 0FE8 ADD R30,R24
0283 1FF9 ADC R31,R25
0284 9024 LPM R2,0(Z)
0285 2433 CLR R3
0286 2C4A MOV R4,R10
0287 2455 CLR R5
0288 0C44 LSL R4
(0094) }
(0095)
(0096) OSPrioCur = 0;
0289 1C55 ROL R5
028A 0C44 LSL R4
028B 1C55 ROL R5
(0097) OSPrioHighRdy = 0;
028C 0C44 LSL R4
028D 1C55 ROL R5
(0098) OSTCBHighRdy = (OS_TCB *)0; /* TCB Initialization */
028E 0C42 ADD R4,R2
028F 1C53 ADC R5,R3
0290 9240021B STS OSPrioHighRdy,R4
0292 9020021C LDS R2,OSPrioCur
(0099) OSTCBCur = (OS_TCB *)0;
0294 1442 CP R4,R2
0295 F141 BEQ 0x02BE
0296 2C24 MOV R2,R4
(0100) OSTCBList = (OS_TCB *)0;
0297 E082 LDI R24,2
0298 9D82 MUL R24,R2
0299 01F0 MOVW R30,R0
029A EE8E LDI R24,0xEE
(0101) for (i = 0; i < (OS_LOWEST_PRIO + 1); i++) { /* Clear the priority table */
029B E091 LDI R25,1
029C 0FE8 ADD R30,R24
029D 1FF9 ADC R31,R25
(0102) OSTCBPrioTbl[i] = (OS_TCB *)0;
029E 8020 LDD R2,Z+0
029F 8031 LDD R3,Z+1
02A0 92300211 STS OSTCBHighRdy+1,R3
02A2 92200210 STS OSTCBHighRdy,R2
02A4 E081 LDI R24,1
02A5 E090 LDI R25,0
02A6 E0A0 LDI R26,0
02A7 E0B0 LDI R27,0
02A8 90400237 LDS R4,OSCtxSwCtr+2
02AA 90500238 LDS R5,OSCtxSwCtr+3
02AC 90200235 LDS R2,OSCtxSwCtr
02AE 90300236 LDS R3,OSCtxSwCtr+1
02B0 0E28 ADD R2,R24
02B1 1E39 ADC R3,R25
02B2 1E4A ADC R4,R26
02B3 1E5B ADC R5,R27
(0103) }
(0104) for (i = 0; i < (OS_MAX_TASKS + OS_N_SYS_TASKS - 1); i++) { /* Init. list of free TCBs */
02B4 92300236 STS OSCtxSwCtr+1,R3
02B6 92200235 STS OSCtxSwCtr,R2
(0105) OSTCBTbl[i].OSTCBNext = &OSTCBTbl[i + 1];
02B8 92500238 STS OSCtxSwCtr+3,R5
02BA 92400237 STS OSCtxSwCtr+2,R4
02BC 940E0672 CALL _OSCtxSw
02BE 930A ST R16,-Y
02BF 910F POP R16
02C0 BF0F OUT 0x3F,R16
02C1 9109 LD R16,Y+
02C2 940E076B CALL pop_gset3x
02C4 9508 RET
_OSStart:
x --> R12
y --> R10
02C5 940E0780 CALL push_gset4x
02C7 90200217 LDS R2,OSRunning
02C9 2022 TST R2
02CA F009 BEQ 0x02CC
02CB C039 RJMP 0x0305
02CC E682 LDI R24,0x62
02CD E090 LDI R25,0
02CE 91E0021A LDS R30,OSRdyGrp
02D0 27FF CLR R31
02D1 0FE8 ADD R30,R24
02D2 1FF9 ADC R31,R25
02D3 90A4 LPM R10,0(Z)
02D4 E188 LDI R24,0x18
02D5 E092 LDI R25,2
02D6 2DEA MOV R30,R10
(0106) }
(0107) OSTCBTbl[OS_MAX_TASKS + OS_N_SYS_TASKS - 1].OSTCBNext = (OS_TCB *)0; /* Last OS_TCB */
02D7 27FF CLR R31
02D8 0FE8 ADD R30,R24
02D9 1FF9 ADC R31,R25
02DA 81E0 LDD R30,Z+0
02DB 27FF CLR R31
02DC E682 LDI R24,0x62
(0108) OSTCBFreeList = &OSTCBTbl[0];
02DD E090 LDI R25,0
02DE 0FE8 ADD R30,R24
02DF 1FF9 ADC R31,R25
02E0 90C4 LPM R12,0(Z)
02E1 2C2C MOV R2,R12
02E2 2433 CLR R3
(0109)
(0110) #if OS_MAX_EVENTS >= 2
(0111) for (i = 0; i < (OS_MAX_EVENTS - 1); i++) { /* Init. list of free EVENT control blocks */
02E3 2C4A MOV R4,R10
02E4 2455 CLR R5
02E5 0C44 LSL R4
(0112) OSEventTbl[i].OSEventPtr = (OS_EVENT *)&OSEventTbl[i + 1];
02E6 1C55 ROL R5
02E7 0C44 LSL R4
02E8 1C55 ROL R5
02E9 0C44 LSL R4
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -