?? avr313.lss
字號:
Avr313.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 0000051c 00000000 00000000 00000094 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00000002 00800060 0000051c 000005b0 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 0000008e 00800062 00800062 000005b2 2**0
ALLOC
3 .debug_aranges 00000080 00000000 00000000 000005b2 2**0
CONTENTS, READONLY, DEBUGGING
4 .debug_pubnames 0000015d 00000000 00000000 00000632 2**0
CONTENTS, READONLY, DEBUGGING
5 .debug_info 000005c0 00000000 00000000 0000078f 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_abbrev 0000031b 00000000 00000000 00000d4f 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_line 000005e0 00000000 00000000 0000106a 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_frame 000000e0 00000000 00000000 0000164c 2**2
CONTENTS, READONLY, DEBUGGING
9 .debug_str 000001a1 00000000 00000000 0000172c 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_loc 000001ba 00000000 00000000 000018cd 2**0
CONTENTS, READONLY, DEBUGGING
11 .debug_ranges 00000018 00000000 00000000 00001a87 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 9a c0 rjmp .+308 ; 0x136 <__ctors_end>
2: 45 c2 rjmp .+1162 ; 0x48e <__vector_1>
4: b3 c0 rjmp .+358 ; 0x16c <__bad_interrupt>
6: b2 c0 rjmp .+356 ; 0x16c <__bad_interrupt>
8: b1 c0 rjmp .+354 ; 0x16c <__bad_interrupt>
a: b0 c0 rjmp .+352 ; 0x16c <__bad_interrupt>
c: af c0 rjmp .+350 ; 0x16c <__bad_interrupt>
e: ae c0 rjmp .+348 ; 0x16c <__bad_interrupt>
10: ad c0 rjmp .+346 ; 0x16c <__bad_interrupt>
12: ac c0 rjmp .+344 ; 0x16c <__bad_interrupt>
14: ab c0 rjmp .+342 ; 0x16c <__bad_interrupt>
16: aa c0 rjmp .+340 ; 0x16c <__bad_interrupt>
18: e2 c0 rjmp .+452 ; 0x1de <__vector_12>
1a: a8 c0 rjmp .+336 ; 0x16c <__bad_interrupt>
1c: a7 c0 rjmp .+334 ; 0x16c <__bad_interrupt>
1e: a6 c0 rjmp .+332 ; 0x16c <__bad_interrupt>
20: a5 c0 rjmp .+330 ; 0x16c <__bad_interrupt>
22: a4 c0 rjmp .+328 ; 0x16c <__bad_interrupt>
24: a3 c0 rjmp .+326 ; 0x16c <__bad_interrupt>
00000026 <unshifted>:
26: 0d 09 0e 60 15 71 16 31 1a 7a 1b 73 1c 61 1d 77 ...`.q.1.z.s.a.w
36: 1e 32 21 63 22 78 23 64 24 65 25 34 26 33 29 20 .2!c"x#d$e%4&3)
46: 2a 76 2b 66 2c 74 2d 72 2e 35 31 6e 32 62 33 68 *v+f,t-r.51n2b3h
56: 34 67 35 79 36 36 39 2c 3a 6d 3b 6a 3c 75 3d 37 4g5y669,:m;j<u=7
66: 3e 38 41 2c 42 6b 43 69 44 6f 45 30 46 39 49 2e >8A,BkCiDoE0F9I.
76: 4a 2f 4b 6c 4c 3b 4d 70 4e 2d 52 27 54 5b 55 3d J/KlL;MpN-R'T[U=
86: 5a 0d 5b 5d 5d 5c 61 3c 66 08 69 31 6b 34 6c 37 Z.[]]\a<f.i1k4l7
96: 70 30 71 2e 72 32 73 35 74 36 75 38 79 2b 7a 33 p0q.r2s5t6u8y+z3
a6: 7b 2d 7c 2a 7d 39 00 00 {-|*}9..
000000ae <shifted>:
ae: 0d 09 0e 7e 15 51 16 21 1a 5a 1b 53 1c 41 1d 57 ...~.Q.!.Z.S.A.W
be: 1e 40 21 43 22 58 23 44 24 45 25 24 26 23 29 20 .@!C"X#D$E%$&#)
ce: 2a 56 2b 46 2c 54 2d 52 2e 25 31 4e 32 42 33 48 *V+F,T-R.%1N2B3H
de: 34 47 35 59 36 5e 39 4c 3a 4d 3b 4a 3c 55 3d 2f 4G5Y6^9L:M;J<U=/
ee: 3e 2a 41 3c 42 4b 43 49 44 4f 45 29 46 28 49 3e >*A<BKCIDOE)F(I>
fe: 4a 3f 4b 4c 4c 3a 4d 50 4e 5f 52 22 54 7b 55 2b J?KLL:MPN_R"T{U+
10e: 5a 0d 5b 7d 5d 7c 61 3e 66 08 69 31 6b 34 6c 37 Z.[}]|a>f.i1k4l7
11e: 70 30 71 2e 72 32 73 35 74 36 75 38 79 2b 7a 33 p0q.r2s5t6u8y+z3
12e: 7b 2d 7c 2a 7d 39 00 00 {-|*}9..
00000136 <__ctors_end>:
136: 11 24 eor r1, r1
138: 1f be out 0x3f, r1 ; 63
13a: cf e5 ldi r28, 0x5F ; 95
13c: d4 e0 ldi r29, 0x04 ; 4
13e: de bf out 0x3e, r29 ; 62
140: cd bf out 0x3d, r28 ; 61
00000142 <__do_copy_data>:
142: 10 e0 ldi r17, 0x00 ; 0
144: a0 e6 ldi r26, 0x60 ; 96
146: b0 e0 ldi r27, 0x00 ; 0
148: ec e1 ldi r30, 0x1C ; 28
14a: f5 e0 ldi r31, 0x05 ; 5
14c: 02 c0 rjmp .+4 ; 0x152 <.do_copy_data_start>
0000014e <.do_copy_data_loop>:
14e: 05 90 lpm r0, Z+
150: 0d 92 st X+, r0
00000152 <.do_copy_data_start>:
152: a2 36 cpi r26, 0x62 ; 98
154: b1 07 cpc r27, r17
156: d9 f7 brne .-10 ; 0x14e <.do_copy_data_loop>
00000158 <__do_clear_bss>:
158: 10 e0 ldi r17, 0x00 ; 0
15a: a2 e6 ldi r26, 0x62 ; 98
15c: b0 e0 ldi r27, 0x00 ; 0
15e: 01 c0 rjmp .+2 ; 0x162 <.do_clear_bss_start>
00000160 <.do_clear_bss_loop>:
160: 1d 92 st X+, r1
00000162 <.do_clear_bss_start>:
162: a0 3f cpi r26, 0xF0 ; 240
164: b1 07 cpc r27, r17
166: e1 f7 brne .-8 ; 0x160 <.do_clear_bss_loop>
168: d0 d1 rcall .+928 ; 0x50a <main>
16a: d6 c1 rjmp .+940 ; 0x518 <_exit>
0000016c <__bad_interrupt>:
16c: 49 cf rjmp .-366 ; 0x0 <__vectors>
0000016e <init_uart>:
#define UBR (unsigned int)( F_CPU / (16.0 * 19200) - 0.5 )
void init_uart(void)
{
ub_inptr = UART_buffer;
16e: 86 e6 ldi r24, 0x66 ; 102
170: 90 e0 ldi r25, 0x00 ; 0
172: 90 93 a7 00 sts 0x00A7, r25
176: 80 93 a6 00 sts 0x00A6, r24
ub_outptr = UART_buffer;
17a: 90 93 a9 00 sts 0x00A9, r25
17e: 80 93 a8 00 sts 0x00A8, r24
ub_buffcnt = 0;
182: 10 92 aa 00 sts 0x00AA, r1
UBRRL = UBR; // 19200bps @ 4 MHz
186: 86 e2 ldi r24, 0x26 ; 38
188: 89 b9 out 0x09, r24 ; 9
UCSRB = (1 << TXEN); // TX enable
18a: 88 e0 ldi r24, 0x08 ; 8
18c: 8a b9 out 0x0a, r24 ; 10
}
18e: 08 95 ret
00000190 <putchar>:
}
*/
int putchar(int c)
{
if (ub_buffcnt < BUFF_SIZE)
190: 98 2f mov r25, r24
192: 80 91 aa 00 lds r24, 0x00AA
196: 80 34 cpi r24, 0x40 ; 64
198: 18 f0 brcs .+6 ; 0x1a0 <putchar+0x10>
19a: 20 e0 ldi r18, 0x00 ; 0
19c: 30 e0 ldi r19, 0x00 ; 0
19e: 1d c0 rjmp .+58 ; 0x1da <putchar+0x4a>
{
uint8_t tmp = SREG;
1a0: 2f b7 in r18, 0x3f ; 63
cli();
1a2: f8 94 cli
// Put character into buffer
// Increment pointer and buffer count
*ub_inptr++ = c;
1a4: e0 91 a6 00 lds r30, 0x00A6
1a8: f0 91 a7 00 lds r31, 0x00A7
1ac: 91 93 st Z+, r25
1ae: f0 93 a7 00 sts 0x00A7, r31
1b2: e0 93 a6 00 sts 0x00A6, r30
ub_buffcnt++;
1b6: 80 91 aa 00 lds r24, 0x00AA
1ba: 8f 5f subi r24, 0xFF ; 255
1bc: 80 93 aa 00 sts 0x00AA, r24
// Pointer wrapping
if (ub_inptr >= UART_buffer + BUFF_SIZE)
1c0: e6 5a subi r30, 0xA6 ; 166
1c2: f0 40 sbci r31, 0x00 ; 0
1c4: 30 f0 brcs .+12 ; 0x1d2 <putchar+0x42>
ub_inptr = UART_buffer;
1c6: 86 e6 ldi r24, 0x66 ; 102
1c8: 90 e0 ldi r25, 0x00 ; 0
1ca: 90 93 a7 00 sts 0x00A7, r25
1ce: 80 93 a6 00 sts 0x00A6, r24
// Enable UART Data register empty interrupt
UCSRB |= (1 << UDRIE);
1d2: 55 9a sbi 0x0a, 5 ; 10
SREG = tmp;
1d4: 2f bf out 0x3f, r18 ; 63
1d6: 21 e0 ldi r18, 0x01 ; 1
1d8: 30 e0 ldi r19, 0x00 ; 0
else
{
// Buffer is full
return 0;
}
}
1da: c9 01 movw r24, r18
1dc: 08 95 ret
000001de <__vector_12>:
// ----------------------------------------------
// Interrupt driven transmitter
// ----------------------------------------------
ISR (USART_UDRE_vect)
{
1de: 1f 92 push r1
1e0: 0f 92 push r0
1e2: 0f b6 in r0, 0x3f ; 63
1e4: 0f 92 push r0
1e6: 11 24 eor r1, r1
1e8: 8f 93 push r24
1ea: 9f 93 push r25
1ec: ef 93 push r30
1ee: ff 93 push r31
// Send next byte and increment pointer
UDR = *ub_outptr++;
1f0: e0 91 a8 00 lds r30, 0x00A8
1f4: f0 91 a9 00 lds r31, 0x00A9
1f8: 81 91 ld r24, Z+
1fa: 8c b9 out 0x0c, r24 ; 12
1fc: f0 93 a9 00 sts 0x00A9, r31
200: e0 93 a8 00 sts 0x00A8, r30
// Pointer wrapping
if (ub_outptr >= UART_buffer + BUFF_SIZE)
204: e6 5a subi r30, 0xA6 ; 166
206: f0 40 sbci r31, 0x00 ; 0
208: 30 f0 brcs .+12 ; 0x216 <__vector_12+0x38>
ub_outptr = UART_buffer;
20a: 86 e6 ldi r24, 0x66 ; 102
20c: 90 e0 ldi r25, 0x00 ; 0
20e: 90 93 a9 00 sts 0x00A9, r25
212: 80 93 a8 00 sts 0x00A8, r24
// If buffer is empty: disable interrupt
if(--ub_buffcnt == 0)
216: 80 91 aa 00 lds r24, 0x00AA
21a: 81 50 subi r24, 0x01 ; 1
21c: 80 93 aa 00 sts 0x00AA, r24
220: 80 91 aa 00 lds r24, 0x00AA
224: 88 23 and r24, r24
226: 09 f4 brne .+2 ; 0x22a <__vector_12+0x4c>
UCSRB &= ~(1 << UDRIE);
228: 55 98 cbi 0x0a, 5 ; 10
}
22a: ff 91 pop r31
22c: ef 91 pop r30
22e: 9f 91 pop r25
230: 8f 91 pop r24
232: 0f 90 pop r0
234: 0f be out 0x3f, r0 ; 63
236: 0f 90 pop r0
238: 1f 90 pop r1
23a: 18 95 reti
0000023c <print_hexbyte>:
#include <inttypes.h>
#include "gpr.h"
void print_hexbyte(uint8_t i)
{
23c: 0f 93 push r16
23e: 1f 93 push r17
uint8_t h, l;
h = i & 0xF0; // High nibble
h = h >> 4;
240: 98 2f mov r25, r24
242: 92 95 swap r25
244: 9f 70 andi r25, 0x0F ; 15
h = h + '0';
246: 09 2f mov r16, r25
248: 00 5d subi r16, 0xD0 ; 208
if (h > '9')
24a: 0a 33 cpi r16, 0x3A ; 58
24c: 08 f0 brcs .+2 ; 0x250 <print_hexbyte+0x14>
h = h + 7;
24e: 09 5f subi r16, 0xF9 ; 249
l = (i & 0x0F)+'0'; // Low nibble
250: 8f 70 andi r24, 0x0F ; 15
252: 18 2f mov r17, r24
254: 10 5d subi r17, 0xD0 ; 208
if (l > '9')
256: 1a 33 cpi r17, 0x3A ; 58
258: 08 f0 brcs .+2 ; 0x25c <print_hexbyte+0x20>
l = l + 7;
25a: 19 5f subi r17, 0xF9 ; 249
putchar('0');
25c: 80 e3 ldi r24, 0x30 ; 48
25e: 90 e0 ldi r25, 0x00 ; 0
260: 97 df rcall .-210 ; 0x190 <putchar>
putchar('x');
262: 88 e7 ldi r24, 0x78 ; 120
264: 90 e0 ldi r25, 0x00 ; 0
266: 94 df rcall .-216 ; 0x190 <putchar>
putchar(h);
268: 80 2f mov r24, r16
26a: 90 e0 ldi r25, 0x00 ; 0
26c: 91 df rcall .-222 ; 0x190 <putchar>
putchar(l);
26e: 81 2f mov r24, r17
270: 90 e0 ldi r25, 0x00 ; 0
272: 8e df rcall .-228 ; 0x190 <putchar>
}
274: 1f 91 pop r17
276: 0f 91 pop r16
278: 08 95 ret
0000027a <init_kb>:
void init_kb(void)
{
kb_inptr = kb_buffer; // Initialize buffer
27a: 8c ea ldi r24, 0xAC ; 172
27c: 90 e0 ldi r25, 0x00 ; 0
27e: 90 93 ed 00 sts 0x00ED, r25
282: 80 93 ec 00 sts 0x00EC, r24
kb_outptr = kb_buffer;
286: 90 93 ef 00 sts 0x00EF, r25
28a: 80 93 ee 00 sts 0x00EE, r24
kb_buffcnt = 0;
28e: 10 92 ab 00 sts 0x00AB, r1
MCUCR = (1 << ISC01); // INT0 interrupt on falling edge
292: 82 e0 ldi r24, 0x02 ; 2
294: 85 bf out 0x35, r24 ; 53
GICR= (1 << INT0); // Enable INT0 interrupt
296: 80 e4 ldi r24, 0x40 ; 64
298: 8b bf out 0x3b, r24 ; 59
}
29a: 08 95 ret
0000029c <put_kbbuff>:
// Stuff a decoded byte into the keyboard buffer.
// This routine is currently only called by "decode" which is called
// from within the ISR so atomic precautions are not needed here.
//-------------------------------------------------------------------
void put_kbbuff(uint8_t c)
{
29c: 98 2f mov r25, r24
// uint8_t tmp = SREG;
// cli();
if (kb_buffcnt < KB_BUFF_SIZE) // If buffer not full
29e: 80 91 ab 00 lds r24, 0x00AB
2a2: 80 34 cpi r24, 0x40 ; 64
2a4: b8 f4 brcc .+46 ; 0x2d4 <put_kbbuff+0x38>
{
// Put character into buffer
// Increment pointer
*kb_inptr++ = c;
2a6: e0 91 ec 00 lds r30, 0x00EC
2aa: f0 91 ed 00 lds r31, 0x00ED
2ae: 91 93 st Z+, r25
2b0: f0 93 ed 00 sts 0x00ED, r31
2b4: e0 93 ec 00 sts 0x00EC, r30
kb_buffcnt++;
2b8: 80 91 ab 00 lds r24, 0x00AB
2bc: 8f 5f subi r24, 0xFF ; 255
2be: 80 93 ab 00 sts 0x00AB, r24
// Pointer wrapping
if (kb_inptr >= kb_buffer + KB_BUFF_SIZE)
2c2: ec 5e subi r30, 0xEC ; 236
2c4: f0 40 sbci r31, 0x00 ; 0
2c6: 30 f0 brcs .+12 ; 0x2d4 <put_kbbuff+0x38>
kb_inptr = kb_buffer;
2c8: 8c ea ldi r24, 0xAC ; 172
2ca: 90 e0 ldi r25, 0x00 ; 0
2cc: 90 93 ed 00 sts 0x00ED, r25
2d0: 80 93 ec 00 sts 0x00EC, r24
2d4: 08 95 ret
000002d6 <get_kbchar>:
int get_kbchar(void)
{
int byte;
// Wait for data
while(kb_buffcnt == 0);
2d6: 80 91 ab 00 lds r24, 0x00AB
2da: 88 23 and r24, r24
2dc: e1 f3 breq .-8 ; 0x2d6 <get_kbchar>
uint8_t tmp = SREG;
2de: 3f b7 in r19, 0x3f ; 63
cli();
2e0: f8 94 cli
// Get byte - Increment pointer
byte = *kb_outptr++;
2e2: e0 91 ee 00 lds r30, 0x00EE
2e6: f0 91 ef 00 lds r31, 0x00EF
2ea: 21 91 ld r18, Z+
2ec: f0 93 ef 00 sts 0x00EF, r31
2f0: e0 93 ee 00 sts 0x00EE, r30
// Pointer wrapping
if (kb_outptr >= kb_buffer + KB_BUFF_SIZE)
2f4: ec 5e subi r30, 0xEC ; 236
2f6: f0 40 sbci r31, 0x00 ; 0
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -