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

📄 app.s

📁 ucos在avr mega128上的移植
💻 S
字号:
	.module app.c
	.area vector(rom, abs)
	.org 64
	jmp _OSTickISR
	.area text(rom, con, rel)
;           temp -> R20,R21
	.even
_TaskS::
	xcall push_gset1
	movw R20,R16
	sbiw R28,3
; #include	<ucos_ii.h>									/*头文件统一包含*/
; 
; OS_STK TaskSSTK[OS_TASK_STK_SIZE];						/*定义任务堆栈*/
; OS_STK Task1STK[OS_TASK_STK_SIZE];
; OS_STK Task2STK[OS_TASK_STK_SIZE];
; 
; void io_init(void);
; void TaskS(void *temp);									/*声明任务*/
; void Task1(void *temp);
; void Task2(void *temp);
; 
; /*启动任务,负责后续任务的初始化工作*/
; void TaskS (void *temp) {
; 
;     OSTickISR_Init();
	xcall _OSTickISR_Init
;     io_init();
	xcall _io_init
;     
;     OSTaskCreate(Task1, (void *)0, (OS_STK *)&Task1STK[OS_TASK_STK_SIZE - 1], 1);
	ldi R24,1
	std y+2,R24
	ldi R24,<_Task1STK+127
	ldi R25,>_Task1STK+127
	std y+1,R25
	std y+0,R24
	clr R18
	clr R19
	ldi R16,<PL_Task1
	ldi R17,>PL_Task1
	xcall _OSTaskCreate
;     OSTaskCreate(Task2, (void *)0, (OS_STK *)&Task2STK[OS_TASK_STK_SIZE - 1], 2);
	ldi R24,2
	std y+2,R24
	ldi R24,<_Task2STK+127
	ldi R25,>_Task2STK+127
	std y+1,R25
	std y+0,R24
	clr R18
	clr R19
	ldi R16,<PL_Task2
	ldi R17,>PL_Task2
	xcall _OSTaskCreate
	xjmp L5
L4:
	ldi R24,128
	ldi R25,0
	in R2,0x18
	clr R3
	eor R2,R24
	eor R3,R25
	out 0x18,R2
	ldi R16,10
	ldi R17,0
	xcall _OSTimeDly
L5:
; 
;     while (1) {
	xjmp L4
X0:
L1:
	adiw R28,3
	xcall pop_gset1
	.dbline 0 ; func end
	ret
;           temp -> R20,R21
	.even
_Task1::
	xcall push_gset1
	movw R20,R16
; 		PORTB ^= (1 << PB7);
;         OSTimeDly(10);
;     }
; }
; 
; /*任务1,LD0指示闪烁*/
; void Task1(void *temp) {
; 	
; 	temp = temp;
	xjmp L9
L8:
	ldi R24,1
	in R2,0x18
	eor R2,R24
	out 0x18,R2
	ldi R16,20
	ldi R17,0
	xcall _OSTimeDly
L9:
; 	while (1) {
	xjmp L8
X1:
L7:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
;           temp -> R20,R21
	.even
_Task2::
	xcall push_gset1
	movw R20,R16
; 		PORTB ^= (1 << PB0);
; 		OSTimeDly(20);
; 		}
; }
; 
; /*任务2,LD1指示闪烁*/
; void Task2(void *temp) {
; 	
; 	temp = temp;
	xjmp L13
L12:
	ldi R24,2
	in R2,0x18
	eor R2,R24
	out 0x18,R2
	ldi R16,30
	ldi R17,0
	xcall _OSTimeDly
L13:
; 	while (1) {
	xjmp L12
X2:
L11:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.even
_io_init::
; 		PORTB ^= (1 << PB1);
; 		OSTimeDly(30);
; 		}
; }
; 
; /*IO口初始化函数*/
; void io_init(void) {
; 
; 	DDRA = 0x00;										/*方向输入*/
	clr R2
	out 0x1a,R2
; 	PORTA = 0xFF;										/*打开上拉*/
	ldi R24,255
	out 0x1b,R24
; 	DDRB = 0xFF;										/*方向输出*/
	out 0x17,R24
; 	PORTB = 0xFF;										/*高电平*/
	out 0x18,R24
; 	DDRC = 0x00;										/*不用的IO口建议设置为输入带上拉*/
	out 0x14,R2
; 	PORTC = 0xFF;
	out 0x15,R24
; 	DDRD = 0x00;
	out 0x11,R2
; 	PORTD = 0xFF;
	out 0x12,R24
; 	DDRE = 0x00;
	out 0x2,R2
; 	PORTE = 0xFF;
	out 0x3,R24
; 	DDRF = 0x00;
	sts 97,R2
; 	PORTF = 0xFF;
	sts 98,R24
; 	DDRG = 0x00;
	sts 100,R2
; 	PORTG = 0xFF;
	sts 101,R24
L15:
	.dbline 0 ; func end
	ret
	.even
_OSTickISR_Init::
; }
; 
; void OSTickISR_Init (void) {
; 
; 	TCCR0 = (1 << CS00) | (1 << CS01) | (1 << CS02);	/*设置时钟分频为1024							*/
	ldi R24,7
	out 0x33,R24
; 	TIMSK = (1 << TOIE0);								/*打开溢出中断									*/
	ldi R24,1
	out 0x37,R24
L16:
	.dbline 0 ; func end
	ret
	.even
_OSTickISR_Handler::
; }
; 
; void OSTickISR_Handler (void) {
; 
; 	TCNT0 = 256 - (CPU_CLK_FREQ / OS_TICKS_PER_SEC / 1024);
	ldi R24,220
	out 0x32,R24
; 	OSTimeTick();
	xcall _OSTimeTick
L17:
	.dbline 0 ; func end
	ret
	.area bss(ram, con, rel)
_Task2STK::
	.blkb 128
_Task1STK::
	.blkb 128
_TaskSSTK::
	.blkb 128
	.area func_lit
PL_Task2:	.word `_Task2
PL_Task1:	.word `_Task1

⌨️ 快捷键说明

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