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

📄 project.lst

📁 mega128 ucOSII操作系统源码
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0099) *
(0100) * Description : This is an example of a startup task.  As mentioned in the book's text, you MUST
(0101) *               initialize the ticker only once multitasking has started.
(0102) *
(0103) * Arguments   : p_arg   is the argument passed to 'AppStartTask()' by 'OSTaskCreate()'.
(0104) *
(0105) * Notes       : 1) The first line of code is used to prevent a compiler warning because 'p_arg' is not
(0106) *                  used.  The compiler should not generate any code for this statement.
(0107) *********************************************************************************************************
(0108) */
(0109) 
(0110) static void  AppTaskStart (void *p_arg)
(0111) {
(0112)     p_arg = p_arg;                               /* Prevent compiler warnings                          */
(0113) 
(0114)     OSTickISR_Init();                            /* Initialize the ticker                              */
    02A8 D06E      RCALL	_OSTickISR_Init
(0115) 
(0116)     AppIOInit();                                 /* Initialize the I/Os                                */
    02A9 D069      RCALL	_AppIOInit
(0117) 
(0118)     AppTaskCreate();
    02AA D00B      RCALL	_AppTaskCreate
    02AB C006      RJMP	0x02B2
(0119) 
(0120)     while (TRUE) {                               /* Task body, always written as an infinite loop.     */
(0121)         LED_Toggle(1);
    02AC E001      LDI	R16,1
    02AD D072      RCALL	_LED_Toggle
(0122)         OSTimeDly(OS_TICKS_PER_SEC / 10);
    02AE E005      LDI	R16,5
    02AF E010      LDI	R17,0
    02B0 940E0351  CALL	_OSTimeDly
    02B2 CFF9      RJMP	0x02AC
(0123)     }
(0124) }
    02B3 940E0E61  CALL	pop_gset1
    02B5 9508      RET
_AppTaskCreate:
    02B6 9723      SBIW	R28,3
(0125) 
(0126) 
(0127) /*
(0128) *********************************************************************************************************
(0129) *                                    CREATE APPLICATION TASKS
(0130) *
(0131) * Description : This function creates the application tasks.
(0132) *
(0133) * Arguments   : p_arg   is the argument passed to 'AppStartTask()' by 'OSTaskCreate()'.
(0134) *
(0135) * Notes       : 1) The first line of code is used to prevent a compiler warning because 'p_arg' is not
(0136) *                  used.  The compiler should not generate any code for this statement.
(0137) *********************************************************************************************************
(0138) */
(0139) 
(0140) static  void  AppTaskCreate (void)
(0141) {
(0142)     /*---- Task initialization code goes HERE! --------------------------------------------------------*/
(0143)     OSTaskStkSize     = OS_TASK_1_STK_SIZE;        /* Setup the default stack size                     */
    02B7 E080      LDI	R24,0
    02B8 E091      LDI	R25,1
    02B9 93900103  STS	_OSTaskStkSize+1,R25
    02BB 93800102  STS	_OSTaskStkSize,R24
(0144)     OSTaskHardStkSize = OS_TASK_1_HARD_STK_SIZE;   /* Setup the default hardware stack size            */
    02BD E480      LDI	R24,0x40
    02BE E090      LDI	R25,0
    02BF 93900101  STS	_OSTaskHardStkSize+1,R25
    02C1 93800100  STS	_OSTaskHardStkSize,R24
(0145)     OSTaskCreate(AppTask1, (void *)0, (OS_STK *)&AppTask1Stk[OSTaskStkSize - 1], 1);
    02C3 E081      LDI	R24,1
    02C4 838A      STD	Y+2,R24
    02C5 E084      LDI	R24,4
    02C6 E092      LDI	R25,2
    02C7 91E00102  LDS	R30,_OSTaskStkSize
    02C9 91F00103  LDS	R31,_OSTaskStkSize+1
    02CB 9731      SBIW	R30,1
    02CC 0FE8      ADD	R30,R24
    02CD 1FF9      ADC	R31,R25
    02CE 83F9      STD	Y+1,R31
    02CF 83E8      STD	Y+0,R30
    02D0 2722      CLR	R18
    02D1 2733      CLR	R19
    02D2 E80E      LDI	R16,0x8E
    02D3 E010      LDI	R17,0
    02D4 940E0C05  CALL	_OSTaskCreate
(0146) 
(0147)     OSTaskStkSize     = OS_TASK_2_STK_SIZE;        /* Setup the default stack size                     */
    02D6 E080      LDI	R24,0
    02D7 E091      LDI	R25,1
    02D8 93900103  STS	_OSTaskStkSize+1,R25
    02DA 93800102  STS	_OSTaskStkSize,R24
(0148)     OSTaskHardStkSize = OS_TASK_2_HARD_STK_SIZE;   /* Setup the default hardware stack size            */
    02DC E480      LDI	R24,0x40
    02DD E090      LDI	R25,0
    02DE 93900101  STS	_OSTaskHardStkSize+1,R25
    02E0 93800100  STS	_OSTaskHardStkSize,R24
(0149)     OSTaskCreate(AppTask2, (void *)0, (OS_STK *)&AppTask2Stk[OSTaskStkSize - 1], 2);
    02E2 E082      LDI	R24,2
    02E3 838A      STD	Y+2,R24
    02E4 E084      LDI	R24,4
    02E5 E091      LDI	R25,1
    02E6 91E00102  LDS	R30,_OSTaskStkSize
    02E8 91F00103  LDS	R31,_OSTaskStkSize+1
    02EA 9731      SBIW	R30,1
    02EB 0FE8      ADD	R30,R24
    02EC 1FF9      ADC	R31,R25
    02ED 83F9      STD	Y+1,R31
    02EE 83E8      STD	Y+0,R30
    02EF 2722      CLR	R18
    02F0 2733      CLR	R19
    02F1 E80C      LDI	R16,0x8C
    02F2 E010      LDI	R17,0
    02F3 940E0C05  CALL	_OSTaskCreate
(0150) }
    02F5 9623      ADIW	R28,3
    02F6 9508      RET
_AppTask1:
  p_arg                --> R20
    02F7 940E0E5E  CALL	push_gset1
    02F9 01A8      MOVW	R20,R16
(0151) 
(0152) /*
(0153) *********************************************************************************************************
(0154) *                                              TASK #1
(0155) *********************************************************************************************************
(0156) */
(0157) 
(0158) static void  AppTask1(void *p_arg)
(0159) {
(0160)     p_arg = p_arg;
    02FA C006      RJMP	0x0301
(0161)     while (TRUE) {
(0162)         LED_Toggle(2);
    02FB E002      LDI	R16,2
    02FC D023      RCALL	_LED_Toggle
(0163)         OSTimeDly(OS_TICKS_PER_SEC / 5);
    02FD E00A      LDI	R16,0xA
    02FE E010      LDI	R17,0
    02FF 940E0351  CALL	_OSTimeDly
    0301 CFF9      RJMP	0x02FB
(0164)     }
(0165) }
    0302 940E0E61  CALL	pop_gset1
    0304 9508      RET
_AppTask2:
  p_arg                --> R20
    0305 940E0E5E  CALL	push_gset1
    0307 01A8      MOVW	R20,R16
(0166) 
(0167) /*
(0168) *********************************************************************************************************
(0169) *                                              TASK #2
(0170) *********************************************************************************************************
(0171) */
(0172) 
(0173) static void  AppTask2(void *p_arg)
(0174) {
(0175)     p_arg = p_arg;
    0308 C006      RJMP	0x030F
(0176)     while (TRUE) {
(0177)         LED_Toggle(3);
    0309 E003      LDI	R16,3
    030A D015      RCALL	_LED_Toggle
(0178)         OSTimeDly(OS_TICKS_PER_SEC / 2);
    030B E109      LDI	R16,0x19
    030C E010      LDI	R17,0
    030D 940E0351  CALL	_OSTimeDly
    030F CFF9      RJMP	0x0309
(0179)     }
(0180) }
    0310 940E0E61  CALL	pop_gset1
    0312 9508      RET
(0181) 
(0182) /*
(0183) *********************************************************************************************************
(0184) *                                            SETUP THE I/Os
(0185) *********************************************************************************************************
(0186) */
(0187) 
(0188) static void AppIOInit (void)
(0189) {
(0190)     DDRD        = 0xFF;                                 /* All PORTD pins are outputs                  */
_AppIOInit:
    0313 EF8F      LDI	R24,0xFF
    0314 BB81      OUT	0x11,R24
(0191)     PORTD       = 0xFF;
    0315 BB82      OUT	0x12,R24
(0192) }
    0316 9508      RET
(0193) 
(0194) /*
(0195) *********************************************************************************************************
(0196) *                                        SETUP THE TICK RATE
(0197) *********************************************************************************************************
(0198) */
(0199) 
(0200) void  OSTickISR_Init (void)
(0201) {
(0202)     TCCR0 = 0x07;                                       /* Set TIMER0 prescaler to CLK/1024            */
_OSTickISR_Init:
    0317 E087      LDI	R24,7
    0318 BF83      OUT	0x33,R24
(0203)     TIMSK = 0x01;                                       /* Enable TIMER0 overflow interrupt            */
    0319 E081      LDI	R24,1
    031A BF87      OUT	0x37,R24
(0204) }
    031B 9508      RET
(0205) 
(0206) 
(0207) /*
(0208) *********************************************************************************************************
(0209) *                                        SETUP THE TICK RATE
(0210) *********************************************************************************************************
(0211) */
(0212) 
(0213) void  OSTickISR_Handler (void)
(0214) {
(0215)     TCNT0 = 256 - (CPU_CLK_FREQ / OS_TICKS_PER_SEC / 1024);
_OSTickISR_Handler:
    031C EB89      LDI	R24,0xB9
    031D BF82      OUT	0x32,R24
(0216)     OSTimeTick();
(0217) }
    031E 940C0550  JMP	_OSTimeTick
_LED_Toggle:
  cpu_sr               --> R20
  led                  --> R22
    0320 940E0E75  CALL	push_gset2
    0322 2F60      MOV	R22,R16
(0218) 
(0219) /*
(0220) *********************************************************************************************************
(0221) *                                          TOGGLE LED
(0222) *********************************************************************************************************
(0223) */
(0224) 
(0225) static  void  LED_Toggle (INT8U led)
(0226) {
(0227) #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
(0228)     OS_CPU_SR  cpu_sr;
(0229) #endif
(0230) 
(0231) 
(0232)     OS_ENTER_CRITICAL();
    0323 940E0C7F  CALL	_OS_CPU_SR_Save
    0325 2F40      MOV	R20,R16
(0233)     switch (led) {
    0326 2777      CLR	R23
    0327 3061      CPI	R22,1
    0328 E0E0      LDI	R30,0
    0329 077E      CPC	R23,R30
    032A F069      BEQ	0x0338
    032B 3062      CPI	R22,2
    032C E0E0      LDI	R30,0
    032D 077E      CPC	R23,R30
    032E F071      BEQ	0x033D
    032F 3063      CPI	R22,3
    0330 E0E0      LDI	R30,0
    0331 077E      CPC	R23,R30
    0332 F079      BEQ	0x0342
    0333 3064      CPI	R22,4
    0334 E0E0      LDI	R30,0
    0335 077E      CPC	R23,R30
    0336 F081      BEQ	0x0347
    0337 C013      RJMP	0x034B
(0234)         case 1:
(0235)              PORTD ^= 0x01;
    0338 E081      LDI	R24,1
    0339 B222      IN	R2,0x12
    033A 2628      EOR	R2,R24
    033B BA22      OUT	0x12,R2
(0236)              break;
    033C C00E      RJMP	0x034B
(0237) 
(0238)         case 2:
(0239)              PORTD ^= 0x02;
    033D E082      LDI	R24,2
    033E B222      IN	R2,0x12
    033F 2628      EOR	R2,R24
    0340 BA22      OUT	0x12,R2
(0240)              break;
    0341 C009      RJMP	0x034B
(0241) 
(0242)         case 3:
(0243)              PORTD ^= 0x04;
    0342 E084      LDI	R24,4
    0343 B222      IN	R2,0x12
    0344 2628      EOR	R2,R24
    0345 BA22      OUT	0x12,R2
(0244)              break;
    0346 C004      RJMP	0x034B
(0245) 
(0246)         case 4:
(0247)              PORTD ^= 0x08;
    0347 E088      LDI	R24,0x8
    0348 B222      IN	R2,0x12
    0349 2628      EOR	R2,R24
    034A BA22      OUT	0x12,R2
(0248)              break;
(0249)     }
(0250)     OS_EXIT_CRITICAL();
    034B 2F04      MOV	R16,R20
    034C 940E0C82  CALL	_OS_CPU_SR_Restore
(0251) }
    034E 940E0E52  CALL	pop_gset2
    0350 9508      RET
_OSTimeDly:
  y                    --> R10
  cpu_sr               --> R20
  ticks                --> R22
    0351 940E0E79  CALL	push_gset3
    0353 01B8      MOVW	R22,R16
FILE: C:\MICRIUM\Software\uCOS-II\Source\os_time.c
(0001) /*
(0002) *********************************************************************************************************
(0003) *                                                uC/OS-II
(0004) *                                          The Real-Time Kernel
(0005) *                                             TIME MANAGEMENT
(0006) *
(0007) *                  

⌨️ 快捷键说明

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