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

📄 ucos.lst

📁 ICCAVR下的uCOS mega8程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
    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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -