📄 ucos.lst
字号:
__start:
__text_start:
00E1 EFCF LDI R28,0xFF
00E2 E1D0 LDI R29,0x10
00E3 BFCD OUT 0x3D,R28
00E4 BFDE OUT 0x3E,R29
00E5 51C0 SUBI R28,0x10
00E6 40D0 SBCI R29,0
00E7 EA0A LDI R16,0xAA
00E8 8308 STD Y+0,R16
00E9 2400 CLR R0
00EA E2E7 LDI R30,0x27
00EB E0F1 LDI R31,1
00EC E012 LDI R17,2
00ED 3FE9 CPI R30,0xF9
00EE 07F1 CPC R31,R17
00EF F011 BEQ 0x00F2
00F0 9201 ST R0,Z+
00F1 CFFB RJMP 0x00ED
00F2 8300 STD Z+0,R16
00F3 E9EA LDI R30,0x9A
00F4 E0F1 LDI R31,1
00F5 E0A0 LDI R26,0
00F6 E0B1 LDI R27,1
00F7 E011 LDI R17,1
00F8 3CE1 CPI R30,0xC1
00F9 07F1 CPC R31,R17
00FA F021 BEQ 0x00FF
00FB 95C8 LPM
00FC 9631 ADIW R30,1
00FD 920D ST R0,X+
00FE CFF9 RJMP 0x00F8
00FF 940E011F CALL _main
_exit:
0101 CFFF RJMP _exit
FILE: D:\MTD\work\iccavr\ucos-M128\test\test2.c
(0001)
(0002) #define Test1_GLOBALS
(0003) #include "includes.h"
(0004)
(0005)
(0006) #define BitSet(a,b) (a |= (1<<b))
(0007) #define BitClr(a,b) (a &= ~(1<<b))
(0008) #define BitStatus(a,b) (a&BIT(b))
(0009) #define uchar unsigned char
(0010)
(0011) #define LED1_ON BitClr(PORTB,4)
(0012) #define LED1_OFF BitSet(PORTB,4)
(0013) #define LED2_ON BitClr(PORTB,5)
(0014) #define LED2_OFF BitSet(PORTB,5)
(0015)
(0016) //******************************************************************************
(0017) // Constants
(0018) #define TaskStartPrio 10 // Task-Prioritaeten
(0019) //*****************************************************************************
(0020) // Variablen
(0021) //INT8U display[5];
(0022) char LED1=0,LED2=0;
(0023) OS_STK Task1Stack[OS_TASK_DEF_STK_SIZE]; // startup task stack
(0024) OS_STK Task2Stack[OS_TASK_DEF_STK_SIZE];
(0025) //ICC-AVR application builder : 2003-12-28 21:52:56
(0026) // Target : M8
(0027) // Crystal: 8.0000Mhz
(0028)
(0029) #include <iom128v.h>
(0030) #include <macros.h>
(0031) #include <stdio.h>
(0032)
(0033)
(0034) //UART0 initialisation
(0035) // desired baud rate: 9600
(0036) // actual: baud rate:9615 (0.2%)
(0037) // char size: 8 bit
(0038) // parity: Disabled
(0039) void uart0_init(void)
(0040) {
(0041) UCSR0B = 0x00; //disable while setting baud rate
_uart0_init:
0102 2422 CLR R2
0103 B82A OUT 0x0A,R2
(0042) UCSR0A = 0x00;
0104 B82B OUT 0x0B,R2
(0043) UCSR0C = 0x86;
0105 E886 LDI R24,0x86
0106 93800095 STS 0x95,R24
(0044) UBRR0L = 0x33; //set baud rate lo
0108 E383 LDI R24,0x33
0109 B989 OUT 0x09,R24
(0045) UBRR0H = 0x00; //set baud rate hi
010A 92200090 STS 0x90,R2
(0046) UCSR0B = 0x08;
010C E088 LDI R24,0x8
010D B98A OUT 0x0A,R24
010E 9508 RET
(0047)
(0048) /*UCSR0B = 0x00; //disable while setting baud rate
(0049) UCSR0A = 0x00;
(0050) UCSR0C = 0x06;
(0051) UBRR0L = 0x33; //set baud rate lo
(0052) UBRR0H = 0x00; //set baud rate hi
(0053) UCSR0B = 0x00;
(0054) */
(0055) }
(0056)
(0057) //*****************************************************************************
(0058) // Prototypes
(0059)
(0060) //*****************************************************************************
(0061) // TickISR
(0062) //*****************************************************************************
(0063) // Init Timer/Counter2 fuer Takterzeugung
(0064) void TC2_Init (void){
(0065) /* Only uses TIMER2 overflow for tick interrupt. Timer compare
(0066) * can also be used.
(0067) */
(0068) TIMSK &= ~(BIT(TOIE2)/* | BIT(OCIE2) */); //disable TC2 interrupts
_TC2_Init:
010F B787 IN R24,0x37
0110 7B8F ANDI R24,0xBF
0111 BF87 OUT 0x37,R24
(0069) TCCR2 = 0x00; //stop
0112 2422 CLR R2
0113 BC25 OUT 0x25,R2
(0070) TCNT2 = 0x06; //setup
0114 E086 LDI R24,6
0115 BD84 OUT 0x24,R24
(0071) OCR2 = 0xFA;
0116 EF8A LDI R24,0xFA
0117 BD83 OUT 0x23,R24
(0072) TCCR2 = 0x03; //start
0118 E083 LDI R24,3
0119 BD85 OUT 0x25,R24
(0073) TIMSK |= BIT(TOIE2); // enable OVF-interrupt
011A B787 IN R24,0x37
011B 6480 ORI R24,0x40
011C BF87 OUT 0x37,R24
(0074) //TIMSK |= OCIE2; // enable COMP-interrupt
(0075)
(0076) SEI(); // enable global interrupt
011D 9478 BSET 7
011E 9508 RET
_main:
011F 9723 SBIW R28,3
(0077) }
(0078)
(0079) //*****************************************************************************
(0080) // Interrupt Timer/Counter0 Overflow
(0081) // OVF_Takt: 4MHz / 1024 / 39 = 10ms
(0082) #pragma interrupt_handler OSTickISR:11
(0083)
(0084) void Task1(void *pdata);
(0085) void Task2(void *pdata);
(0086)
(0087) //*****************************************************************************
(0088) // Start
(0089) void main(void){
(0090) OSInit(); // OS init
0120 940E0194 CALL _OSInit
(0091) uart0_init();
0122 DFDF RCALL _uart0_init
(0092) puts("ATmega128 uc/os-II Test!");
0123 E00E LDI R16,0xE
0124 E011 LDI R17,1
0125 940E07B2 CALL _puts
(0093) putchar(0x0d);
0127 E00D LDI R16,0xD
0128 940E079A CALL _putchar
(0094) putchar(0x0a);
012A E00A LDI R16,0xA
012B 940E079A CALL _putchar
(0095)
(0096) OSTaskCreate(Task1, (void *)0, &Task1Stack[OS_TASK_DEF_STK_SIZE-1], 7);
012D E087 LDI R24,7
012E 838A STD Y+2,R24
012F EE8E LDI R24,0xEE
0130 E091 LDI R25,1
0131 8399 STD Y+1,R25
0132 8388 STD Y+0,R24
0133 2722 CLR R18
0134 2733 CLR R19
0135 E80E LDI R16,0x8E
0136 E010 LDI R17,0
0137 940E0598 CALL _OSTaskCreate
(0097)
(0098) OSTaskCreate(Task2, (void *)0, &Task2Stack[OS_TASK_DEF_STK_SIZE-1], 8);
0139 E088 LDI R24,0x8
013A 838A STD Y+2,R24
013B E88A LDI R24,0x8A
013C E091 LDI R25,1
013D 8399 STD Y+1,R25
013E 8388 STD Y+0,R24
013F 2722 CLR R18
0140 2733 CLR R19
0141 E80C LDI R16,0x8C
0142 E010 LDI R17,0
0143 940E0598 CALL _OSTaskCreate
(0099) // init und start tick
(0100) TC2_Init(); // Timer/Counter#2 Overflow and Comp init
0145 DFC9 RCALL _TC2_Init
(0101) OSStart(); // start multitasking
0146 940E0338 CALL _OSStart
0148 9623 ADIW R28,3
0149 9508 RET
_Task1:
data --> R10
014A 940E078F CALL push_gset3x
014C 0158 MOVW R10,R16
(0102) }
(0103)
(0104) void Task1(void *data)
(0105) {
(0106) data = data;
(0107) PORTB|=0x10;
014D 9AC4 SBI 0x18,4
(0108) DDRB|=0x10;
014E 9ABC SBI 0x17,4
014F C01B RJMP 0x016B
(0109) while(1)
(0110) {
(0111) puts("Task1");
0150 E008 LDI R16,0x8
0151 E011 LDI R17,1
0152 940E07B2 CALL _puts
(0112) putchar(0x0d);
0154 E00D LDI R16,0xD
0155 940E079A CALL _putchar
(0113) putchar(0x0a);
0157 E00A LDI R16,0xA
0158 940E079A CALL _putchar
(0114) if(LED1==0)
015A 90200100 LDS R2,LED1
015C 2022 TST R2
015D F429 BNE 0x0163
(0115) {
(0116) LED1=1;
015E E081 LDI R24,1
015F 93800100 STS LED1,R24
(0117) LED1_ON;
0161 98C4 CBI 0x18,4
(0118) }
0162 C004 RJMP 0x0167
(0119) else
(0120) {
(0121) LED1=0;
0163 2422 CLR R2
0164 92200100 STS LED1,R2
(0122) LED1_OFF;
0166 9AC4 SBI 0x18,4
(0123) }
(0124) OSTimeDly (500);//延时1秒
0167 EF04 LDI R16,0xF4
0168 E011 LDI R17,1
0169 940E0617 CALL _OSTimeDly
016B CFE4 RJMP 0x0150
016C 940E077D CALL pop_gset3x
016E 9508 RET
_Task2:
data --> R10
016F 940E078F CALL push_gset3x
0171 0158 MOVW R10,R16
(0125) }
(0126) }
(0127) void Task2(void *data)
(0128) {
(0129) data = data;
(0130) PORTB|=0x20;
0172 9AC5 SBI 0x18,5
(0131) DDRB|=0x20;
0173 9ABD SBI 0x17,5
0174 C01B RJMP 0x0190
(0132) while(1)
(0133) {
(0134) puts("Task2");
0175 E002 LDI R16,2
0176 E011 LDI R17,1
0177 940E07B2 CALL _puts
(0135) putchar(0x0d);
0179 E00D LDI R16,0xD
017A 940E079A CALL _putchar
(0136) putchar(0x0a);
017C E00A LDI R16,0xA
017D 940E079A CALL _putchar
(0137) if(LED2==0)
017F 90200101 LDS R2,LED2
0181 2022 TST R2
0182 F429 BNE 0x0188
(0138) {
(0139) LED2=1;
0183 E081 LDI R24,1
0184 93800101 STS LED2,R24
(0140) LED2_ON;
0186 98C5 CBI 0x18,5
(0141) }
0187 C004 RJMP 0x018C
(0142) else
(0143) {
(0144) LED2=0;
0188 2422 CLR R2
0189 92200101 STS LED2,R2
(0145) LED2_OFF;
018B 9AC5 SBI 0x18,5
(0146) }
(0147) OSTimeDly (1000);//延时2秒
018C EE08 LDI R16,0xE8
018D E013 LDI R17,3
018E 940E0617 CALL _OSTimeDly
0190 CFE4 RJMP 0x0175
0191 940E077D CALL pop_gset3x
0193 9508 RET
_OSInit:
i --> R10
0194 940E078F CALL push_gset3x
0196 9723 SBIW R28,3
FILE: D:\MTD\work\iccavr\ucos-M128\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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -