📄 app.lis
字号:
.module app.c
.area vector(rom, abs)
.org 64
0040 0C940000 jmp _OSTickISR
.area text(rom, con, rel)
; temp -> R20,R21
.even
0000 _TaskS::
0000 0E940000 xcall push_gset1
0004 A801 movw R20,R16
0006 2397 sbiw R28,3
0008 ; #include <ucos_ii.h> /*头文件统一包含*/
0008 ;
0008 ; OS_STK TaskSSTK[OS_TASK_STK_SIZE]; /*定义任务堆栈*/
0008 ; OS_STK Task1STK[OS_TASK_STK_SIZE];
0008 ; OS_STK Task2STK[OS_TASK_STK_SIZE];
0008 ;
0008 ; void io_init(void);
0008 ; void TaskS(void *temp); /*声明任务*/
0008 ; void Task1(void *temp);
0008 ; void Task2(void *temp);
0008 ;
0008 ; /*启动任务,负责后续任务的初始化工作*/
0008 ; void TaskS (void *temp) {
0008 ;
0008 ; OSTickISR_Init();
0008 5FD0 xcall _OSTickISR_Init
000A ; io_init();
000A 49D0 xcall _io_init
000C ;
000C ; OSTaskCreate(Task1, (void *)0, (OS_STK *)&Task1STK[OS_TASK_STK_SIZE - 1], 1);
000C 81E0 ldi R24,1
000E 8A83 std y+2,R24
0010 80E0 ldi R24,<_Task1STK+127
0012 90E0 ldi R25,>_Task1STK+127
0014 9983 std y+1,R25
0016 8883 std y+0,R24
0018 2227 clr R18
001A 3327 clr R19
001C 00E0 ldi R16,<PL_Task1
001E 10E0 ldi R17,>PL_Task1
0020 0E940000 xcall _OSTaskCreate
0024 ; OSTaskCreate(Task2, (void *)0, (OS_STK *)&Task2STK[OS_TASK_STK_SIZE - 1], 2);
0024 82E0 ldi R24,2
0026 8A83 std y+2,R24
0028 80E0 ldi R24,<_Task2STK+127
002A 90E0 ldi R25,>_Task2STK+127
002C 9983 std y+1,R25
002E 8883 std y+0,R24
0030 2227 clr R18
0032 3327 clr R19
0034 00E0 ldi R16,<PL_Task2
0036 10E0 ldi R17,>PL_Task2
0038 0E940000 xcall _OSTaskCreate
003C 0BC0 xjmp L5
003E L4:
003E 80E8 ldi R24,128
0040 90E0 ldi R25,0
0042 28B2 in R2,0x18
0044 3324 clr R3
0046 2826 eor R2,R24
0048 3926 eor R3,R25
004A 28BA out 0x18,R2
004C 0AE0 ldi R16,10
004E 10E0 ldi R17,0
0050 0E940000 xcall _OSTimeDly
0054 L5:
0054 ;
0054 ; while (1) {
0054 F4CF xjmp L4
0056 X0:
0056 L1:
0056 2396 adiw R28,3
0058 0E940000 xcall pop_gset1
005C .dbline 0 ; func end
005C 0895 ret
005E ; temp -> R20,R21
.even
005E _Task1::
005E 0E940000 xcall push_gset1
0062 A801 movw R20,R16
0064 ; PORTB ^= (1 << PB7);
0064 ; OSTimeDly(10);
0064 ; }
0064 ; }
0064 ;
0064 ; /*任务1,LD0指示闪烁*/
0064 ; void Task1(void *temp) {
0064 ;
0064 ; temp = temp;
0064 08C0 xjmp L9
0066 L8:
0066 81E0 ldi R24,1
0068 28B2 in R2,0x18
006A 2826 eor R2,R24
006C 28BA out 0x18,R2
006E 04E1 ldi R16,20
0070 10E0 ldi R17,0
0072 0E940000 xcall _OSTimeDly
0076 L9:
0076 ; while (1) {
0076 F7CF xjmp L8
0078 X1:
0078 L7:
0078 0E940000 xcall pop_gset1
007C .dbline 0 ; func end
007C 0895 ret
007E ; temp -> R20,R21
.even
007E _Task2::
007E 0E940000 xcall push_gset1
0082 A801 movw R20,R16
0084 ; PORTB ^= (1 << PB0);
0084 ; OSTimeDly(20);
0084 ; }
0084 ; }
0084 ;
0084 ; /*任务2,LD1指示闪烁*/
0084 ; void Task2(void *temp) {
0084 ;
0084 ; temp = temp;
0084 08C0 xjmp L13
0086 L12:
0086 82E0 ldi R24,2
0088 28B2 in R2,0x18
008A 2826 eor R2,R24
008C 28BA out 0x18,R2
008E 0EE1 ldi R16,30
0090 10E0 ldi R17,0
0092 0E940000 xcall _OSTimeDly
0096 L13:
0096 ; while (1) {
0096 F7CF xjmp L12
0098 X2:
0098 L11:
0098 0E940000 xcall pop_gset1
009C .dbline 0 ; func end
009C 0895 ret
.even
009E _io_init::
009E ; PORTB ^= (1 << PB1);
009E ; OSTimeDly(30);
009E ; }
009E ; }
009E ;
009E ; /*IO口初始化函数*/
009E ; void io_init(void) {
009E ;
009E ; DDRA = 0x00; /*方向输入*/
009E 2224 clr R2
00A0 2ABA out 0x1a,R2
00A2 ; PORTA = 0xFF; /*打开上拉*/
00A2 8FEF ldi R24,255
00A4 8BBB out 0x1b,R24
00A6 ; DDRB = 0xFF; /*方向输出*/
00A6 87BB out 0x17,R24
00A8 ; PORTB = 0xFF; /*高电平*/
00A8 88BB out 0x18,R24
00AA ; DDRC = 0x00; /*不用的IO口建议设置为输入带上拉*/
00AA 24BA out 0x14,R2
00AC ; PORTC = 0xFF;
00AC 85BB out 0x15,R24
00AE ; DDRD = 0x00;
00AE 21BA out 0x11,R2
00B0 ; PORTD = 0xFF;
00B0 82BB out 0x12,R24
00B2 ; DDRE = 0x00;
00B2 22B8 out 0x2,R2
00B4 ; PORTE = 0xFF;
00B4 83B9 out 0x3,R24
00B6 ; DDRF = 0x00;
00B6 20926100 sts 97,R2
00BA ; PORTF = 0xFF;
00BA 80936200 sts 98,R24
00BE ; DDRG = 0x00;
00BE 20926400 sts 100,R2
00C2 ; PORTG = 0xFF;
00C2 80936500 sts 101,R24
00C6 L15:
00C6 .dbline 0 ; func end
00C6 0895 ret
.even
00C8 _OSTickISR_Init::
00C8 ; }
00C8 ;
00C8 ; void OSTickISR_Init (void) {
00C8 ;
00C8 ; TCCR0 = (1 << CS00) | (1 << CS01) | (1 << CS02); /*设置时钟分频为1024 */
00C8 87E0 ldi R24,7
00CA 83BF out 0x33,R24
00CC ; TIMSK = (1 << TOIE0); /*打开溢出中断 */
00CC 81E0 ldi R24,1
00CE 87BF out 0x37,R24
00D0 L16:
00D0 .dbline 0 ; func end
00D0 0895 ret
.even
00D2 _OSTickISR_Handler::
00D2 ; }
00D2 ;
00D2 ; void OSTickISR_Handler (void) {
00D2 ;
00D2 ; TCNT0 = 256 - (CPU_CLK_FREQ / OS_TICKS_PER_SEC / 1024);
00D2 8CED ldi R24,220
00D4 82BF out 0x32,R24
00D6 ; OSTimeTick();
00D6 0E940000 xcall _OSTimeTick
00DA L17:
00DA .dbline 0 ; func end
00DA 0895 ret
.area bss(ram, con, rel)
0000 _Task2STK::
0000 .blkb 128
0080 _Task1STK::
0080 .blkb 128
0100 _TaskSSTK::
0100 .blkb 128
.area func_lit
0000 3F00 PL_Task2: .word `_Task2
0002 2F00 PL_Task1: .word `_Task1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -