📄 taskexcu.s
字号:
.module taskexcu.c
.area vector(rom, abs)
.org 16
jmp _OSTickISR
.area text(rom, con, rel)
.dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\21_uCOSII\taskexcu.c
.dbfunc e TC2_Init _TC2_Init fV
.even
_TC2_Init::
.dbline -1
.dbline 33
;
; #define Test1_GLOBALS
; #include "includes.h"
;
; #include <iom16v.h>
; #include <macros.h>
; #include <stdio.h>
; #include "prototype.h"
;
; #pragma interrupt_handler OSTickISR:5
;
; //******************************************************************************
; // Constants
; #define TaskStartPrio 10 // Task-Prioritaeten
; //*****************************************************************************
; // Variablen
; INT8U time[6];
; INT8U h,m,s,state;
; OS_STK Task1Stack[OS_TASK_DEF_STK_SIZE]; // startup task stack
; OS_STK Task2Stack[OS_TASK_DEF_STK_SIZE];
; //ICC-AVR application builder : 2003-12-28 21:52:56
; // Target : M8
; // Crystal: 8.0000Mhz
;
; //*****************************************************************************
; // Prototypes
;
; //*****************************************************************************
; // TickISR
; //*****************************************************************************
; // Init Timer/Counter2 fuer Takterzeugung
; void TC2_Init (void)
; {
.dbline 37
; /* Only uses TIMER2 overflow for tick interrupt. Timer compare
; * can also be used.
; */
; TIMSK &= ~(BIT(TOIE2)/* | BIT(OCIE2) */); //disable TC2 interrupts
in R24,0x39
andi R24,191
out 0x39,R24
.dbline 38
; TCCR2 = 0x48; // CTC
ldi R24,72
out 0x25,R24
.dbline 39
; TCNT2 = 0; // Counter ruecksetzen, 2ms @ 8MHz
clr R2
out 0x24,R2
.dbline 40
; TCCR2 |= 0x06; // 256
in R24,0x25
ori R24,6
out 0x25,R24
.dbline 41
; OCR2 = 250; // OutputCompareRegister
ldi R24,250
out 0x23,R24
.dbline 42
; TIMSK |= BIT(TOIE2); // enable OVF-interrupt
in R24,0x39
ori R24,64
out 0x39,R24
.dbline 45
; //TIMSK |= OCIE2; // enable COMP-interrupt
;
; SEI(); // enable global interrupt
sei
.dbline -2
.dbline 46
; }
L2:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
.even
_main::
sbiw R28,3
.dbline -1
.dbline 58
;
; //*****************************************************************************
; // Interrupt Timer/Counter0 Overflow
; // OVF_Takt: 8MHz / 256 / 250 = 125Hz (8ms)
;
; void Task1(void *pdata);
; void Task2(void *pdata);
;
; //*****************************************************************************
; // Start
; void main(void)
; {
.dbline 59
; OSInit(); // OS init
xcall _OSInit
.dbline 60
; OSTaskCreate(Task1,
ldi R24,7
std y+2,R24
ldi R24,<_Task1Stack+99
ldi R25,>_Task1Stack+99
std y+0,R24
std y+1,R25
clr R18
clr R19
ldi R16,<PL_Task1
ldi R17,>PL_Task1
xcall _OSTaskCreate
.dbline 64
; (void *)0,
; &Task1Stack[OS_TASK_DEF_STK_SIZE-1],
; 7);
; OSTaskCreate(Task2,
ldi R24,8
std y+2,R24
ldi R24,<_Task2Stack+99
ldi R25,>_Task2Stack+99
std y+0,R24
std y+1,R25
clr R18
clr R19
ldi R16,<PL_Task2
ldi R17,>PL_Task2
xcall _OSTaskCreate
.dbline 69
; (void *)0,
; &Task2Stack[OS_TASK_DEF_STK_SIZE-1],
; 8);
; // init und start tick
; TC2_Init(); // Timer/Counter#2 Overflow and Comp init
xcall _TC2_Init
.dbline 70
; Board_init();
xcall _Board_init
.dbline 71
; OSStart(); // start multitasking
xcall _OSStart
.dbline -2
.dbline 72
; }
L3:
adiw R28,3
.dbline 0 ; func end
ret
.dbend
.dbfunc e Task1 _Task1 fV
; i -> R20
; data -> R20,R21
.even
_Task1::
xcall push_gset1
movw R20,R16
.dbline -1
.dbline 76
;
; //*****************************************************************************
; void Task1(void *data)
; {
.dbline 78
; uchar i;
; data = data;
.dbline 79
; state = 1;
ldi R24,1
sts _state,R24
.dbline 80
; for (;;)
L7:
.dbline 81
; {
.dbline 82
; DS1302_getT(time);
ldi R16,<_time
ldi R17,>_time
xcall _DS1302_getT
.dbline 83
; for(i=0;i<3;i++)
clr R20
xjmp L14
L11:
.dbline 84
.dbline 85
ldi R24,2
mul R24,R20
ldi R24,<_time
ldi R25,>_time
movw R30,R0
add R30,R24
adc R31,R25
ldd R24,z+0
swap R24
andi R24,#0x0F
ldi R30,<_time+1
ldi R31,>_time+1
movw R26,R0
add R26,R30
adc R27,R31
st x,R24
.dbline 86
ldi R24,2
mul R24,R20
movw R2,R0
ldi R24,<_time
ldi R25,>_time
add R2,R24
adc R3,R25
movw R30,R2
ldd R24,z+0
andi R24,15
std z+0,R24
.dbline 87
L12:
.dbline 83
inc R20
L14:
.dbline 83
cpi R20,3
brlo L11
.dbline 88
ldi R16,<_time
ldi R17,>_time
xcall _All_smg_display
.dbline 89
ldi R16,1
ldi R17,0
xcall _OSTimeDly
.dbline 90
.dbline 80
.dbline 80
xjmp L7
X0:
.dbline -2
L6:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r data 20 pV
.dbend
.dbfunc e Task2 _Task2 fV
; i -> R20
; data -> R22,R23
.even
_Task2::
xcall push_gset2
movw R22,R16
.dbline -1
.dbline 93
; {
; time[i*2+1]=time[i*2]>>4;
; time[i*2]=time[i*2]&0x0F;
; }
; All_smg_display(time);
; OSTimeDly (1);
; }
; }
; void Task2(void *data)
; {
.dbline 94
; uchar i=0;
clr R20
.dbline 95
; data = data;
.dbline 97
; //OSTimeDly(5);
; for (;;)
L17:
.dbline 98
; {
.dbline 99
; if(i<8)
cpi R20,8
brsh L21
.dbline 100
; {
.dbline 101
; All_led(0); //全部熄灭
clr R16
xcall _All_led
.dbline 102
; One_led(i,1); //点亮指定的LED;
ldi R18,1
mov R16,R20
xcall _One_led
.dbline 103
; i=i+1;
inc R20
.dbline 104
; }
xjmp L22
L21:
.dbline 106
; else
; {
.dbline 107
; i=0;
clr R20
.dbline 108
; }
L22:
.dbline 109
ldi R16,15
ldi R17,0
xcall _OSTimeDly
.dbline 110
.dbline 97
.dbline 97
xjmp L17
X1:
.dbline -2
L16:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r data 22 pV
.dbend
.area bss(ram, con, rel)
.dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\21_uCOSII\taskexcu.c
_Task2Stack::
.blkb 100
.dbsym e Task2Stack _Task2Stack A[100:100]c
_Task1Stack::
.blkb 100
.dbsym e Task1Stack _Task1Stack A[100:100]c
_state::
.blkb 1
.dbsym e state _state c
_s::
.blkb 1
.dbsym e s _s c
_m::
.blkb 1
.dbsym e m _m c
_h::
.blkb 1
.dbsym e h _h c
_time::
.blkb 6
.dbsym e time _time A[6:6]c
.area func_lit
PL_Task2: .word `_Task2
PL_Task1: .word `_Task1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -