📄 test2.s
字号:
.module test2.c
.area text(rom, con, rel)
.even
_TC2_Init::
;
; #define Test1_GLOBALS
; #include "includes.h"
;
; //******************************************************************************
; // Constants
; #define TaskStartPrio 10 // Task-Prioritaeten
; //*****************************************************************************
; // Variablen
; INT8U display[5];
; 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
;
; #include <iom16v.h>
; #include <macros.h>
; #include <stdio.h>
;
;
; //*****************************************************************************
; // Prototypes
;
; //*****************************************************************************
; // TickISR
; //*****************************************************************************
; // Init Timer/Counter2 fuer Takterzeugung
; void TC2_Init (void){
; /* 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
; TCCR2 = 0x00; // interner Takt, /1024
clr R2
out 0x25,R2
; TCNT2 = 0; // Counter ruecksetzen, 2ms @ 8MHz
out 0x24,R2
; TCCR2 = 0x04; // 64
ldi R24,4
out 0x25,R24
; // OCR2 = 180; // OutputCompareRegister
; TIMSK |= BIT(TOIE2); // enable OVF-interrupt
in R24,0x39
ori R24,64
out 0x39,R24
; //TIMSK |= OCIE2; // enable COMP-interrupt
;
; SEI(); // enable global interrupt
sei
L2:
.dbline 0 ; func end
ret
.area vector(rom, abs)
.org 16
jmp _OSTickISR
.area text(rom, con, rel)
.even
_main::
sbiw R28,3
; }
;
; //*****************************************************************************
; // Interrupt Timer/Counter0 Overflow
; // OVF_Takt: 4MHz / 1024 / 39 = 10ms
; #pragma interrupt_handler OSTickISR:5
;
; void Task1(void *pdata);
; void Task2(void *pdata);
;
; //*****************************************************************************
; // Start
; void main(void){
; OSInit(); // OS init
xcall _OSInit
; Uart_init();
xcall _Uart_init
; //Prints("ATmega8 uc/os-II Test!");
; //Putchar(0x0d);
; //Putchar(0x0a);
;
; OSTaskCreate(Task1, (void *)0, &Task1Stack[OS_TASK_DEF_STK_SIZE-1], 7);
ldi R24,7
std y+2,R24
ldi R24,<_Task1Stack+99
ldi R25,>_Task1Stack+99
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, &Task2Stack[OS_TASK_DEF_STK_SIZE-1], 8);
ldi R24,8
std y+2,R24
ldi R24,<_Task2Stack+99
ldi R25,>_Task2Stack+99
std y+1,R25
std y+0,R24
clr R18
clr R19
ldi R16,<PL_Task2
ldi R17,>PL_Task2
xcall _OSTaskCreate
; // init und start tick
; TC2_Init(); // Timer/Counter#2 Overflow and Comp init
xcall _TC2_Init
; OSStart(); // start multitasking
xcall _OSStart
L3:
adiw R28,3
.dbline 0 ; func end
ret
; data -> R10,R11
.even
_Task1::
xcall push_gset3x
movw R10,R16
; }
;
; //*****************************************************************************
; void Task1(void *data){
L7:
; for (;;){
; //Prints("ATmega16_UCOS_ii");
; Putchar(0x80);
ldi R16,128
xcall _Putchar
; OSTimeDly (100);
ldi R16,100
ldi R17,0
xcall _OSTimeDly
; }
xjmp L7
X0:
L6:
xcall pop_gset3x
.dbline 0 ; func end
ret
; data -> R10,R11
.even
_Task2::
xcall push_gset3x
movw R10,R16
; }
; void Task2(void *data){
; data = data;
; OSTimeDly(5);
ldi R16,5
ldi R17,0
xcall _OSTimeDly
L12:
; for (;;){
; //Prints("Test_OK!");
; Putchar(0x20);
ldi R16,32
xcall _Putchar
; OSTimeDly (500);
ldi R16,500
ldi R17,1
xcall _OSTimeDly
; }
xjmp L12
X1:
L11:
xcall pop_gset3x
.dbline 0 ; func end
ret
.area bss(ram, con, rel)
_Task2Stack::
.blkb 100
_Task1Stack::
.blkb 100
_state::
.blkb 1
_s::
.blkb 1
_m::
.blkb 1
_h::
.blkb 1
_display::
.blkb 5
.area func_lit
PL_Task2: .word `_Task2
PL_Task1: .word `_Task1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -