📄 main.s90
字号:
///////////////////////////////////////////////////////////////////////////////
// /
// IAR C/C++ Compiler V5.30.0.50166/W32 for Atmel AVR 26/Dec/2009 09:14:41 /
// Copyright 1996-2009 IAR Systems AB. /
// /
// Source file = E:\design\AVR\IAR_UCOS_II\main.c /
// Command line = E:\design\AVR\IAR_UCOS_II\main.c --cpu=m16 -ms -o /
// E:\design\AVR\IAR_UCOS_II\Debug\Obj\ -lCN /
// E:\design\AVR\IAR_UCOS_II\Debug\List\ -lB /
// E:\design\AVR\IAR_UCOS_II\Debug\List\ /
// --initializers_in_flash -z3 --no_cse --no_inline /
// --no_code_motion --no_cross_call --no_clustering /
// --no_tbaa --debug -e -I "D:\IAR Systems\Embedded /
// Workbench 5.3 For AVR\avr\INC\" -I "D:\IAR /
// Systems\Embedded Workbench 5.3 For AVR\avr\INC\CLIB\" /
// --eeprom_size 512 /
// List file = E:\design\AVR\IAR_UCOS_II\Debug\List\main.s90 /
// /
// /
///////////////////////////////////////////////////////////////////////////////
NAME main
RSEG CSTACK:DATA:NOROOT(0)
RSEG RSTACK:DATA:NOROOT(0)
EXTERN ?need_segment_init
PUBWEAK `?<Segment init: NEAR_Z>`
PUBLIC ADC_interrupt_routine
PUBLIC AvrInit
PUBLIC OSICB
PUBLIC Task1
PUBLIC Task1Stk
PUBLIC Task2
PUBLIC Task2Stk
PUBLIC Task3
PUBLIC Task3Stk
PUBLIC Task4
PUBLIC Task4Stk
PUBWEAK _A_ADCSRA
PUBWEAK _A_ADMUX
PUBWEAK _A_DDRA
PUBWEAK _A_DDRB
PUBWEAK _A_DDRC
PUBWEAK _A_DDRD
PUBWEAK _A_PORTA
PUBWEAK _A_PORTB
PUBWEAK _A_PORTC
PUBWEAK _A_PORTD
PUBWEAK _A_TCCR0
PUBWEAK _A_TIMSK
PUBWEAK __?EEARH
PUBWEAK __?EEARL
PUBWEAK __?EECR
PUBWEAK __?EEDR
PUBLIC main
PUBLIC timer0_interrupt_routine
EXTERN OSInit
EXTERN OSTaskCreate
EXTERN OSStart
EXTERN OSTimeDly
EXTERN IntEnter
EXTERN OSTimeTick
EXTERN OSIntExit
EXTERN IntExit
// E:\design\AVR\IAR_UCOS_II\main.c
// 1 #include <iom16.h>
ASEGN ABSOLUTE:DATA:NOROOT,059H
// <__C20> volatile __io _A_TIMSK
_A_TIMSK:
DS8 1
ASEGN ABSOLUTE:DATA:NOROOT,053H
// <__C38> volatile __io _A_TCCR0
_A_TCCR0:
DS8 1
ASEGN ABSOLUTE:DATA:NOROOT,03bH
// <__C98> volatile __io _A_PORTA
_A_PORTA:
DS8 1
ASEGN ABSOLUTE:DATA:NOROOT,03aH
// <__C101> volatile __io _A_DDRA
_A_DDRA:
DS8 1
ASEGN ABSOLUTE:DATA:NOROOT,038H
// <__C107> volatile __io _A_PORTB
_A_PORTB:
DS8 1
ASEGN ABSOLUTE:DATA:NOROOT,037H
// <__C110> volatile __io _A_DDRB
_A_DDRB:
DS8 1
ASEGN ABSOLUTE:DATA:NOROOT,035H
// <__C116> volatile __io _A_PORTC
_A_PORTC:
DS8 1
ASEGN ABSOLUTE:DATA:NOROOT,034H
// <__C119> volatile __io _A_DDRC
_A_DDRC:
DS8 1
ASEGN ABSOLUTE:DATA:NOROOT,032H
// <__C125> volatile __io _A_PORTD
_A_PORTD:
DS8 1
ASEGN ABSOLUTE:DATA:NOROOT,031H
// <__C128> volatile __io _A_DDRD
_A_DDRD:
DS8 1
ASEGN ABSOLUTE:DATA:NOROOT,027H
// <__C155> volatile __io _A_ADMUX
_A_ADMUX:
DS8 1
ASEGN ABSOLUTE:DATA:NOROOT,026H
// <__C158> volatile __io _A_ADCSRA
_A_ADCSRA:
DS8 1
// 2 #include "ucos_ii.h"
// 3
// 4 #define TASK_STK_SIZE 100
// 5
// 6 extern void IntEnter(void);
// 7 extern void IntExit(void);
// 8
// 9 typedef struct os_icb
// 10 {
// 11 unsigned int CSTACK;
// 12 unsigned int RSTACK;
// 13 unsigned int frame;
// 14 }OS_ICB;
RSEG NEAR_Z:DATA:NOROOT(0)
REQUIRE `?<Segment init: NEAR_Z>`
// 15 OS_ICB OSICB;
OSICB:
DS8 6
// 16
RSEG NEAR_Z:DATA:NOROOT(0)
REQUIRE `?<Segment init: NEAR_Z>`
// 17 OS_STK Task1Stk[TASK_STK_SIZE];
Task1Stk:
DS8 100
RSEG NEAR_Z:DATA:NOROOT(0)
REQUIRE `?<Segment init: NEAR_Z>`
// 18 OS_STK Task2Stk[TASK_STK_SIZE];
Task2Stk:
DS8 100
RSEG NEAR_Z:DATA:NOROOT(0)
REQUIRE `?<Segment init: NEAR_Z>`
// 19 OS_STK Task3Stk[TASK_STK_SIZE];
Task3Stk:
DS8 100
RSEG NEAR_Z:DATA:NOROOT(0)
REQUIRE `?<Segment init: NEAR_Z>`
// 20 OS_STK Task4Stk[TASK_STK_SIZE];
Task4Stk:
DS8 100
// 21
// 22 void AvrInit(void);
// 23 void Task1(void *);
// 24 void Task2(void *);
// 25 void Task3(void *);
// 26 void Task4(void *);
// 27
RSEG CODE:CODE:NOROOT(1)
// 28 void main (void)
main:
// 29 {
// 30 AvrInit();
RCALL AvrInit
// 31 OSInit();
CALL OSInit
// 32 OSTaskCreate(Task1, (void *)0, (void *)&Task1Stk[TASK_STK_SIZE - 1], 0);
LDI R22, 0
LDI R20, LOW((Task1Stk + 99))
LDI R21, HIGH((Task1Stk + 99))
LDI R18, 0
LDI R19, 0
LDI R16, LOW(Task1/2)
LDI R17, (Task1/2) >> 8
CALL OSTaskCreate
// 33 OSTaskCreate(Task2, (void *)0, (void *)&Task2Stk[TASK_STK_SIZE - 1], 1);
LDI R22, 1
LDI R20, LOW((Task2Stk + 99))
LDI R21, HIGH((Task2Stk + 99))
LDI R18, 0
LDI R19, 0
LDI R16, LOW(Task2/2)
LDI R17, (Task2/2) >> 8
CALL OSTaskCreate
// 34 OSTaskCreate(Task3, (void *)0, (void *)&Task3Stk[TASK_STK_SIZE - 1], 2);
LDI R22, 2
LDI R20, LOW((Task3Stk + 99))
LDI R21, HIGH((Task3Stk + 99))
LDI R18, 0
LDI R19, 0
LDI R16, LOW(Task3/2)
LDI R17, (Task3/2) >> 8
CALL OSTaskCreate
// 35 OSTaskCreate(Task4, (void *)0, (void *)&Task4Stk[TASK_STK_SIZE - 1], 3);
LDI R22, 3
LDI R20, LOW((Task4Stk + 99))
LDI R21, HIGH((Task4Stk + 99))
LDI R18, 0
LDI R19, 0
LDI R16, LOW(Task4/2)
LDI R17, (Task4/2) >> 8
CALL OSTaskCreate
// 36 OSStart();
CALL OSStart
// 37 }
RET
// 38
RSEG CODE:CODE:NOROOT(1)
// 39 void AvrInit(void)
AvrInit:
// 40 {
// 41 //以下为全局设定
// 42 DDRB=0xFF;
LDI R16, 255
OUT 0x17, R16
// 43 PORTB=0;
LDI R16, 0
OUT 0x18, R16
// 44 DDRD=0xFF;
LDI R16, 255
OUT 0x11, R16
// 45 PORTD=0;
LDI R16, 0
OUT 0x12, R16
// 46 DDRC=0xFF;
LDI R16, 255
OUT 0x14, R16
// 47 PORTC=0;
LDI R16, 0
OUT 0x15, R16
// 48 DDRA=0xFC;
LDI R16, 252
OUT 0x1A, R16
// 49 PORTA=0;
LDI R16, 0
OUT 0x1B, R16
// 50 //以下为ADC的初始化设定
// 51 ADMUX=0;
LDI R16, 0
OUT 0x07, R16
// 52 ADCSRA=0x8E; //使能ADC,ADC预分频因子为64,使能ADC中断
LDI R16, 142
OUT 0x06, R16
// 53 }
RET
REQUIRE _A_PORTA
REQUIRE _A_DDRA
REQUIRE _A_PORTB
REQUIRE _A_DDRB
REQUIRE _A_PORTC
REQUIRE _A_DDRC
REQUIRE _A_PORTD
REQUIRE _A_DDRD
REQUIRE _A_ADMUX
REQUIRE _A_ADCSRA
// 54
RSEG CODE:CODE:NOROOT(1)
// 55 void Task1(void * data)
Task1:
// 56 {
// 57 data=data;
// 58 //WDTCR=1; //enable watchdog and set the time in 32ms
// 59 //以下为定时器0的初始化设定,并启动定时器0
// 60 TCCR0=0x05; //定时器0设定为普通模式,输入时钟1024分频,正常的端口操作,
LDI R18, 5
OUT 0x33, R18
// 61 //不与OC0相连接,定时器0的周期为32.768ms
// 62 TIMSK_TOIE0=1; //使能定时器0的溢出中断
IN R18, 0x39
ORI R18, 0x01
OUT 0x39, R18
// 63 while(1)
// 64 {
// 65 OSTimeDly(100);
??Task1_0:
LDI R16, 100
LDI R17, 0
CALL OSTimeDly
// 66 ADCSRA_ADSC=1;
SBI 0x06, 0x06
RJMP ??Task1_0
REQUIRE _A_TIMSK
REQUIRE _A_TCCR0
REQUIRE _A_ADCSRA
// 67 }
// 68 }
// 69
RSEG CODE:CODE:NOROOT(1)
// 70 void Task2(void * data)
Task2:
??Task2_0:
// 71 {
// 72 data=data;
// 73 while(1)
// 74 {
// 75 OSTimeDly(240);
LDI R16, 240
LDI R17, 0
CALL OSTimeDly
RJMP ??Task2_0
// 76 }
// 77 }
RSEG CODE:CODE:NOROOT(1)
// 78 void Task3(void * data)
Task3:
??Task3_0:
// 79 {
// 80 data=data;
// 81 while(1)
// 82 {
// 83 OSTimeDly(333);
LDI R16, 77
LDI R17, 1
CALL OSTimeDly
RJMP ??Task3_0
// 84 }
// 85 }
RSEG CODE:CODE:NOROOT(1)
// 86 void Task4(void * data)
Task4:
??Task4_0:
// 87 {
// 88 data=data;
// 89 while(1)
// 90 {
// 91 OSTimeDly(473);
LDI R16, 217
LDI R17, 1
CALL OSTimeDly
RJMP ??Task4_0
// 92 }
// 93 }
RSEG CODE:CODE:ROOT(1)
// 94 __C_task __root void timer0_interrupt_routine(void)
timer0_interrupt_routine:
// 95 {
// 96 IntEnter();
CALL IntEnter
// 97 __enable_interrupt();
SEI
// 98 OSTimeTick();
CALL OSTimeTick
// 99 __disable_interrupt();
CLI
// 100 OSIntExit();
CALL OSIntExit
// 101 IntExit();
CALL IntExit
// 102 }
RET
// 103
RSEG CODE:CODE:ROOT(1)
// 104 __C_task __root void ADC_interrupt_routine(void)
ADC_interrupt_routine:
// 105 {
// 106 IntEnter();
CALL IntEnter
// 107 __enable_interrupt();
SEI
// 108 //DoSomething
// 109 __disable_interrupt();
CLI
// 110 OSIntExit();
CALL OSIntExit
// 111 IntExit();
CALL IntExit
// 112 }
RET
ASEGN ABSOLUTE:DATA:NOROOT,01cH
__?EECR:
ASEGN ABSOLUTE:DATA:NOROOT,01dH
__?EEDR:
ASEGN ABSOLUTE:DATA:NOROOT,01eH
__?EEARL:
ASEGN ABSOLUTE:DATA:NOROOT,01fH
__?EEARH:
RSEG INITTAB:CODE:NOROOT(0)
`?<Segment init: NEAR_Z>`:
DC16 SFE(NEAR_Z) - SFB(NEAR_Z)
DC16 SFB(NEAR_Z)
DC16 0
REQUIRE ?need_segment_init
END
//
// 12 bytes in segment ABSOLUTE
// 218 bytes in segment CODE
// 6 bytes in segment INITTAB
// 406 bytes in segment NEAR_Z
//
// 218 bytes of CODE memory (+ 6 bytes shared)
// 406 bytes of DATA memory (+ 12 bytes shared)
//
//Errors: none
//Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -