📄 ucos.lst
字号:
017C 2DEE MOV R30,R14
017D 27FF CLR R31
017E 0FE8 ADD R30,R24
017F 1FF9 ADC R31,R25
0180 8100 LDD R16,0+Z
0181 6E00 ORI R16,0xE0
0182 D507 RCALL _write164
(0129) }
(0130) if(++i > 3) i = 0;
0183 2D8E MOV R24,R14
0184 5F8F SUBI R24,0xFF
0185 2E28 MOV R2,R24
0186 2EE8 MOV R14,R24
0187 E083 LDI R24,3
0188 1582 CP R24,R2
0189 F408 BCC 0x018B
018A 24EE CLR R14
(0131) //end display
(0132) OSTimeDly (2);
018B E002 LDI R16,2
018C E010 LDI R17,0
018D D4C0 RCALL _OSTimeDly
018E CF6F RJMP 0x00FE
018F 9621 ADIW R28,1
0190 D65A RCALL pop_gset5x
0191 9508 RET
_Task2:
data --> R10
0192 D65A RCALL push_gset3x
0193 0158 MOVW R10,R16
(0133) }
(0134) }
(0135) void Task2(void *data){
(0136) data = data;
(0137) OSTimeDly(5);
0194 E005 LDI R16,5
0195 E010 LDI R17,0
0196 D4B7 RCALL _OSTimeDly
(0138) s = EEPROMread(1);
0197 E001 LDI R16,1
0198 E010 LDI R17,0
0199 D672 RCALL _EEPROMread
019A 93000129 STS _s,R16
(0139) m = EEPROMread(2);
019C E002 LDI R16,2
019D E010 LDI R17,0
019E D66D RCALL _EEPROMread
019F 9300012A STS _m,R16
(0140) for (;;){
(0141) if(state == 1){
01A1 91800128 LDS R24,_state
01A3 3081 CPI R24,1
01A4 F559 BNE 0x01D0
(0142) if(++s == 60){
01A5 91800129 LDS R24,_s
01A7 5F8F SUBI R24,0xFF
01A8 2E28 MOV R2,R24
01A9 92200129 STS _s,R2
01AB 338C CPI R24,0x3C
01AC F4C9 BNE 0x01C6
(0143) s = 0;
01AD 2422 CLR R2
01AE 92200129 STS _s,R2
(0144) if(++m == 60){
01B0 9180012A LDS R24,_m
01B2 5F8F SUBI R24,0xFF
01B3 2E28 MOV R2,R24
01B4 9220012A STS _m,R2
01B6 338C CPI R24,0x3C
01B7 F471 BNE 0x01C6
(0145) m = 0;
01B8 2422 CLR R2
01B9 9220012A STS _m,R2
(0146) if(++h == 24) h=0;
01BB 9180012B LDS R24,_h
01BD 5F8F SUBI R24,0xFF
01BE 2E28 MOV R2,R24
01BF 9220012B STS _h,R2
01C1 3188 CPI R24,0x18
01C2 F419 BNE 0x01C6
01C3 2422 CLR R2
01C4 9220012B STS _h,R2
(0147) }
(0148) }
(0149) EEPROMwrite(1,s);
01C6 91200129 LDS R18,_s
01C8 E001 LDI R16,1
01C9 E010 LDI R17,0
01CA D64A RCALL _EEPROMwrite
(0150) EEPROMwrite(2,m);
01CB 9120012A LDS R18,_m
01CD E002 LDI R16,2
01CE E010 LDI R17,0
01CF D645 RCALL _EEPROMwrite
(0151) }
(0152) putchar('\n');
01D0 E00A LDI R16,0xA
01D1 D624 RCALL _putchar
(0153) putchar(display[3]+'0');
01D2 9100012F LDS R16,_display+3
01D4 5D00 SUBI R16,0xD0
01D5 D620 RCALL _putchar
(0154) putchar(display[2]+'0');
01D6 9100012E LDS R16,_display+2
01D8 5D00 SUBI R16,0xD0
01D9 D61C RCALL _putchar
(0155) putchar(':');
01DA E30A LDI R16,0x3A
01DB D61A RCALL _putchar
(0156) putchar(display[1]+'0');
01DC 9100012D LDS R16,_display+1
01DE 5D00 SUBI R16,0xD0
01DF D616 RCALL _putchar
(0157) putchar(display[0]+'0');
01E0 9100012C LDS R16,_display
01E2 5D00 SUBI R16,0xD0
01E3 D612 RCALL _putchar
(0158) OSTimeDly (500);
01E4 EF04 LDI R16,0xF4
01E5 E011 LDI R17,1
01E6 D467 RCALL _OSTimeDly
01E7 CFB9 RJMP 0x01A1
01E8 D5F4 RCALL pop_gset3x
01E9 9508 RET
_OSInit:
i --> R10
01EA D602 RCALL push_gset3x
01EB 9723 SBIW R28,3
FILE: D:\job\avrtest\光盘\开发板\iccavr\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 */
01EC E080 LDI R24,0
01ED E090 LDI R25,0
01EE E0A0 LDI R26,0
01EF E0B0 LDI R27,0
01F0 939001EB STS _OSTime+1,R25
01F2 938001EA STS _OSTime,R24
01F4 93B001ED STS _OSTime+3,R27
01F6 93A001EC STS _OSTime+2,R26
(0082) OSIntNesting = 0; /* Clear the interrupt nesting counter */
01F8 2422 CLR R2
01F9 9220021E STS _OSIntNesting,R2
(0083) OSLockNesting = 0; /* Clear the scheduling lock counter */
01FB 9220021D STS _OSLockNesting,R2
(0084) #if OS_TASK_CREATE_EN || OS_TASK_CREATE_EXT_EN || OS_TASK_DEL_EN
(0085) OSTaskCtr = 0; /* Clear the number of tasks */
01FD 92200216 STS _OSTaskCtr,R2
(0086) #endif
(0087) OSRunning = FALSE; /* Indicate that multitasking not started */
01FF 92200217 STS _OSRunning,R2
(0088) OSIdleCtr = 0L; /* Clear the 32-bit idle counter */
0201 E080 LDI R24,0
0202 E090 LDI R25,0
0203 E0A0 LDI R26,0
0204 E0B0 LDI R27,0
0205 93900220 STS _OSIdleCtr+1,R25
0207 9380021F STS _OSIdleCtr,R24
0209 93B00222 STS _OSIdleCtr+3,R27
020B 93A00221 STS _OSIdleCtr+2,R26
(0089)
(0090) OSCtxSwCtr = 0; /* Clear the context switch counter */
020D E080 LDI R24,0
020E E090 LDI R25,0
020F E0A0 LDI R26,0
0210 E0B0 LDI R27,0
0211 93900236 STS _OSCtxSwCtr+1,R25
0213 93800235 STS _OSCtxSwCtr,R24
0215 93B00238 STS _OSCtxSwCtr+3,R27
0217 93A00237 STS _OSCtxSwCtr+2,R26
(0091) OSRdyGrp = 0; /* Clear the ready list */
0219 9220021A STS _OSRdyGrp,R2
(0092) for (i = 0; i < OS_RDY_TBL_SIZE; i++) {
021B 24AA CLR R10
021C 24BB CLR R11
021D C00A RJMP 0x0228
(0093) OSRdyTbl[i] = 0;
021E E188 LDI R24,0x18
021F E092 LDI R25,2
0220 01F5 MOVW R30,R10
0221 0FE8 ADD R30,R24
0222 1FF9 ADC R31,R25
0223 2422 CLR R2
0224 8220 STD R2,0+Z
0225 01C5 MOVW R24,R10
0226 9601 ADIW R24,1
0227 015C MOVW R10,R24
0228 01C5 MOVW R24,R10
0229 3082 CPI R24,2
022A E0E0 LDI R30,0
022B 079E CPC R25,R30
022C F388 BCS 0x021E
(0094) }
(0095)
(0096) OSPrioCur = 0;
022D 2422 CLR R2
022E 9220021C STS _OSPrioCur,R2
(0097) OSPrioHighRdy = 0;
0230 9220021B STS _OSPrioHighRdy,R2
(0098) OSTCBHighRdy = (OS_TCB *)0; /* TCB Initialization */
0232 2433 CLR R3
0233 92300211 STS _OSTCBHighRdy+1,R3
0235 92200210 STS _OSTCBHighRdy,R2
(0099) OSTCBCur = (OS_TCB *)0;
0237 92300215 STS _OSTCBCur+1,R3
0239 92200214 STS _OSTCBCur,R2
(0100) OSTCBList = (OS_TCB *)0;
023B 9230020F STS _OSTCBList+1,R3
023D 9220020E STS _OSTCBList,R2
(0101) for (i = 0; i < (OS_LOWEST_PRIO + 1); i++) { /* Clear the priority table */
023F 24AA CLR R10
0240 24BB CLR R11
0241 C010 RJMP 0x0252
(0102) OSTCBPrioTbl[i] = (OS_TCB *)0;
0242 E002 LDI R16,2
0243 E010 LDI R17,0
0244 0195 MOVW R18,R10
0245 D587 RCALL empy16s
0246 01F8 MOVW R30,R16
0247 EE8E LDI R24,0xEE
0248 E091 LDI R25,1
0249 0FE8 ADD R30,R24
024A 1FF9 ADC R31,R25
024B 2422 CLR R2
024C 2433 CLR R3
024D 8220 STD R2,0+Z
024E 8231 STD R3,1+Z
024F 01C5 MOVW R24,R10
0250 9601 ADIW R24,1
0251 015C MOVW R10,R24
0252 01C5 MOVW R24,R10
0253 3180 CPI R24,0x10
0254 E0E0 LDI R30,0
0255 079E CPC R25,R30
0256 F358 BCS 0x0242
(0103) }
(0104) for (i = 0; i < (OS_MAX_TASKS + OS_N_SYS_TASKS - 1); i++) { /* Init. list of free TCBs */
0257 24AA CLR R10
0258 24BB CLR R11
0259 C019 RJMP 0x0273
(0105) OSTCBTbl[i].OSTCBNext = &OSTCBTbl[i + 1];
025A 0195 MOVW R18,R10
025B 5F2F SUBI R18,0xFF
025C 4F3F SBCI R19,0xFF
025D E00E LDI R16,0xE
025E E010 LDI R17,0
025F D56D RCALL empy16s
0260 0118 MOVW R2,R16
0261 E381 LDI R24,0x31
0262 E091 LDI R25,1
0263 0E28 ADD R2,R24
0264 1E39 ADC R3,R25
0265 E00E LDI R16,0xE
0266 E010 LDI R17,0
0267 0195 MOVW R18,R10
0268 D564 RCALL empy16s
0269 01F8 MOVW R30,R16
026A E383 LDI R24,0x33
026B E091 LDI R25,1
026C 0FE8 ADD R30,R24
026D 1FF9 ADC R31,R25
026E 8220 STD R2,0+Z
026F 8231 STD R3,1+Z
0270 01C5 MOVW R24,R10
0271 9601 ADIW R24,1
0272 015C MOVW R10,R24
0273 01C5 MOVW R24,R10
0274 3085 CPI R24,5
0275 E0E0 LDI R30,0
0276 079E CPC R25,R30
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -