📄 ucos.lst
字号:
018B D523 RCALL _write164
018C C009 RJMP 0x0196
(0127) case 3: write164(display[i] | 0xE0); break;
018D E483 LDI R24,0x43
018E E091 LDI R25,1
018F 2DEE MOV R30,R14
0190 27FF CLR R31
0191 0FE8 ADD R30,R24
0192 1FF9 ADC R31,R25
0193 8100 LDD R16,Z+0
0194 6E00 ORI R16,0xE0
0195 D519 RCALL _write164
(0128) }
(0129) if(++i > 3) i = 0;
0196 2D8E MOV R24,R14
0197 5F8F SUBI R24,0xFF
0198 2EE8 MOV R14,R24
0199 E083 LDI R24,3
019A 158E CP R24,R14
019B F408 BCC 0x019D
019C 24EE CLR R14
(0130) //end display
(0131) OSTimeDly (5);
019D E005 LDI R16,5
019E E010 LDI R17,0
019F D4CF RCALL _OSTimeDly
01A0 CF70 RJMP 0x0111
01A1 9621 ADIW R28,1
01A2 D671 RCALL pop_gset5x
01A3 9508 RET
_Task2:
data --> R10
01A4 D671 RCALL push_gset3x
01A5 0158 MOVW R10,R16
(0132) }
(0133) }
(0134) void Task2(void *data){
(0135) data = data;
(0136) OSTimeDly(5);
01A6 E005 LDI R16,5
01A7 E010 LDI R17,0
01A8 D4C6 RCALL _OSTimeDly
(0137) s = EEPROMread(1);
01A9 E001 LDI R16,1
01AA E010 LDI R17,0
01AB D689 RCALL _EEPROMread
01AC 93000140 STS s,R16
(0138) m = EEPROMread(2);
01AE E002 LDI R16,2
01AF E010 LDI R17,0
01B0 D684 RCALL _EEPROMread
01B1 93000141 STS m,R16
(0139) for (;;){
(0140) if(state == 1){
01B3 9180013F LDS R24,state
01B5 3081 CPI R24,1
01B6 F559 BNE 0x01E2
(0141) if(++s == 60){
01B7 91800140 LDS R24,s
01B9 5F8F SUBI R24,0xFF
01BA 2E28 MOV R2,R24
01BB 92200140 STS s,R2
01BD 338C CPI R24,0x3C
01BE F4C9 BNE 0x01D8
(0142) s = 0;
01BF 2422 CLR R2
01C0 92200140 STS s,R2
(0143) if(++m == 60){
01C2 91800141 LDS R24,m
01C4 5F8F SUBI R24,0xFF
01C5 2E28 MOV R2,R24
01C6 92200141 STS m,R2
01C8 338C CPI R24,0x3C
01C9 F471 BNE 0x01D8
(0144) m = 0;
01CA 2422 CLR R2
01CB 92200141 STS m,R2
(0145) if(++h == 24) h=0;
01CD 91800142 LDS R24,h
01CF 5F8F SUBI R24,0xFF
01D0 2E28 MOV R2,R24
01D1 92200142 STS h,R2
01D3 3188 CPI R24,0x18
01D4 F419 BNE 0x01D8
01D5 2422 CLR R2
01D6 92200142 STS h,R2
(0146) }
(0147) }
(0148) EEPROMwrite(1,s);
01D8 91200140 LDS R18,s
01DA E001 LDI R16,1
01DB E010 LDI R17,0
01DC D65D RCALL _EEPROMwrite
(0149) EEPROMwrite(2,m);
01DD 91200141 LDS R18,m
01DF E002 LDI R16,2
01E0 E010 LDI R17,0
01E1 D658 RCALL _EEPROMwrite
(0150) }
(0151) putchar('\n');
01E2 E00A LDI R16,0xA
01E3 D63B RCALL _putchar
(0152) putchar(display[3]+'0');
01E4 91000146 LDS R16,display+3
01E6 5D00 SUBI R16,0xD0
01E7 D637 RCALL _putchar
(0153) putchar(display[2]+'0');
01E8 91000145 LDS R16,display+2
01EA 5D00 SUBI R16,0xD0
01EB D633 RCALL _putchar
(0154) putchar(':');
01EC E30A LDI R16,0x3A
01ED D631 RCALL _putchar
(0155) putchar(display[1]+'0');
01EE 91000144 LDS R16,display+1
01F0 5D00 SUBI R16,0xD0
01F1 D62D RCALL _putchar
(0156) putchar(display[0]+'0');
01F2 91000143 LDS R16,display
01F4 5D00 SUBI R16,0xD0
01F5 D629 RCALL _putchar
(0157) putchar(0x0d);
01F6 E00D LDI R16,0xD
01F7 D627 RCALL _putchar
(0158) putchar(0x0a);
01F8 E00A LDI R16,0xA
01F9 D625 RCALL _putchar
(0159) OSTimeDly (100);
01FA E604 LDI R16,0x64
01FB E010 LDI R17,0
01FC D472 RCALL _OSTimeDly
01FD CFB5 RJMP 0x01B3
01FE D607 RCALL pop_gset3x
01FF 9508 RET
_OSInit:
i --> R10
0200 D615 RCALL push_gset3x
0201 9723 SBIW R28,3
FILE: G:\IccPro\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 */
0202 E080 LDI R24,0
0203 E090 LDI R25,0
0204 E0A0 LDI R26,0
0205 E0B0 LDI R27,0
0206 93900202 STS OSTime+1,R25
0208 93800201 STS OSTime,R24
020A 93B00204 STS OSTime+3,R27
020C 93A00203 STS OSTime+2,R26
(0082) OSIntNesting = 0; /* Clear the interrupt nesting counter */
020E 2422 CLR R2
020F 92200235 STS OSIntNesting,R2
(0083) OSLockNesting = 0; /* Clear the scheduling lock counter */
0211 92200234 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 */
0213 9220022D STS OSTaskCtr,R2
(0086) #endif
(0087) OSRunning = FALSE; /* Indicate that multitasking not started */
0215 9220022E STS OSRunning,R2
(0088) OSIdleCtr = 0L; /* Clear the 32-bit idle counter */
0217 E080 LDI R24,0
0218 E090 LDI R25,0
0219 E0A0 LDI R26,0
021A E0B0 LDI R27,0
021B 93900237 STS OSIdleCtr+1,R25
021D 93800236 STS OSIdleCtr,R24
021F 93B00239 STS OSIdleCtr+3,R27
0221 93A00238 STS OSIdleCtr+2,R26
(0089)
(0090) OSCtxSwCtr = 0; /* Clear the context switch counter */
0223 E080 LDI R24,0
0224 E090 LDI R25,0
0225 E0A0 LDI R26,0
0226 E0B0 LDI R27,0
0227 9390024D STS OSCtxSwCtr+1,R25
0229 9380024C STS OSCtxSwCtr,R24
022B 93B0024F STS OSCtxSwCtr+3,R27
022D 93A0024E STS OSCtxSwCtr+2,R26
(0091) OSRdyGrp = 0; /* Clear the ready list */
022F 92200231 STS OSRdyGrp,R2
(0092) for (i = 0; i < OS_RDY_TBL_SIZE; i++) {
0231 24AA CLR R10
0232 24BB CLR R11
0233 C00A RJMP 0x023E
(0093) OSRdyTbl[i] = 0;
0234 E28F LDI R24,0x2F
0235 E092 LDI R25,2
0236 01F5 MOVW R30,R10
0237 0FE8 ADD R30,R24
0238 1FF9 ADC R31,R25
0239 2422 CLR R2
023A 8220 STD Z+0,R2
023B 01C5 MOVW R24,R10
023C 9601 ADIW R24,1
023D 015C MOVW R10,R24
023E 01C5 MOVW R24,R10
023F 3082 CPI R24,2
0240 E0E0 LDI R30,0
0241 079E CPC R25,R30
0242 F388 BCS 0x0234
(0094) }
(0095)
(0096) OSPrioCur = 0;
0243 2422 CLR R2
0244 92200233 STS OSPrioCur,R2
(0097) OSPrioHighRdy = 0;
0246 92200232 STS OSPrioHighRdy,R2
(0098) OSTCBHighRdy = (OS_TCB *)0; /* TCB Initialization */
0248 2433 CLR R3
0249 92300228 STS OSTCBHighRdy+1,R3
024B 92200227 STS OSTCBHighRdy,R2
(0099) OSTCBCur = (OS_TCB *)0;
024D 9230022C STS OSTCBCur+1,R3
024F 9220022B STS OSTCBCur,R2
(0100) OSTCBList = (OS_TCB *)0;
0251 92300226 STS OSTCBList+1,R3
0253 92200225 STS OSTCBList,R2
(0101) for (i = 0; i < (OS_LOWEST_PRIO + 1); i++) { /* Clear the priority table */
0255 24AA CLR R10
0256 24BB CLR R11
0257 C010 RJMP 0x0268
(0102) OSTCBPrioTbl[i] = (OS_TCB *)0;
0258 E002 LDI R16,2
0259 E010 LDI R17,0
025A 0195 MOVW R18,R10
025B D59A RCALL empy16s
025C 01F8 MOVW R30,R16
025D E085 LDI R24,5
025E E092 LDI R25,2
025F 0FE8 ADD R30,R24
0260 1FF9 ADC R31,R25
0261 2422 CLR R2
0262 2433 CLR R3
0263 8231 STD Z+1,R3
0264 8220 STD Z+0,R2
0265 01C5 MOVW R24,R10
0266 9601 ADIW R24,1
0267 015C MOVW R10,R24
0268 01C5 MOVW R24,R10
0269 3180 CPI R24,0x10
026A E0E0 LDI R30,0
026B 079E CPC R25,R30
026C F358 BCS 0x0258
(0103) }
(0104) for (i = 0; i < (OS_MAX_TASKS + OS_N_SYS_TASKS - 1); i++) { /* Init. list of free TCBs */
026D 24AA CLR R10
026E 24BB CLR R11
026F C019 RJMP 0x0289
(0105) OSTCBTbl[i].OSTCBNext = &OSTCBTbl[i + 1];
0270 0195 MOVW R18,R10
0271 5F2F SUBI R18,0xFF
0272 4F3F SBCI R19,0xFF
0273 E00E LDI R16,0xE
0274 E010 LDI R17,0
0275 D580 RCALL empy16s
0276 0118 MOVW R2,R16
0277 E488 LDI R24,0x48
0278 E091 LDI R25,1
0279 0E28 ADD R2,R24
027A 1E39 ADC R3,R25
027B E00E LDI R16,0xE
027C E010 LDI R17,0
027D 0195 MOVW R18,R10
027E D577 RCALL empy16s
027F 01F8 MOVW R30,R16
0280 E48A LDI R24,0x4A
0281 E091 LDI R25,1
0282 0FE8 ADD R30,R24
0283 1FF9 ADC R31,R25
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -