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

📄 os-task-sem.lst

📁 ucos-ii-at90S-icc-avr
💻 LST
📖 第 1 页 / 共 5 页
字号:
    008F 9059      LD	R5,Y+
    0090 9049      LD	R4,Y+
    0091 9039      LD	R3,Y+
    0092 9029      LD	R2,Y+
    0093 9019      LD	R1,Y+
    0094 9009      LD	R0,Y+
(0227) 
(0228)                 POPSP                               ; Restore stack pointer
(0229)                 POPSREG                             ; Restore status register
(0230)                 POPRS                               ; Restore all registers 
(0231)                 RET
    0095 9508      RET
_OSTickISR:
    0096 D551      RCALL	0x05E8
(0232) 
(0233) _OSTickISR::    
(0234)                 PUSHRS                              ; Save interrupted task's context
(0235) 
(0236)                 IN      R16,SREG
(0237)                 SBR     R16,0x80                    ; Set interrupt bit in status reg and save
    0097 6800      ORI	R16,0x80
(0238)                 ST      -Y,R16
    0098 930A      ST	R16,-Y
(0239) ;                PUSHSP
(0240) 
(0241) ;avr-gcc ->11059200
(0242)                 LDI     R16,256-(8000000/50/1024)   ; Reload timer to overflow at a rate of 50Hz
    0099 E604      LDI	R16,0x64
(0243)                 OUT     TCNT0,R16                   ; at a prescaler of 1024 and 7.3728 MHz AVR clock
    009A BF02      OUT	P32,R16
(0244) 
(0245)                 LDS     R16,_OSIntNesting            ; Notify uC/OS-II of ISR
    009B 91000202  LDS	R16,_OSIntNesting
(0246)                 INC     R16                         ;
    009D 9503      INC	R16
(0247)                 STS     _OSIntNesting,R16            ;
    009E 93000202  STS	R16,_OSIntNesting
(0248) 	
(0249) ;why?
(0250) ;                SEI                                 ; Enable interrupts
(0251)                 RCALL   _OSTimeTick                  ; RCALL uC/OS-II's tick updating function
    00A0 D1D8      RCALL	_OSTimeTick
(0252)                 RCALL   _OSIntExit                   ; Notify uC/OS-II about end of ISR
    00A1 D1FA      RCALL	_OSIntExit
    00A2 9109      LD	R16,Y+
    00A3 BF0F      OUT	P3F,R16
    00A4 91F9      LD	R31,Y+
    00A5 91E9      LD	R30,Y+
    00A6 91B9      LD	R27,Y+
    00A7 91A9      LD	R26,Y+
    00A8 9199      LD	R25,Y+
    00A9 9189      LD	R24,Y+
    00AA 9179      LD	R23,Y+
    00AB 9169      LD	R22,Y+
    00AC 9159      LD	R21,Y+
    00AD 9149      LD	R20,Y+
    00AE 9139      LD	R19,Y+
    00AF 9129      LD	R18,Y+
    00B0 9119      LD	R17,Y+
    00B1 9109      LD	R16,Y+
    00B2 90F9      LD	R15,Y+
    00B3 90E9      LD	R14,Y+
    00B4 90D9      LD	R13,Y+
    00B5 90C9      LD	R12,Y+
    00B6 90B9      LD	R11,Y+
    00B7 90A9      LD	R10,Y+
    00B8 9099      LD	R9,Y+
    00B9 9089      LD	R8,Y+
    00BA 9079      LD	R7,Y+
    00BB 9069      LD	R6,Y+
    00BC 9059      LD	R5,Y+
    00BD 9049      LD	R4,Y+
    00BE 9039      LD	R3,Y+
    00BF 9029      LD	R2,Y+
    00C0 9019      LD	R1,Y+
    00C1 9009      LD	R0,Y+
(0253) 
(0254) ;                POPSP
(0255)                 POPSREG                             ; Restore status register
(0256)                 POPRS                               ; Restore all registers
(0257) ;		SEI
(0258) 		RET			; Note: RET instead of RETI
    00C2 9508      RET
(0259) 
(0260) ;*******************************************************************************
(0261) ;               INTERRUPT LEVEL CONTEXT SWITCH
(0262) ;
(0263) ; Description : This function is called by OSIntExit() to perform a context
(0264) ; switch to a task that has been made ready-to-run by an ISR.
(0265) ;
(0266) ; Note(s):
(0267) ;	1) Upon entry,
(0268) ;		OSTCBCur     points to the OS_TCB of the task to suspend
(0269) ;		OSTCBHighRdy points to the OS_TCB of the task to resume
(0270) ;
(0271) ;	2) The stack frame of the task to suspend looks as follows:
(0272) ;
(0273) ;		SP	+0 --> LSB of return address of OSIntCtxSw()   (Low memory)
(0274) ;			+1     MSB of return address of OSIntCtxSw()
(0275) ;			+2     LSB of return address of OSIntExit()
(0276) ;			+3     MSB of return address of OSIntExit()
(0277) ;			+4     LSB of task code address
(0278) ;			+5     MSB of task code address		(High memory)
(0279) ;
(0280) ;	3) The saved context of the task to resume looks as follows:
(0281) ;
(0282) ;		OSTCBHighRdy->OSTCBStkPtr --> 	LSB of (return) stack pointer (Low mem)
(0283) ;										MSB of (return) stack pointer
(0284) ;										Flags to load in status register
(0285) ;										R31
(0286) ;										R30
(0287) ;										R7
(0288) ;										.
(0289) ;										.
(0290) ;										.
(0291) ;										R0		(High memory)
(0292) ;*******************************************************************************
(0293) 
(0294) _OSIntCtxSw::
(0295) 		IN      R30,SPL				; Z = SP
_OSIntCtxSw:
    00C3 B7ED      IN	R30,P3D
(0296) 		IN      R31,SPH
    00C4 B7FE      IN	R31,P3E
(0297) 	;	ADIW    R30,4	; (Uncomment if OS_CRITICAL_METHOD is 1, see OS_CPU.H)
(0298) 		ADIW    R30,5				; Adjust Z to point to task return address
    00C5 9635      ADIW	R30,5
(0299) 		ST      -Y,R31				; Save SP
    00C6 93FA      ST	R31,-Y
(0300) 		ST      -Y,R30				;
    00C7 93EA      ST	R30,-Y
    00C8 D545      RCALL	0x060E
(0301) 
(0302) 		LDS     R30,_OSTCBCur                ; Z = OSTCBCur->OSTCBStkPtr
(0303)         LDS     R31,_OSTCBCur+1              ;
(0304)         ST      Z+,R28                      ; Save Y pointer
    00C9 93C1      ST	R28,Z+
(0305)         ST      Z+,R29                      ;
    00CA 93D1      ST	R29,Z+
(0306) 
(0307)         LDS     R16,_OSPrioHighRdy           ; OSPrioCur = OSPrioHighRdy
    00CB 910001FF  LDS	R16,_OSPrioHighRdy
(0308)         STS     _OSPrioCur,R16               ;
    00CD 93000200  STS	R16,_OSPrioCur
    00CF D580      RCALL	0x0650
(0309) 
(0310)         LDS     R30,_OSTCBHighRdy            ; Z = OSTCBHighRdy->OSTCBStkPtr
(0311)         LDS     R31,_OSTCBHighRdy+1          ;
(0312)         STS     _OSTCBCur,R30                ; OSTCBCur = OSTCBHighRdy
    00D0 93E001FD  STS	R30,_OSTCBCur
(0313)         STS     _OSTCBCur+1,R31              ;
    00D2 93F001FE  STS	R31,_OSTCBCur+1
(0314) 
(0315)         LD      R28,Z+                      ; Restore Y pointer
    00D4 91C1      LD	R28,Z+
(0316)         LD      R29,Z+                      ;
    00D5 91D1      LD	R29,Z+
    00D6 9109      LD	R16,Y+
    00D7 BF0D      OUT	P3D,R16
    00D8 9109      LD	R16,Y+
    00D9 BF0E      OUT	P3E,R16
    00DA 9109      LD	R16,Y+
    00DB BF0F      OUT	P3F,R16
    00DC 91F9      LD	R31,Y+
    00DD 91E9      LD	R30,Y+
    00DE 91B9      LD	R27,Y+
    00DF 91A9      LD	R26,Y+
    00E0 9199      LD	R25,Y+
    00E1 9189      LD	R24,Y+
    00E2 9179      LD	R23,Y+
    00E3 9169      LD	R22,Y+
    00E4 9159      LD	R21,Y+
    00E5 9149      LD	R20,Y+
    00E6 9139      LD	R19,Y+
    00E7 9129      LD	R18,Y+
    00E8 9119      LD	R17,Y+
    00E9 9109      LD	R16,Y+
    00EA 90F9      LD	R15,Y+
    00EB 90E9      LD	R14,Y+
    00EC 90D9      LD	R13,Y+
    00ED 90C9      LD	R12,Y+
    00EE 90B9      LD	R11,Y+
    00EF 90A9      LD	R10,Y+
    00F0 9099      LD	R9,Y+
    00F1 9089      LD	R8,Y+
    00F2 9079      LD	R7,Y+
    00F3 9069      LD	R6,Y+
    00F4 9059      LD	R5,Y+
    00F5 9049      LD	R4,Y+
    00F6 9039      LD	R3,Y+
    00F7 9029      LD	R2,Y+
    00F8 9019      LD	R1,Y+
    00F9 9009      LD	R0,Y+
(0317) 
(0318)                 POPSP                               ; Restore stack pointer
(0319)                 POPSREG                             ; Restore status register
(0320)                 POPRS                               ; Restore saved registers
(0321) ;               SEI
(0322)                 RET
    00FA 9508      RET
_main:
  err                  --> R20
    00FB 9727      SBIW	R28,7
FILE: G:\编程2002-10-15-HOME\做过的项目\2002-10-22\home-c\software\ucos-ii-at90S-icc-avr\os-task-sem\test1.c
(0001) //test1.c
(0002) #include "includes.h"
(0003) 
(0004) void main(void)
(0005) {
(0006)   INT8U err;
(0007) #if PROGRAM_START_FLASH_EN
(0008)   ProgramStart();
    00FC D383      RCALL	_ProgramStart
(0009) #endif
(0010)   OSInit();
    00FD D04C      RCALL	_OSInit
(0011) //create task1
(0012)   err=OSTaskCreate(&tcb_task1,task1,(void*)(int)1,
    00FE 2422      CLR	R2
    00FF 822E      STD	R2,6+Y
    0100 D554      RCALL	0x0655
    0101 EE88      LDI	R24,0xE8
    0102 E091      LDI	R25,1
    0103 838A      STD	R24,2+Y
    0104 839B      STD	R25,3+Y
    0105 E081      LDI	R24,1
    0106 E090      LDI	R25,0
    0107 8388      STD	R24,0+Y
    0108 8399      STD	R25,1+Y
    0109 E12E      LDI	R18,0x1E
    010A E030      LDI	R19,0
    010B EF05      LDI	R16,0xF5
    010C E011      LDI	R17,1
    010D D059      RCALL	_OSTaskCreate
    010E 2F40      MOV	R20,R16
(0013)                    &stk_task1[OS_TASK_STACK_SIZE-1],
(0014) 				   OS_TASK_STACK_SIZE,
(0015) 				   0);
(0016) #if OS_STRICT
(0017)   if(OS_NO_ERR!=err) 
    010F 2300      TST	R16
    0110 F011      BEQ	0x0113
(0018)     OSError(0);
    0111 2700      CLR	R16
    0112 D37E      RCALL	_OSError
(0019) #endif
(0020) //create task2
(0021)   err=OSTaskCreate(&tcb_task2,task2,(void*)(int)2,
    0113 E081      LDI	R24,1
    0114 838E      STD	R24,6+Y
    0115 D53F      RCALL	0x0655
    0116 E688      LDI	R24,0x68
    0117 E091      LDI	R25,1
    0118 838A      STD	R24,2+Y
    0119 839B      STD	R25,3+Y
    011A E082      LDI	R24,2
    011B E090      LDI	R25,0
    011C 8388      STD	R24,0+Y
    011D 8399      STD	R25,1+Y
    011E E12C      LDI	R18,0x1C
    011F E030      LDI	R19,0
    0120 EE0F      LDI	R16,0xEF
    0121 E011      LDI	R17,1
    0122 D044      RCALL	_OSTaskCreate
    0123 2F40      MOV	R20,R16
(0022)                    &stk_task2[OS_TASK_STACK_SIZE-1],
(0023) 				   OS_TASK_STACK_SIZE,
(0024) 				   1);
(0025) #if OS_STRICT
(0026)   if(OS_NO_ERR!=err) 
    0124 2300      TST	R16
    0125 F011      BEQ	0x0128
(0027)     OSError(0);
    0126 2700      CLR	R16
    0127 D369      RCALL	_OSError
(0028) #endif
(0029) 
(0030) //create task3
(0031)   err=OSTaskCreate(&tcb_task3,task3,(void*)(int)3,
    0128 E082      LDI	R24,2
    0129 838E      STD	R24,6+Y
    012A D52A      RCALL	0x0655
    012B EE88      LDI	R24,0xE8
    012C E090      LDI	R25,0
    012D 838A      STD	R24,2+Y
    012E 839B      STD	R25,3+Y
    012F E083      LDI	R24,3
    0130 E090      LDI	R25,0
    0131 8388      STD	R24,0+Y
    0132 8399      STD	R25,1+Y
    0133 E12A      LDI	R18,0x1A
    0134 E030      LDI	R19,0
    0135 EE09      LDI	R16,0xE9
    0136 E011      LDI	R17,1
    0137 D02F      RCALL	_OSTaskCreate
    0138 2F40      MOV	R20,R16
(0032)                    &stk_task3[OS_TASK_STACK_SIZE-1],
(0033) 				   OS_TASK_STACK_SIZE,
(0034) 				   2);
(0035) #if OS_STRICT
(0036)   if(OS_NO_ERR!=err) 
    0139 2300      TST	R16
    013A F011      BEQ	0x013D
(0037)     OSError(0);
    013B 2700      CLR	R16
    013C D354      RCALL	_OSError
(0038) #endif
(0039) 
(0040) #if OS_SEM_EN
(0041)   OSSemCreate(&uart_sem,1);
    013D E021      LDI	R18,1
    013E E030      LDI	R19,0
    013F E600      LDI	R16,0x60
    0140 E010      LDI	R17,0
    0141 D232      RCALL	_OSSemCreate
(0042) #if LCD_EN
(0043)   lcd_init();
(0044)   lcd_puts("hi,sem test!");
(0045) #if DEBUG_IN_AVR_STUDIO==0
(0046)   Delay();
(0047) #endif
(0048)   lcd_clear();
(0049) #endif//LCD_EN
(0050) #endif//OS_SEM_EN
(0051) //////////
(0052)   TC2_Init();
    0142 D308      RCALL	_TC2_Init
(0053)   SEI();
    0143 9478      BSET	7
(0054)   OSStart();		// start multitasking
    0144 D0CA      RCALL	_OSStart
(0055)   
(0056) #if OS_STRICT
(0057)   OSError(0);
    0145 2700      CLR	R16
    0146 D34A      RCALL	_OSError
(0058) #endif
(0059)   while(1)
    0147 CFFF      RJMP	0x0147
(0060)     ;
(0061) }
    0148 9627      ADIW	R28,7
    0149 9508      RET
FILE: G:\编程2002-10-15-HOME\做过的项目\2002-10-22\home-c\software\ucos-ii-at90S-icc-avr\os-task-sem\os-task-switch.c
(0001) //os主要代码
(0002) #define  OS_GLOBALS                           /* Declare GLOBAL variables                              */
(0003) #include "includes.h"
(0004) 
(0005) #define  OS_MASTER_FILE                       /* Prevent the following files from including includes.h */
(0006) 
(0007) void        OSInit(void)
(0008) {
(0009)   INT8U i;

⌨️ 快捷键说明

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