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

📄 app.lis

📁 ucos在avr mega128上的移植
💻 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 + -