?? main.lss
字號:
main.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00000156 00000000 00000000 00000094 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00000000 00800060 00000156 000001ea 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000024 00800060 00800060 000001ea 2**0
ALLOC
3 .noinit 00000000 00800084 00800084 000001ea 2**0
CONTENTS
4 .eeprom 00000000 00810000 00810000 000001ea 2**0
CONTENTS
5 .stab 0000042c 00000000 00000000 000001ec 2**2
CONTENTS, READONLY, DEBUGGING
6 .stabstr 000005d9 00000000 00000000 00000618 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 0a c0 rjmp .+20 ; 0x16
2: 22 c0 rjmp .+68 ; 0x48
4: 21 c0 rjmp .+66 ; 0x48
6: 20 c0 rjmp .+64 ; 0x48
8: 1f c0 rjmp .+62 ; 0x48
a: 1e c0 rjmp .+60 ; 0x48
c: 1d c0 rjmp .+58 ; 0x48
e: 1d c0 rjmp .+58 ; 0x4a
10: 1b c0 rjmp .+54 ; 0x48
12: 41 c0 rjmp .+130 ; 0x96
14: 19 c0 rjmp .+50 ; 0x48
00000016 <__ctors_end>:
16: 11 24 eor r1, r1
18: 1f be out 0x3f, r1 ; 63
1a: cf ed ldi r28, 0xDF ; 223
1c: cd bf out 0x3d, r28 ; 61
0000001e <__do_copy_data>:
1e: 10 e0 ldi r17, 0x00 ; 0
20: a0 e6 ldi r26, 0x60 ; 96
22: b0 e0 ldi r27, 0x00 ; 0
24: e6 e5 ldi r30, 0x56 ; 86
26: f1 e0 ldi r31, 0x01 ; 1
28: 03 c0 rjmp .+6 ; 0x30
0000002a <.do_copy_data_loop>:
2a: c8 95 lpm
2c: 31 96 adiw r30, 0x01 ; 1
2e: 0d 92 st X+, r0
00000030 <.do_copy_data_start>:
30: a0 36 cpi r26, 0x60 ; 96
32: b1 07 cpc r27, r17
34: d1 f7 brne .-12 ; 0x2a
00000036 <__do_clear_bss>:
36: 10 e0 ldi r17, 0x00 ; 0
38: a0 e6 ldi r26, 0x60 ; 96
3a: b0 e0 ldi r27, 0x00 ; 0
3c: 01 c0 rjmp .+2 ; 0x40
0000003e <.do_clear_bss_loop>:
3e: 1d 92 st X+, r1
00000040 <.do_clear_bss_start>:
40: a4 38 cpi r26, 0x84 ; 132
42: b1 07 cpc r27, r17
44: e1 f7 brne .-8 ; 0x3e
46: 6b c0 rjmp .+214 ; 0x11e
00000048 <__bad_interrupt>:
48: db cf rjmp .-74 ; 0x0
0000004a <__vector_7>:
uchar g_aRecvBuf[16]; //接收數據緩沖區
//接收中斷
SIGNAL(SIG_UART_RECV)
{
4a: 1f 92 push r1
4c: 0f 92 push r0
4e: 0f b6 in r0, 0x3f ; 63
50: 0f 92 push r0
52: 11 24 eor r1, r1
54: 2f 93 push r18
56: 8f 93 push r24
58: 9f 93 push r25
5a: ef 93 push r30
5c: ff 93 push r31
uchar c=UDR;
5e: 2c b1 in r18, 0x0c ; 12
if(g_bRxdLen>0)
60: 90 91 60 00 lds r25, 0x0060
64: 99 23 and r25, r25
66: 69 f0 breq .+26 ; 0x82
{
g_aRecvBuf[g_bRxdPos++]=c;
68: 80 91 61 00 lds r24, 0x0061
6c: e8 2f mov r30, r24
6e: ff 27 eor r31, r31
70: ec 59 subi r30, 0x9C ; 156
72: ff 4f sbci r31, 0xFF ; 255
74: 20 83 st Z, r18
76: 8f 5f subi r24, 0xFF ; 255
78: 80 93 61 00 sts 0x0061, r24
g_bRxdLen--;
7c: 91 50 subi r25, 0x01 ; 1
7e: 90 93 60 00 sts 0x0060, r25
82: ff 91 pop r31
84: ef 91 pop r30
86: 9f 91 pop r25
88: 8f 91 pop r24
8a: 2f 91 pop r18
8c: 0f 90 pop r0
8e: 0f be out 0x3f, r0 ; 63
90: 0f 90 pop r0
92: 1f 90 pop r1
94: 18 95 reti
00000096 <__vector_9>:
}
}
//發送中斷
SIGNAL (SIG_UART_TRANS)
{
96: 1f 92 push r1
98: 0f 92 push r0
9a: 0f b6 in r0, 0x3f ; 63
9c: 0f 92 push r0
9e: 11 24 eor r1, r1
a0: 8f 93 push r24
a2: ef 93 push r30
a4: ff 93 push r31
if(--g_bTxdLen>0)
a6: 80 91 62 00 lds r24, 0x0062
aa: 81 50 subi r24, 0x01 ; 1
ac: 80 93 62 00 sts 0x0062, r24
b0: 88 23 and r24, r24
b2: 59 f0 breq .+22 ; 0xca
UDR=g_aSendBuf[++g_bTxdPos];
b4: 80 91 63 00 lds r24, 0x0063
b8: 8f 5f subi r24, 0xFF ; 255
ba: 80 93 63 00 sts 0x0063, r24
be: e8 2f mov r30, r24
c0: ff 27 eor r31, r31
c2: ec 58 subi r30, 0x8C ; 140
c4: ff 4f sbci r31, 0xFF ; 255
c6: 80 81 ld r24, Z
c8: 8c b9 out 0x0c, r24 ; 12
ca: ff 91 pop r31
cc: ef 91 pop r30
ce: 8f 91 pop r24
d0: 0f 90 pop r0
d2: 0f be out 0x3f, r0 ; 63
d4: 0f 90 pop r0
d6: 1f 90 pop r1
d8: 18 95 reti
000000da <IsRecvComplete>:
}
//是否接收完成
uchar IsRecvComplete(void)
{
return g_bRxdLen==0;
da: 20 e0 ldi r18, 0x00 ; 0
dc: 30 e0 ldi r19, 0x00 ; 0
de: 80 91 60 00 lds r24, 0x0060
e2: 88 23 and r24, r24
e4: 11 f4 brne .+4 ; 0xea
e6: 21 e0 ldi r18, 0x01 ; 1
e8: 30 e0 ldi r19, 0x00 ; 0
}
ea: 93 2f mov r25, r19
ec: 82 2f mov r24, r18
ee: 08 95 ret
000000f0 <SendToUart>:
//從發送緩沖區發送指定長度數據
void SendToUart(uchar size)
{
f0: 98 2f mov r25, r24
g_bTxdPos=0;
f2: 10 92 63 00 sts 0x0063, r1
g_bTxdLen=size;
f6: 80 93 62 00 sts 0x0062, r24
UDR=g_aSendBuf[0];
fa: 80 91 74 00 lds r24, 0x0074
fe: 8c b9 out 0x0c, r24 ; 12
while(g_bTxdLen>0);
100: 99 23 and r25, r25
102: f1 f7 brne .-4 ; 0x100
104: 08 95 ret
00000106 <RecvFromUart>:
}
//接收指定長度數據到接收緩沖區
void RecvFromUart(uchar size,uchar bwait)
{
106: 98 2f mov r25, r24
g_bRxdPos=0;
108: 10 92 61 00 sts 0x0061, r1
g_bRxdLen=size;
10c: 90 93 60 00 sts 0x0060, r25
if(bwait)
110: 66 23 and r22, r22
112: 19 f0 breq .+6 ; 0x11a
114: 89 2f mov r24, r25
while(g_bRxdLen>0);
116: 88 23 and r24, r24
118: f1 f7 brne .-4 ; 0x116
11a: 08 95 ret
11c: 08 95 ret
0000011e <main>:
}
int main( void )
{
11e: cf ed ldi r28, 0xDF ; 223
122: de bf out 0x3e, r29 ; 62
124: cd bf out 0x3d, r28 ; 61
uchar i;
//uart初始化
UCR=(1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN);
126: 88 ed ldi r24, 0xD8 ; 216
128: 8a b9 out 0x0a, r24 ; 10
UBRR=38; //UBRR=FCK/(9600*16) -1
12a: 86 e2 ldi r24, 0x26 ; 38
12c: 89 b9 out 0x09, r24 ; 9
sei();
12e: 78 94 sei
while(1)
{
//異步接收16字節數據
RecvFromUart(16,0);
130: 60 e0 ldi r22, 0x00 ; 0
132: 80 e1 ldi r24, 0x10 ; 16
134: e8 df rcall .-48 ; 0x106
//等待接收完成
while(!IsRecvComplete());
136: d1 df rcall .-94 ; 0xda
138: 88 23 and r24, r24
13a: e9 f3 breq .-6 ; 0x136
13c: a4 e7 ldi r26, 0x74 ; 116
13e: b0 e0 ldi r27, 0x00 ; 0
140: e4 e6 ldi r30, 0x64 ; 100
142: f0 e0 ldi r31, 0x00 ; 0
144: 9f e0 ldi r25, 0x0F ; 15
//將接收到的數據復制到發送緩沖區
for(i=0;i<16;i++)
g_aSendBuf[i]=g_aRecvBuf[i];
146: 81 91 ld r24, Z+
148: 8d 93 st X+, r24
14a: 91 50 subi r25, 0x01 ; 1
14c: 97 ff sbrs r25, 7
14e: fb cf rjmp .-10 ; 0x146
//發送回接收到的數據
SendToUart(16);
150: 80 e1 ldi r24, 0x10 ; 16
152: ce df rcall .-100 ; 0xf0
154: ed cf rjmp .-38 ; 0x130
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -