📄 ucosii.lst
字号:
__start:
__text_start:
00C7 E5CF LDI R28,0x5F
00C8 E0D4 LDI R29,4
00C9 BFCD OUT P3D,R28
00CA BFDE OUT P3E,R29
00CB 51C0 SUBI R28,0x10
00CC 40D0 SBCI R29,0
00CD EA0A LDI R16,0xAA
00CE 8308 STD R16,0+Y
00CF 2400 CLR R0
00D0 E6E0 LDI R30,0x60
00D1 E0F0 LDI R31,0
00D2 E012 LDI R17,2
00D3 33EA CPI R30,0x3A
00D4 07F1 CPC R31,R17
00D5 F011 BEQ 0x00D8
00D6 9201 ST R0,Z+
00D7 CFFB RJMP 0x00D3
00D8 8300 STD R16,0+Z
00D9 E8EE LDI R30,0x8E
00DA E0F1 LDI R31,1
00DB E6A0 LDI R26,0x60
00DC E0B0 LDI R27,0
00DD E011 LDI R17,1
00DE 38EE CPI R30,0x8E
00DF 07F1 CPC R31,R17
00E0 F021 BEQ 0x00E5
00E1 95C8 LPM
00E2 9631 ADIW R30,1
00E3 920D ST R0,X+
00E4 CFF9 RJMP 0x00DE
00E5 940E066A CALL _main
_exit:
00E7 CFFF RJMP _exit
_OSInit:
i --> R20
00E8 940E0878 CALL push_gset1
00EA 9723 SBIW R28,3
FILE: C:\icc\examples.avr\AVR_PQ1A_DEMO\21_uCOSII\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 */
00EB E080 LDI R24,0
00EC E090 LDI R25,0
00ED E0A0 LDI R26,0
00EE E0B0 LDI R27,0
00EF 9390011A STS R25,_OSTime+1
00F1 93800119 STS R24,_OSTime
00F3 93B0011C STS R27,_OSTime+3
00F5 93A0011B STS R26,_OSTime+2
(0082) OSIntNesting = 0; /* Clear the interrupt nesting counter */
00F7 2422 CLR R2
00F8 9220014D STS R2,_OSIntNesting
(0083) OSLockNesting = 0; /* Clear the scheduling lock counter */
00FA 9220014C STS R2,_OSLockNesting
(0084) #if OS_TASK_CREATE_EN || OS_TASK_CREATE_EXT_EN || OS_TASK_DEL_EN
(0085) OSTaskCtr = 0; /* Clear the number of tasks */
00FC 92200145 STS R2,_OSTaskCtr
(0086) #endif
(0087) OSRunning = FALSE; /* Indicate that multitasking not started */
00FE 92200146 STS R2,_OSRunning
(0088) OSIdleCtr = 0L; /* Clear the 32-bit idle counter */
0100 E080 LDI R24,0
0101 E090 LDI R25,0
0102 E0A0 LDI R26,0
0103 E0B0 LDI R27,0
0104 9390014F STS R25,_OSIdleCtr+1
0106 9380014E STS R24,_OSIdleCtr
0108 93B00151 STS R27,_OSIdleCtr+3
010A 93A00150 STS R26,_OSIdleCtr+2
(0089)
(0090) OSCtxSwCtr = 0; /* Clear the context switch counter */
010C E080 LDI R24,0
010D E090 LDI R25,0
010E E0A0 LDI R26,0
010F E0B0 LDI R27,0
0110 93900165 STS R25,_OSCtxSwCtr+1
0112 93800164 STS R24,_OSCtxSwCtr
0114 93B00167 STS R27,_OSCtxSwCtr+3
0116 93A00166 STS R26,_OSCtxSwCtr+2
(0091) OSRdyGrp = 0; /* Clear the ready list */
0118 92200149 STS R2,_OSRdyGrp
(0092) for (i = 0; i < OS_RDY_TBL_SIZE; i++) {
011A 2744 CLR R20
011B 2755 CLR R21
011C C009 RJMP 0x0126
(0093) OSRdyTbl[i] = 0;
011D E487 LDI R24,0x47
011E E091 LDI R25,1
011F 01FA MOVW R30,R20
0120 0FE8 ADD R30,R24
0121 1FF9 ADC R31,R25
0122 2422 CLR R2
0123 8220 STD R2,0+Z
0124 5F4F SUBI R20,0xFF
0125 4F5F SBCI R21,0xFF
0126 3042 CPI R20,2
0127 E0E0 LDI R30,0
0128 075E CPC R21,R30
0129 F398 BCS 0x011D
(0094) }
(0095)
(0096) OSPrioCur = 0;
012A 2422 CLR R2
012B 9220014B STS R2,_OSPrioCur
(0097) OSPrioHighRdy = 0;
012D 9220014A STS R2,_OSPrioHighRdy
(0098) OSTCBHighRdy = (OS_TCB *)0; /* TCB Initialization */
012F 2433 CLR R3
0130 92300140 STS R3,_OSTCBHighRdy+1
0132 9220013F STS R2,_OSTCBHighRdy
(0099) OSTCBCur = (OS_TCB *)0;
0134 92300144 STS R3,_OSTCBCur+1
0136 92200143 STS R2,_OSTCBCur
(0100) OSTCBList = (OS_TCB *)0;
0138 9230013E STS R3,_OSTCBList+1
013A 9220013D STS R2,_OSTCBList
(0101) for (i = 0; i < (OS_LOWEST_PRIO + 1); i++) { /* Clear the priority table */
013C 2744 CLR R20
013D 2755 CLR R21
013E C010 RJMP 0x014F
(0102) OSTCBPrioTbl[i] = (OS_TCB *)0;
013F E002 LDI R16,2
0140 E010 LDI R17,0
0141 019A MOVW R18,R20
0142 940E0868 CALL empy16s
0144 01F8 MOVW R30,R16
0145 E18D LDI R24,0x1D
0146 E091 LDI R25,1
0147 0FE8 ADD R30,R24
0148 1FF9 ADC R31,R25
0149 2422 CLR R2
014A 2433 CLR R3
014B 8220 STD R2,0+Z
014C 8231 STD R3,1+Z
014D 5F4F SUBI R20,0xFF
014E 4F5F SBCI R21,0xFF
014F 3140 CPI R20,0x10
0150 E0E0 LDI R30,0
0151 075E CPC R21,R30
0152 F360 BCS 0x013F
(0103) }
(0104) for (i = 0; i < (OS_MAX_TASKS + OS_N_SYS_TASKS - 1); i++) { /* Init. list of free TCBs */
0153 2744 CLR R20
0154 2755 CLR R21
0155 C01A RJMP 0x0170
(0105) OSTCBTbl[i].OSTCBNext = &OSTCBTbl[i + 1];
0156 019A MOVW R18,R20
0157 5F2F SUBI R18,0xFF
0158 4F3F SBCI R19,0xFF
0159 E00E LDI R16,0xE
015A E010 LDI R17,0
015B 940E0868 CALL empy16s
015D 0118 MOVW R2,R16
015E E680 LDI R24,0x60
015F E090 LDI R25,0
0160 0E28 ADD R2,R24
0161 1E39 ADC R3,R25
0162 E00E LDI R16,0xE
0163 E010 LDI R17,0
0164 019A MOVW R18,R20
0165 940E0868 CALL empy16s
0167 01F8 MOVW R30,R16
0168 E682 LDI R24,0x62
0169 E090 LDI R25,0
016A 0FE8 ADD R30,R24
016B 1FF9 ADC R31,R25
016C 8220 STD R2,0+Z
016D 8231 STD R3,1+Z
016E 5F4F SUBI R20,0xFF
016F 4F5F SBCI R21,0xFF
0170 3045 CPI R20,5
0171 E0E0 LDI R30,0
0172 075E CPC R21,R30
0173 F310 BCS 0x0156
(0106) }
(0107) OSTCBTbl[OS_MAX_TASKS + OS_N_SYS_TASKS - 1].OSTCBNext = (OS_TCB *)0; /* Last OS_TCB */
0174 2422 CLR R2
0175 2433 CLR R3
0176 923000A9 STS R3,0xA9
0178 922000A8 STS R2,0xA8
(0108) OSTCBFreeList = &OSTCBTbl[0];
017A E680 LDI R24,0x60
017B E090 LDI R25,0
017C 93900142 STS R25,_OSTCBFreeList+1
017E 93800141 STS R24,_OSTCBFreeList
(0109)
(0110) #if OS_MAX_EVENTS >= 2
(0111) for (i = 0; i < (OS_MAX_EVENTS - 1); i++) { /* Init. list of free EVENT control blocks */
0180 2744 CLR R20
0181 2755 CLR R21
0182 C01A RJMP 0x019D
(0112) OSEventTbl[i].OSEventPtr = (OS_EVENT *)&OSEventTbl[i + 1];
0183 019A MOVW R18,R20
0184 5F2F SUBI R18,0xFF
0185 4F3F SBCI R19,0xFF
0186 E008 LDI R16,0x8
0187 E010 LDI R17,0
0188 940E0868 CALL empy16s
018A 0118 MOVW R2,R16
018B E582 LDI R24,0x52
018C E091 LDI R25,1
018D 0E28 ADD R2,R24
018E 1E39 ADC R3,R25
018F E008 LDI R16,0x8
0190 E010 LDI R17,0
0191 019A MOVW R18,R20
0192 940E0868 CALL empy16s
0194 01F8 MOVW R30,R16
0195 E582 LDI R24,0x52
0196 E091 LDI R25,1
0197 0FE8 ADD R30,R24
0198 1FF9 ADC R31,R25
0199 8220 STD R2,0+Z
019A 8231 STD R3,1+Z
019B 5F4F SUBI R20,0xFF
019C 4F5F SBCI R21,0xFF
019D 3041 CPI R20,1
019E E0E0 LDI R30,0
019F 075E CPC R21,R30
01A0 F310 BCS 0x0183
(0113) }
(0114) OSEventTbl[OS_MAX_EVENTS - 1].OSEventPtr = (OS_EVENT *)0;
01A1 2422 CLR R2
01A2 2433 CLR R3
01A3 9230015B STS R3,0x15B
01A5 9220015A STS R2,0x15A
(0115) OSEventFreeList = &OSEventTbl[0];
01A7 E582 LDI R24,0x52
01A8 E091 LDI R25,1
01A9 93900163 STS R25,_OSEventFreeList+1
01AB 93800162 STS R24,_OSEventFreeList
(0116) #endif
(0117)
(0118) #if OS_STK_GROWTH == 1
(0119) OSTaskCreate(OSTaskIdle, (void *)0, &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], OS_IDLE_PRIO);
01AD E08F LDI R24,0xF
01AE 838A STD R24,2+Y
01AF E187 LDI R24,0x17
01B0 E091 LDI R25,1
01B1 8388 STD R24,0+Y
01B2 8399 STD R25,1+Y
01B3 2722 CLR R18
01B4 2733 CLR R19
01B5 E600 LDI R16,0x60
01B6 E010 LDI R17,0
01B7 940E05D8 CALL _OSTaskCreate
(0120) #else
(0121) OSTaskCreate(OSTaskIdle, (void *)0, &OSTaskIdleStk[0], OS_IDLE_PRIO);
(0122) #endif
(0123)
(0124) }
01B9 9623 ADIW R28,3
01BA 940E087B CALL pop_gset1
01BC 9508 RET
(0125) /*$PAGE*/
(0126) /*
(0127) *********************************************************************************************************
(0128) * EXIT ISR
(0129) *
(0130) * Description: This function is used to notify uC/OS-II that you have completed serviving an ISR. When
(0131) * the last nested ISR has completed, uC/OS-II will call the scheduler to determine whether
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -