📄 ucos.lst
字号:
__text_start:
__start:
00D7 EFCF LDI R28,0xFF
00D8 E1D0 LDI R29,0x10
00D9 BFCD OUT 0x3D,R28
00DA BFDE OUT 0x3E,R29
00DB 52C0 SUBI R28,0x20
00DC 40D0 SBCI R29,0
00DD EA0A LDI R16,0xAA
00DE 8308 STD Y+0,R16
00DF 2400 CLR R0
00E0 E1E4 LDI R30,0x14
00E1 E0F1 LDI R31,1
00E2 E012 LDI R17,2
00E3 3EED CPI R30,0xED
00E4 07F1 CPC R31,R17
00E5 F011 BEQ 0x00E8
00E6 9201 ST R0,Z+
00E7 CFFB RJMP 0x00E3
00E8 8300 STD Z+0,R16
00E9 E9EA LDI R30,0x9A
00EA E0F1 LDI R31,1
00EB E0A0 LDI R26,0
00EC E0B1 LDI R27,1
00ED E011 LDI R17,1
FILE: F:\ucos\iccavr\test\test2.c
(0001)
(0002) #define Test1_GLOBALS
(0003) #include "includes.h"
(0004)
(0005) //******************************************************************************
(0006) // Constants
(0007) #define TaskStartPrio 10 // Task-Prioritaeten
(0008) //*****************************************************************************
(0009) // Variablen
(0010) INT8U display[5];
(0011) INT8U h,m,s,state;
(0012) OS_STK Task1Stack[OS_TASK_DEF_STK_SIZE]; // startup task stack
(0013) OS_STK Task2Stack[OS_TASK_DEF_STK_SIZE];
(0014) //ICC-AVR application builder : 2003-12-28 21:52:56
(0015) // Target : M8
(0016) // Crystal: 8.0000Mhz
(0017)
(0018) #include <iom64v.h>
(0019) #include <macros.h>
(0020) //#include <stdio.h>
(0021) #include "uart.h"
(0022)
(0023) //*****************************************************************************
(0024) // Prototypes
(0025) /*
(0026) #define BAUD 9600
(0027) #define CRYSTAL 11059200
(0028) #define BAUD_SETTING (unsigned int)((unsigned long)CRYSTAL/(16*(unsigned long)BAUD)-1)
(0029) #define BAUD_H (unsigned char)(BAUD_SETTING>>8)
(0030) #define BAUD_L (unsigned char)(BAUD_SETTING)
(0031) void uartInit(uint8 uartNum)
(0032) {
00EE 3AEE CPI R30,0xAE
00EF 07F1 CPC R31,R17
(0033) if(1==uartNum)
(0034) {
00F0 F021 BEQ 0x00F5
00F1 95C8 LPM
00F2 9631 ADIW R30,1
(0035) UCSR1B = 0x00; //disable while setting baud rate
00F3 920D ST R0,X+
00F4 CFF9 RJMP 0x00EE
(0036) UCSR1A = 0x00;
00F5 940E0127 CALL _main
_exit:
00F7 CFFF RJMP _exit
(0037) UCSR1C = 0x06;
_t1Init:
00F8 2422 CLR R2
00F9 BC2E OUT 0x2E,R2
00FA E789 LDI R24,0x79
(0038) UBRR1L = BAUD_L; //set baud rate lo
00FB BD8D OUT 0x2D,R24
00FC E082 LDI R24,2
(0039) UBRR1H = BAUD_H; //set baud rate hi
00FD BD8C OUT 0x2C,R24
00FE BC2B OUT 0x2B,R2
00FF BC2A OUT 0x2A,R2
(0040) UCSR1B = 0x18;
(0041) ///共有3个中断源, 接受, 发送, 寄存器空, 对应此寄存器的高3位
0100 BC29 OUT 0x29,R2
(0042) }
(0043) else
(0044) {
0101 BC28 OUT 0x28,R2
0102 92200079 STS 0x79,R2
(0045) UCSR0B = 0x00; //disable while setting baud rate
0104 92200078 STS 0x78,R2
0106 BC27 OUT 0x27,R2
(0046) UCSR0A = 0x00;
(0047) UCSR0C = 0x06; //set frame format, 8 bits, 2stop]
0107 BC26 OUT 0x26,R2
0108 BC2F OUT 0x2F,R2
(0048) UBRR0H = BAUD_H;
0109 BD8E OUT 0x2E,R24
010A 9508 RET
(0049) UBRR0L = BAUD_L;
_fuc:
010B 940E0857 CALL push_lset
(0050) UCSR0B = 0x18; //enable receive and transmite
(0051)
010D E789 LDI R24,0x79
(0052) }
(0053) }
(0054) void putChar(uint8 num, uint8 dat)
(0055) {
(0056) ENTER_CRITICAL();
(0057) if(1==num)
(0058) {
(0059) UDR1 = dat;
(0060) while(!(UCSR1A&BIT(TXC1))); //发送寄存器空
(0061) UCSR1A|=BIT(TXC1);
010E BD8D OUT 0x2D,R24
010F 2422 CLR R2
(0062) }
0110 BC2C OUT 0x2C,R2
0111 940E0709 CALL _OSTickISR
(0063) else
0113 940E086E CALL pop_lset
(0064) {
0115 9518 RETI
(0065) UDR0 = dat;
(0066) while(!(UCSR0A&BIT(TXC0)));
_init_devices:
0116 94F8 BCLR 7
(0067) UCSR0A|=BIT(TXC0);
0117 2422 CLR R2
(0068) }
0118 BE2C OUT 0x3C,R2
0119 9220006D STS 0x6D,R2
(0069) EXIT_CRITICAL();
011B DFDC RCALL _t1Init
(0070) }
011C 2422 CLR R2
(0071) */
011D BE25 OUT 0x35,R2
(0072) //*****************************************************************************
011E 9220006A STS 0x6A,R2
(0073) // TickISR
0120 BE2A OUT 0x3A,R2
(0074) //*****************************************************************************
(0075) // WGM: 0) Normal, TOP=0xFFFF
(0076) // desired value: 1Hz
(0077) // actual value: Out of range
(0078) void t1Init(void)
(0079) {
(0080) TCCR1B = 0x00; //stop
(0081) TCNT1H = 0x79; //setup
(0082) TCNT1L = 0x02;
(0083) OCR1AH = 0x00;
(0084) OCR1AL = 0x00;
(0085) OCR1BH = 0x00;
0121 BE29 OUT 0x39,R2
(0086) OCR1BL = 0x00;
0122 E084 LDI R24,4
0123 BF87 OUT 0x37,R24
(0087) OCR1CH = 0x00;
0124 9220007D STS 0x7D,R2
(0088) OCR1CL = 0x00;
0126 9508 RET
(0089) ICR1H = 0x00;
(0090) ICR1L = 0x00;
_main:
0127 9723 SBIW R28,3
0128 E180 LDI R24,0x10
(0091) TCCR1A = 0x00;
0129 BB85 OUT 0x15,R24
012A BB84 OUT 0x14,R24
(0092) TCCR1B = 0x02; //start Timer
012B B225 IN R2,0x15
(0093) //时钟源选择
012C 2628 EOR R2,R24
(0094) }
012D BA25 OUT 0x15,R2
012E 940E017E CALL _OSInit
(0095)
0130 E087 LDI R24,7
0131 838A STD Y+2,R24
0132 ED8B LDI R24,0xDB
(0096) //*****************************************************************************
(0097) //8倍分频, 11.0592M晶振, 定时25ms
(0098) #pragma interrupt_handler OSTickISR:15
(0099) /*
(0100) void OSTickISR(void);
(0101) #pragma interrupt_handler fuc:15
(0102) void fuc()
(0103) {
(0104) OSTickISR();
(0105) }*/
0133 E091 LDI R25,1
0134 8399 STD Y+1,R25
(0106) //call this routine to initialize all peripherals
0135 8388 STD Y+0,R24
0136 2722 CLR R18
0137 2733 CLR R19
0138 E80E LDI R16,0x8E
0139 E010 LDI R17,0
013A 940E0582 CALL _OSTaskCreate
013C E086 LDI R24,6
013D 838A STD Y+2,R24
013E E787 LDI R24,0x77
013F E091 LDI R25,1
0140 8399 STD Y+1,R25
(0107) void init_devices(void)
(0108) {
(0109) //stop errant interrupts until set up
(0110) CLI(); //disable all interrupts
0141 8388 STD Y+0,R24
0142 2722 CLR R18
0143 2733 CLR R19
0144 E80C LDI R16,0x8C
0145 E010 LDI R17,0
0146 940E0582 CALL _OSTaskCreate
0148 DFCD RCALL _init_devices
0149 E001 LDI R16,1
014A 940E0756 CALL _uartInit
014C 940E0322 CALL _OSStart
(0111) XDIV = 0x00; //xtal divider
(0112) XMCRA = 0x00; //external memory
(0113) t1Init();
(0114)
(0115) MCUCR = 0x00;
014E 9623 ADIW R28,3
014F 9508 RET
(0116) EICRA = 0x00; //extended ext ints
(0117) EICRB = 0x00; //extended ext ints
_Task1:
data --> R10
0150 940E084C CALL push_gset3x
0152 0158 MOVW R10,R16
0153 9478 BSET 7
0154 E180 LDI R24,0x10
0155 B225 IN R2,0x15
0156 2628 EOR R2,R24
(0118) EIMSK = 0x00;
(0119) TIMSK = 0x04; //timer interrupt sources
(0120) ETIMSK = 0x00; //extended timer interrupt sources
(0121) //SEI(); //re-enable interrupts
(0122) }
(0123)
(0124) void Task1(void *pdata);
(0125) void Task2(void *pdata);
0157 BA25 OUT 0x15,R2
0158 E02A LDI R18,0xA
0159 E031 LDI R19,1
015A E001 LDI R16,1
015B 940E0792 CALL _putStr
(0126)
015D E104 LDI R16,0x14
015E E010 LDI R17,0
015F 940E0601 CALL _OSTimeDly
0161 E180 LDI R24,0x10
0162 B225 IN R2,0x15
0163 2628 EOR R2,R24
0164 BA25 OUT 0x15,R2
0165 E104 LDI R16,0x14
0166 E010 LDI R17,0
0167 940E0601 CALL _OSTimeDly
(0127) //*****************************************************************************
(0128) // Start
(0129) #define LED() PORTC = PORTC^BIT(4);
(0130) void main(void){
(0131) PORTC=BIT(4);
(0132) DDRC=BIT(4);
(0133) LED();
(0134) OSInit(); // OS init
0169 CFEA RJMP 0x0154
016A 940E083A CALL pop_gset3x
016C 9508 RET
_Task2:
data --> R10
016D 940E084C CALL push_gset3x
(0135) OSTaskCreate(Task1,
016F 0158 MOVW R10,R16
0170 9478 BSET 7
0171 E020 LDI R18,0
0172 E031 LDI R19,1
0173 E001 LDI R16,1
0174 940E0792 CALL _putStr
0176 E500 LDI R16,0x50
0177 E010 LDI R17,0
0178 940E0601 CALL _OSTimeDly
FILE: F:\ucos\iccavr\source\os_core.c
(0001)
(0002) #ifndef OS_MASTER_FILE
(0003) #define OS_GLOBALS
(0004) #include "includes.h"
(0005) #endif
(0006)
(0007) /*
(0008) *********************************************************************************************************
(0009) * LOCAL GLOBAL VARIABLES
(0010) *********************************************************************************************************
(0011) */
(0012)
(0013) static INT8U OSIntExitY; /* Variable used by 'OSIntExit' to prevent using locals */
(0014) static OS_STK OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE]; /* Idle task stack */
(0015)
(0016) #if OS_TASK_STAT_EN
(0017) static OS_STK OSTaskStatStk[OS_TASK_STAT_STK_SIZE]; /* Statistics task stack */
(0018) #endif
(0019)
(0020) static OS_TCB OSTCBTbl[OS_MAX_TASKS + OS_N_SYS_TASKS]; /* Table of TCBs */
(0021)
(0022) /*$PAGE*/
(0023) /*
(0024) *********************************************************************************************************
(0025) * MAPPING TABLE TO MAP BIT POSITION TO BIT MASK
(0026) *
(0027) * Note: Index into table is desired bit position, 0..7
(0028) * Indexed value corresponds to bit mask
(0029) *********************************************************************************************************
(0030) */
(0031)
(0032) INT8U const OSMapTbl[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
(0033)
(0034) /*
(0035) *********************************************************************************************************
(0036) * PRIORITY RESOLUTION TABLE
(0037) *
(0038) * Note: Index into table is bit pattern to resolve highest priority
(0039) * Indexed value corresponds to highest priority bit position (i.e. 0..7)
(0040) *********************************************************************************************************
(0041) */
(0042)
(0043) INT8U const OSUnMapTbl[] = {
(0044) 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
(0045) 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
(0046) 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
(0047) 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
(0048) 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
(0049) 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
(0050) 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
(0051) 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
(0052) 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
(0053) 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
(0054) 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
(0055) 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
(0056) 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
(0057) 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
(0058) 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
(0059) 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0
(0060) };
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -