⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ucosii.lst

📁 1.将uC/OS-II操作系统移植到Mega16上 2.建立两个任务
💻 LST
📖 第 1 页 / 共 5 页
字号:
__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 + -