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

📄 ucos_ii.lst

📁 ucos-ii-at90S-icc-avr
💻 LST
📖 第 1 页 / 共 5 页
字号:
    017B EF8F      LDI	R24,0xFF
    017C BB8A      OUT	P1A,R24
(0129)   DDRB = 0xff;
    017D BB87      OUT	P17,R24
(0130)   PORTA=0;
    017E 2422      CLR	R2
    017F BA2B      OUT	P1B,R2
(0131)   PORTB=0;
    0180 BA28      OUT	P18,R2
(0132)   Delay_error(DELAY_COUNT);
    0181 E00A      LDI	R16,0xA
    0182 E010      LDI	R17,0
    0183 DFBF      RCALL	_Delay_error
(0133)   DDRA = 0xff;
    0184 EF8F      LDI	R24,0xFF
    0185 BB8A      OUT	P1A,R24
(0134)   DDRB = 0xff;
    0186 BB87      OUT	P17,R24
(0135)   PORTA=0xff;
    0187 BB8B      OUT	P1B,R24
(0136)   PORTB=0xff;
    0188 BB88      OUT	P18,R24
(0137)   Delay_error(DELAY_COUNT);
    0189 E00A      LDI	R16,0xA
    018A E010      LDI	R17,0
    018B DFB7      RCALL	_Delay_error
    018C 5F4F      SUBI	R20,0xFF
    018D 4F5F      SBCI	R21,0xFF
    018E 1746      CP	R20,R22
    018F 0757      CPC	R21,R23
    0190 F354      BLT	0x017B
(0138)  }
(0139)  OS_EXIT_CRITICAL();
    0191 930A      ST	R16,-Y
    0192 910F      POP	R16
    0193 BF0F      OUT	P3F,R16
    0194 9109      LD	R16,Y+
(0140) }
    0195 D800      RCALL	pop_gset2
    0196 9508      RET
(0141) 
(0142) /*
(0143) ********************************************************************************
(0144) *                       TASK SWITCH HOOK
(0145) *
(0146) * Description:
(0147) *	This function is called when a task switch is performed.  This allows you to
(0148) *	perform other operations during a context switch.
(0149) *
(0150) * Arguments:	none
(0151) *
(0152) * Note(s):
(0153) *	1) Interrupts are disabled during this call.
(0154) *	2) It is assumed that the global pointer 'OSTCBHighRdy' points to the TCB
(0155) *		of the task that will be 'switched in' (i.e. the highest priority task)
(0156) *		and, 'OSTCBCur' points to the task being switched out (i.e. the 
(0157) *		preempted task).
(0158) ********************************************************************************
(0159) */
(0160) void OSTaskSwHook (void)
(0161) {
(0162) }
_OSTaskSwHook:
    0197 9508      RET
_main:
    0198 9723      SBIW	R28,3
FILE: G:\编程2002-10-15-HOME\做过的项目\2002-10-22\home-c\software\ucos-ii-at90S-icc-avr\ucos-ii-source\test1.c
(0001) /*
(0002) */
(0003) #define Test1_GLOBALS
(0004) #include "includes.h"
(0005) 
(0006) //******************************************************************************
(0007) // Variablen
(0008) OS_STK	Task2Stack[OS_TASK_DEF_STK_SIZE];		// startup task stack
(0009) OS_STK	Task3Stack[OS_TASK_DEF_STK_SIZE];	
(0010) 
(0011) //*****************************************************************************
(0012) // Prototypes
(0013) void Task2(void *pdata);
(0014) void Task3(void *pdata);
(0015) //*****************************************************************************
(0016) 
(0017) //*****************************************************************************
(0018) // Interrupt Timer/Counter0 Overflow
(0019) // OVF_Takt:  4MHz / 1024 / 39 = 10ms
(0020) #pragma interrupt_handler OSTickISR:8
(0021) //#pragma interrupt_handler test_OSTickISR0:8
(0022) 
(0023) void main()
(0024) { 
(0025)   CLI();//close interrupt
    0199 94F8      BCLR	7
(0026)   ProgramRest(FLASH_WHEN_RESET);
    019A E003      LDI	R16,3
    019B E010      LDI	R17,0
    019C DFAB      RCALL	_ProgramRest
(0027)   OSInit();		// OS init
    019D D25D      RCALL	_OSInit
(0028) //check OSTCBFreeList;
(0029)   if(OSRunning || (0==OSTCBFreeList))//stack destroyed
    019E 90200204  LDS	R2,_OSRunning
    01A0 2022      TST	R2
    01A1 F441      BNE	0x01AA
    01A2 902001FF  LDS	R2,_OSTCBFreeList
    01A4 90300200  LDS	R3,_OSTCBFreeList+1
    01A6 2022      TST	R2
    01A7 F419      BNE	0x01AB
    01A8 2033      TST	R3
    01A9 F409      BNE	0x01AB
(0030)     goto OSTASKCREATE_ERROR;  
    01AA C02C      RJMP	0x01D7
(0031)   
(0032)   if(OS_NO_ERR!=OSTaskCreate(Task2,
    01AB E082      LDI	R24,2
    01AC 838A      STD	R24,2+Y
    01AD E780      LDI	R24,0x70
    01AE E091      LDI	R25,1
    01AF 8388      STD	R24,0+Y
    01B0 8399      STD	R25,1+Y
    01B1 E322      LDI	R18,0x32
    01B2 E030      LDI	R19,0
    01B3 E10C      LDI	R16,0x1C
    01B4 E010      LDI	R17,0
    01B5 D5E4      RCALL	_OSTaskCreate
    01B6 2300      TST	R16
    01B7 F009      BEQ	0x01B9
(0033)               (void *)(int)'2',
(0034)               &Task2Stack[OS_TASK_DEF_STK_SIZE-1],
(0035)               TaskStartPrio))
(0036)     goto OSTASKCREATE_ERROR;
    01B8 C01E      RJMP	0x01D7
(0037) 
(0038)   if(OSRunning || (0==OSTCBFreeList))//stack destroyed
    01B9 90200204  LDS	R2,_OSRunning
    01BB 2022      TST	R2
    01BC F441      BNE	0x01C5
    01BD 902001FF  LDS	R2,_OSTCBFreeList
    01BF 90300200  LDS	R3,_OSTCBFreeList+1
    01C1 2022      TST	R2
    01C2 F419      BNE	0x01C6
    01C3 2033      TST	R3
    01C4 F409      BNE	0x01C6
(0039)     goto OSTASKCREATE_ERROR;
    01C5 C011      RJMP	0x01D7
(0040) 
(0041)   if(OS_NO_ERR!=OSTaskCreate(Task3,
    01C6 E083      LDI	R24,3
    01C7 838A      STD	R24,2+Y
    01C8 E080      LDI	R24,0
    01C9 E091      LDI	R25,1
    01CA 8388      STD	R24,0+Y
    01CB 8399      STD	R25,1+Y
    01CC E323      LDI	R18,0x33
    01CD E030      LDI	R19,0
    01CE E10A      LDI	R16,0x1A
    01CF E010      LDI	R17,0
    01D0 D5C9      RCALL	_OSTaskCreate
    01D1 2300      TST	R16
    01D2 F009      BEQ	0x01D4
(0042)               (void *)(int)'3',
(0043)               &Task3Stack[OS_TASK_DEF_STK_SIZE-1],
(0044)               TaskStartPrio+1))
(0045)     goto OSTASKCREATE_ERROR;
    01D3 C003      RJMP	0x01D7
(0046)                 
(0047)   TC2_Init();
    01D4 D0B4      RCALL	_TC2_Init
(0048)   
(0049)   SEI();
    01D5 9478      BSET	7
(0050)   //check OSTCBCur
(0051)   //if(0==OSTCBCur)goto OSTASKCREATE_ERROR;
(0052)   OSStart();		// start multitasking
    01D6 D36F      RCALL	_OSStart
(0053)   //error
(0054) OSTASKCREATE_ERROR:
(0055)   //dead loop
(0056)   ProgramError();
    01D7 DF92      RCALL	_ProgramError
(0057) }
    01D8 9623      ADIW	R28,3
    01D9 9508      RET
_Task2:
  data                 --> R20
    01DA D79B      RCALL	push_gset1
    01DB D99C      RCALL	0x0B78
(0058) 
(0059) //*****************************************************************************
(0060) void Task2(void *data){
(0061)   Task2_porta(data);
    01DC D002      RCALL	_Task2_porta
(0062) }
    01DD D79B      RCALL	pop_gset1
    01DE 9508      RET
_Task2_porta:
  j                    --> R20
  i                    --> R22
  data                 --> R10
    01DF D7B0      RCALL	push_gset3
    01E0 2EA0      MOV	R10,R16
    01E1 2EB1      MOV	R11,R17
(0063) void Task2_porta(void *data){
(0064)   INT8U i,j=0;
    01E2 2744      CLR	R20
(0065)   DDRA=0xff;
    01E3 EF8F      LDI	R24,0xFF
    01E4 BB8A      OUT	P1A,R24
    01E5 C005      RJMP	0x01EB
(0066)   while(1)
(0067)   {
(0068)     i++;
    01E6 9563      INC	R22
(0069)     PORTA=i;
    01E7 BB6B      OUT	P1B,R22
(0070)   	OSTimeDly(10);
    01E8 E00A      LDI	R16,0xA
    01E9 E010      LDI	R17,0
    01EA D666      RCALL	_OSTimeDly
    01EB CFFA      RJMP	0x01E6
(0071)   }
(0072) }
    01EC D7AB      RCALL	pop_gset3
    01ED 9508      RET
_Task3:
  i                    --> R20
  j                    --> R22
  k                    --> R10
  data                 --> R20
    01EE D7A1      RCALL	push_gset3
    01EF 2F40      MOV	R20,R16
    01F0 2F51      MOV	R21,R17
(0073) 
(0074) void Task3(void *data){
    01F1 C014      RJMP	0x0206
(0075)   unsigned char i,j,k;
(0076)   while(1)
(0077)   {
(0078)   DDRC=0xff;
    01F2 EF8F      LDI	R24,0xFF
    01F3 BB84      OUT	P14,R24
(0079)   SEI();
    01F4 9478      BSET	7
(0080)   for(i=0;i<8;i++)
    01F5 2744      CLR	R20
    01F6 C00D      RJMP	0x0204
(0081)   {
(0082)     j=1;
    01F7 E061      LDI	R22,1
(0083)     for(k=0;k<=i;k++)
    01F8 24AA      CLR	R10
    01F9 C002      RJMP	0x01FC
(0084) 	  j*=2;
    01FA 0F66      LSL	R22
    01FB 94A3      INC	R10
    01FC 154A      CP	R20,R10
    01FD F7E0      BCC	0x01FA
(0085) 	asm("com %j");
    01FE 9560      COM	R22
(0086) 	PORTC=j;
    01FF BB65      OUT	P15,R22
(0087) 	OSTimeDly(10);
    0200 E00A      LDI	R16,0xA
    0201 E010      LDI	R17,0
    0202 D64E      RCALL	_OSTimeDly
    0203 9543      INC	R20
    0204 3048      CPI	R20,0x8
    0205 F388      BCS	0x01F7
    0206 CFEB      RJMP	0x01F2
(0088)   }
(0089)   }
(0090) }
    0207 D790      RCALL	pop_gset3
    0208 9508      RET
_OSTaskStkInit:
  stks                 --> R10
  tmp                  --> R22
  stk                  --> R20
  opt                  --> Y+10
  ptos                 --> Y+8
  pdata                --> R12
  task                 --> R22
    0209 D789      RCALL	push_gset4
    020A 2EC2      MOV	R12,R18
    020B 2ED3      MOV	R13,R19
    020C 2F60      MOV	R22,R16
    020D 2F71      MOV	R23,R17
FILE: G:\编程2002-10-15-HOME\做过的项目\2002-10-22\home-c\software\ucos-ii-at90S-icc-avr\ucos-ii-source\os_cpu_c.c
(0001) /*
(0002) ********************************************************************************
(0003) *                               uC/OS-II
(0004) *                          The Real-Time Kernel
(0005) * 
(0006) *                         AT90 Specific code
(0007) *
(0008) * File:			OS_CPU_C.C
(0009) * By:			
(0010) * Modified by:
(0011) * Revision:	
(0012) *
(0013) *
(0014) *
(0015) ********************************************************************************
(0016) */
(0017) 
(0018) #define  OS_CPU_GLOBALS
(0019) #include "includes.h"
(0020) 
(0021) /*
(0022) ********************************************************************************
(0023) *                     INITIALIZE A TASK'S STACK
(0024) *
(0025) * Description:
(0026) *	This function is called by either OSTaskCreate() or OSTaskCreateExt() to
(0027) *	initialize the stack frame of the task being created. This function is
(0028) *	highly processor specific.
(0029) *
(0030) * Arguments:
(0031) *	task - 	is a pointer to the task code
(0032) *
(0033) *	pdata -	is a pointer to a user supplied data area that will be passed to the
(0034) *			 task when the task first executes.
(0035) *
(0036) *	ptos - 	is a pointer to the top of stack. It is assumed that 'ptos' points to
(0037) *			the highest valid address on the stack.
(0038) *
(0039) *	opt - 	specifies options that can be used to alter the behavior of 
(0040) 			OSTaskStkInit(). (see uCOS_II.H for OS_TASK_OPT_???).
(0041) *
(0042) * Returns:
(0043) *	Always returns the location of the new top-of-stack' once the processor 
(0044) *	registers have been placed on the stack in the proper order.
(0045) *
(0046) * Note(s):
(0047) *	Interrupts are enabled when your task starts executing. You can change this 
(0048) * 	by setting the SREG to 0x00 instead. In this case, interrupts would be 
(0049) *	disabled upon task startup. The application code would be responsible for 
(0050) *	enabling interrupts at the beginning of the task code. You will need to 
(0051) *	modify OSTaskIdle() and OSTaskStat() so that they enable interrupts. Failure
(0052) *	to do this will make your system crash! The AVR return stack is placed 64 
(0053) *	bytes above the start of the (512 byte) stack. This provides 32 levels of 
(0054) *	function call nesting which should be more than enough for most applications
(0055) *	(see the "read.me" file for more info).
(0056) *
(0057) ********************************************************************************
(0058) */
(0059) OS_STK *OSTaskStkInit (void (*task)(void *pd),
(0060) 						 void *pdata, OS_STK *ptos, INT16U opt){
(0061) 
(0062)     INT8U  *stk;
(0063)     INT8U  *stks;		// Temp. variable used for setting up AVR hardware stack
(0064)     INT16U tmp;
(0065) 
(0066) 
(0067)     opt     = opt;			// 'opt' is not used, prevent warning
(0068)     stk     = (INT8U *)ptos;		// Wandlung von ptos in Bytezeiger
    020E 8548      LDD	R20,8+Y
    020F 8559      LDD	R21,9+Y
(0069) 	// AVR return stack ("hardware stack")
(0070)     //from IAR C
(0071)     //stks    = (INT8U *)(ptos)-(OS_TASK_DEF_STK_SIZE-64);/* AVR return stack ("hardware stack")          */
(0072)     //from ICC AVR C
(0073)     //stks    = (INT8U *)(ptos)-(OS_TASK_DEF_STK_SIZE-32);

⌨️ 快捷键说明

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