📄 app.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 + -