📄 demo.lss
字号:
demo.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00000200 00001800 00001800 00000094 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00000000 00800060 00001a00 00000294 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000044 00800060 00800060 00000294 2**0
ALLOC
3 .noinit 00000000 008000a4 008000a4 00000294 2**0
CONTENTS
4 .eeprom 00000000 00810000 00810000 00000294 2**0
CONTENTS
5 .stab 00000510 00000000 00000000 00000294 2**2
CONTENTS, READONLY, DEBUGGING
6 .stabstr 00000737 00000000 00000000 000007a4 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00001800 <__vectors>:
1800: 12 c0 rjmp .+36 ; 0x1826
1802: 2b c0 rjmp .+86 ; 0x185a
1804: 2a c0 rjmp .+84 ; 0x185a
1806: 29 c0 rjmp .+82 ; 0x185a
1808: 28 c0 rjmp .+80 ; 0x185a
180a: 27 c0 rjmp .+78 ; 0x185a
180c: 26 c0 rjmp .+76 ; 0x185a
180e: 25 c0 rjmp .+74 ; 0x185a
1810: 24 c0 rjmp .+72 ; 0x185a
1812: 23 c0 rjmp .+70 ; 0x185a
1814: 22 c0 rjmp .+68 ; 0x185a
1816: 21 c0 rjmp .+66 ; 0x185a
1818: 20 c0 rjmp .+64 ; 0x185a
181a: 1f c0 rjmp .+62 ; 0x185a
181c: 1e c0 rjmp .+60 ; 0x185a
181e: 1d c0 rjmp .+58 ; 0x185a
1820: 1c c0 rjmp .+56 ; 0x185a
1822: 1b c0 rjmp .+54 ; 0x185a
1824: 1a c0 rjmp .+52 ; 0x185a
00001826 <__ctors_end>:
1826: 11 24 eor r1, r1
1828: 1f be out 0x3f, r1 ; 63
182a: cf e5 ldi r28, 0x5F ; 95
182c: d4 e0 ldi r29, 0x04 ; 4
182e: de bf out 0x3e, r29 ; 62
1830: cd bf out 0x3d, r28 ; 61
00001832 <__do_copy_data>:
1832: 10 e0 ldi r17, 0x00 ; 0
1834: a0 e6 ldi r26, 0x60 ; 96
1836: b0 e0 ldi r27, 0x00 ; 0
1838: e0 e0 ldi r30, 0x00 ; 0
183a: fa e1 ldi r31, 0x1A ; 26
183c: 02 c0 rjmp .+4 ; 0x1842
0000183e <.do_copy_data_loop>:
183e: 05 90 lpm r0, Z+
1840: 0d 92 st X+, r0
00001842 <.do_copy_data_start>:
1842: a0 36 cpi r26, 0x60 ; 96
1844: b1 07 cpc r27, r17
1846: d9 f7 brne .-10 ; 0x183e
00001848 <__do_clear_bss>:
1848: 10 e0 ldi r17, 0x00 ; 0
184a: a0 e6 ldi r26, 0x60 ; 96
184c: b0 e0 ldi r27, 0x00 ; 0
184e: 01 c0 rjmp .+2 ; 0x1852
00001850 <.do_clear_bss_loop>:
1850: 1d 92 st X+, r1
00001852 <.do_clear_bss_start>:
1852: a4 3a cpi r26, 0xA4 ; 164
1854: b1 07 cpc r27, r17
1856: e1 f7 brne .-8 ; 0x1850
1858: 9e c0 rjmp .+316 ; 0x1996
0000185a <__bad_interrupt>:
185a: d2 cf rjmp .-92 ; 0x1800
0000185c <uart_putc>:
void (*reset)(void)=0x0000;
void uart_putc(uchar c)
{
while( !(UCSRA & (1<<UDRE)) );
185c: 5d 9b sbis 0x0b, 5 ; 11
185e: fe cf rjmp .-4 ; 0x185c
UDR=c;
1860: 8c b9 out 0x0c, r24 ; 12
1862: 08 95 ret
00001864 <uart_getc>:
}
uchar uart_getc(void)
{
while( !(UCSRA & (1<<RXC)) );
1864: 5f 9b sbis 0x0b, 7 ; 11
1866: fe cf rjmp .-4 ; 0x1864
return UDR;
1868: 8c b1 in r24, 0x0c ; 12
}
186a: 99 27 eor r25, r25
186c: 08 95 ret
0000186e <WritePage>:
void WritePage(void)
{
186e: 0f 93 push r16
1870: 1f 93 push r17
1872: cf 93 push r28
1874: 04 e6 ldi r16, 0x64 ; 100
1876: 10 e0 ldi r17, 0x00 ; 0
1878: cf e3 ldi r28, 0x3F ; 63
uchar i;
// 接收当前页面数据
for(i=0;i<PAGE_SIZE;i++)
g_aPageTemp[i]=uart_getc();
187a: f4 df rcall .-24 ; 0x1864
187c: f8 01 movw r30, r16
187e: 81 93 st Z+, r24
1880: 8f 01 movw r16, r30
1882: c1 50 subi r28, 0x01 ; 1
1884: c7 ff sbrs r28, 7
1886: f9 cf rjmp .-14 ; 0x187a
// 页擦除操作
boot_page_erase(g_wPageIndex<<6);
1888: 07 b6 in r0, 0x37 ; 55
188a: 00 fc sbrc r0, 0
188c: fd cf rjmp .-6 ; 0x1888
188e: e1 99 sbic 0x1c, 1 ; 28
1890: fe cf rjmp .-4 ; 0x188e
1892: 23 e0 ldi r18, 0x03 ; 3
1894: 40 91 62 00 lds r20, 0x0062
1898: 50 91 63 00 lds r21, 0x0063
189c: ca 01 movw r24, r20
189e: 66 e0 ldi r22, 0x06 ; 6
18a0: 88 0f add r24, r24
18a2: 99 1f adc r25, r25
18a4: 6a 95 dec r22
18a6: e1 f7 brne .-8 ; 0x18a0
18a8: fc 01 movw r30, r24
18aa: 20 93 57 00 sts 0x0057, r18
18ae: e8 95 spm
while(boot_rww_busy())
boot_rww_enable();
18b0: 07 b6 in r0, 0x37 ; 55
18b2: 06 fe sbrs r0, 6
18b4: 0c c0 rjmp .+24 ; 0x18ce
18b6: 81 e1 ldi r24, 0x11 ; 17
18b8: 07 b6 in r0, 0x37 ; 55
18ba: 00 fc sbrc r0, 0
18bc: fd cf rjmp .-6 ; 0x18b8
18be: e1 99 sbic 0x1c, 1 ; 28
18c0: fe cf rjmp .-4 ; 0x18be
18c2: 80 93 57 00 sts 0x0057, r24
18c6: e8 95 spm
18c8: 07 b6 in r0, 0x37 ; 55
18ca: 06 fc sbrc r0, 6
18cc: f5 cf rjmp .-22 ; 0x18b8
// 填充缓冲页
for(i = 0; i < PAGE_SIZE; i += 2)
18ce: c0 e0 ldi r28, 0x00 ; 0
18d0: 61 e0 ldi r22, 0x01 ; 1
boot_page_fill((unsigned long)i,*((uint *)(g_aPageTemp +i)));
18d2: 07 b6 in r0, 0x37 ; 55
18d4: 00 fc sbrc r0, 0
18d6: fd cf rjmp .-6 ; 0x18d2
18d8: e1 99 sbic 0x1c, 1 ; 28
18da: fe cf rjmp .-4 ; 0x18d8
18dc: 8c 2f mov r24, r28
18de: 99 27 eor r25, r25
18e0: fc 01 movw r30, r24
18e2: ec 59 subi r30, 0x9C ; 156
18e4: ff 4f sbci r31, 0xFF ; 255
18e6: 20 81 ld r18, Z
18e8: 31 81 ldd r19, Z+1 ; 0x01
18ea: 09 01 movw r0, r18
18ec: fc 01 movw r30, r24
18ee: 60 93 57 00 sts 0x0057, r22
18f2: e8 95 spm
18f4: 11 24 eor r1, r1
18f6: ce 5f subi r28, 0xFE ; 254
18f8: c0 34 cpi r28, 0x40 ; 64
18fa: 58 f3 brcs .-42 ; 0x18d2
// 页写入操作
boot_page_write(g_wPageIndex<<6);
18fc: 07 b6 in r0, 0x37 ; 55
18fe: 00 fc sbrc r0, 0
1900: fd cf rjmp .-6 ; 0x18fc
1902: e1 99 sbic 0x1c, 1 ; 28
1904: fe cf rjmp .-4 ; 0x1902
1906: 25 e0 ldi r18, 0x05 ; 5
1908: ca 01 movw r24, r20
190a: 36 e0 ldi r19, 0x06 ; 6
190c: 88 0f add r24, r24
190e: 99 1f adc r25, r25
1910: 3a 95 dec r19
1912: e1 f7 brne .-8 ; 0x190c
1914: fc 01 movw r30, r24
1916: 20 93 57 00 sts 0x0057, r18
191a: e8 95 spm
while(boot_rww_busy())
boot_rww_enable();
191c: 07 b6 in r0, 0x37 ; 55
191e: 06 fe sbrs r0, 6
1920: 0c c0 rjmp .+24 ; 0x193a
1922: 81 e1 ldi r24, 0x11 ; 17
1924: 07 b6 in r0, 0x37 ; 55
1926: 00 fc sbrc r0, 0
1928: fd cf rjmp .-6 ; 0x1924
192a: e1 99 sbic 0x1c, 1 ; 28
192c: fe cf rjmp .-4 ; 0x192a
192e: 80 93 57 00 sts 0x0057, r24
1932: e8 95 spm
1934: 07 b6 in r0, 0x37 ; 55
1936: 06 fc sbrc r0, 6
1938: f5 cf rjmp .-22 ; 0x1924
g_wPageIndex++;
193a: 4f 5f subi r20, 0xFF ; 255
193c: 5f 4f sbci r21, 0xFF ; 255
193e: 50 93 63 00 sts 0x0063, r21
1942: 40 93 62 00 sts 0x0062, r20
1946: cf 91 pop r28
1948: 1f 91 pop r17
194a: 0f 91 pop r16
194c: 08 95 ret
0000194e <ReadPage>:
}
void ReadPage(void)
{
194e: 1f 93 push r17
1950: cf 93 push r28
1952: df 93 push r29
1954: c0 e0 ldi r28, 0x00 ; 0
1956: d0 e0 ldi r29, 0x00 ; 0
1958: 1f e3 ldi r17, 0x3F ; 63
uchar i;
for(i=0;i<PAGE_SIZE;i++)
uart_putc(pgm_read_byte(i+(g_wPageIndex*PAGE_SIZE)));
195a: e0 91 62 00 lds r30, 0x0062
195e: f0 91 63 00 lds r31, 0x0063
1962: 76 e0 ldi r23, 0x06 ; 6
1964: ee 0f add r30, r30
1966: ff 1f adc r31, r31
1968: 7a 95 dec r23
196a: e1 f7 brne .-8 ; 0x1964
196c: ec 0f add r30, r28
196e: fd 1f adc r31, r29
1970: 84 91 lpm r24, Z
1972: 74 df rcall .-280 ; 0x185c
1974: 11 50 subi r17, 0x01 ; 1
1976: 21 96 adiw r28, 0x01 ; 1
1978: 17 ff sbrs r17, 7
197a: ef cf rjmp .-34 ; 0x195a
g_wPageIndex++;
197c: 80 91 62 00 lds r24, 0x0062
1980: 90 91 63 00 lds r25, 0x0063
1984: 01 96 adiw r24, 0x01 ; 1
1986: 90 93 63 00 sts 0x0063, r25
198a: 80 93 62 00 sts 0x0062, r24
198e: df 91 pop r29
1990: cf 91 pop r28
1992: 1f 91 pop r17
1994: 08 95 ret
00001996 <main>:
}
int main(void)
{
1996: cf e5 ldi r28, 0x5F ; 95
1998: d4 e0 ldi r29, 0x04 ; 4
199a: de bf out 0x3e, r29 ; 62
199c: cd bf out 0x3d, r28 ; 61
uchar tmp;
//uart init
UBRRH=0;
199e: 10 bc out 0x20, r1 ; 32
UBRRL=25;//9600 baud 6MHz:38 4MHz:25
19a0: 89 e1 ldi r24, 0x19 ; 25
19a2: 89 b9 out 0x09, r24 ; 9
UCSRB=(1<<RXEN)|(1<<TXEN);
19a4: 88 e1 ldi r24, 0x18 ; 24
19a6: 8a b9 out 0x0a, r24 ; 10
while(1)
{
tmp=uart_getc();//recv command
19a8: 5d df rcall .-326 ; 0x1864
switch(tmp)
19aa: 99 27 eor r25, r25
19ac: 8f 3a cpi r24, 0xAF ; 175
19ae: 91 05 cpc r25, r1
19b0: 01 f1 breq .+64 ; 0x19f2
19b2: 80 3b cpi r24, 0xB0 ; 176
19b4: 91 05 cpc r25, r1
19b6: 3c f4 brge .+14 ; 0x19c6
19b8: 80 3a cpi r24, 0xA0 ; 160
19ba: 91 05 cpc r25, r1
19bc: e1 f0 breq .+56 ; 0x19f6
19be: 8a 3a cpi r24, 0xAA ; 170
19c0: 91 05 cpc r25, r1
19c2: d9 f0 breq .+54 ; 0x19fa
19c4: f1 cf rjmp .-30 ; 0x19a8
19c6: 80 3b cpi r24, 0xB0 ; 176
19c8: 91 05 cpc r25, r1
19ca: 21 f0 breq .+8 ; 0x19d4
19cc: 8f 3b cpi r24, 0xBF ; 191
19ce: 91 05 cpc r25, r1
19d0: 51 f0 breq .+20 ; 0x19e6
19d2: ea cf rjmp .-44 ; 0x19a8
{
case 0xB0://设置页地址
g_wPageIndex=uart_getc();
19d4: 47 df rcall .-370 ; 0x1864
19d6: 99 27 eor r25, r25
19d8: 90 93 63 00 sts 0x0063, r25
19dc: 80 93 62 00 sts 0x0062, r24
uart_putc(g_wPageIndex);
19e0: 80 91 62 00 lds r24, 0x0062
19e4: 0b c0 rjmp .+22 ; 0x19fc
break;
case 0xBF:
reset();
19e6: e0 91 60 00 lds r30, 0x0060
19ea: f0 91 61 00 lds r31, 0x0061
19ee: 09 95 icall
break;
19f0: db cf rjmp .-74 ; 0x19a8
case 0xAF://写一页
WritePage();
19f2: 3d df rcall .-390 ; 0x186e
19f4: 02 c0 rjmp .+4 ; 0x19fa
uart_putc(UART_ACK); //应答
break;
case 0xA0://读一页
ReadPage();
19f6: ab df rcall .-170 ; 0x194e
break;
19f8: d7 cf rjmp .-82 ; 0x19a8
case UART_ACK:
uart_putc(UART_ACK);
19fa: 8a ea ldi r24, 0xAA ; 170
19fc: 2f df rcall .-418 ; 0x185c
break;
19fe: d4 cf rjmp .-88 ; 0x19a8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -