Код: Выделить всё
Disassembly of section .text:
00003000 <__vectors>:
3000: 39 c0 rjmp .+114 ; 0x3074 <__ctors_end>
3002: 00 00 nop
3004: 9b c0 rjmp .+310 ; 0x313c <__bad_interrupt>
3006: 00 00 nop
3008: 99 c0 rjmp .+306 ; 0x313c <__bad_interrupt>
300a: 00 00 nop
300c: 97 c0 rjmp .+302 ; 0x313c <__bad_interrupt>
300e: 00 00 nop
3010: 95 c0 rjmp .+298 ; 0x313c <__bad_interrupt>
3012: 00 00 nop
3014: 93 c0 rjmp .+294 ; 0x313c <__bad_interrupt>
3016: 00 00 nop
3018: 91 c0 rjmp .+290 ; 0x313c <__bad_interrupt>
301a: 00 00 nop
301c: 8f c0 rjmp .+286 ; 0x313c <__bad_interrupt>
301e: 00 00 nop
3020: 8d c0 rjmp .+282 ; 0x313c <__bad_interrupt>
3022: 00 00 nop
3024: 8b c0 rjmp .+278 ; 0x313c <__bad_interrupt>
3026: 00 00 nop
3028: 89 c0 rjmp .+274 ; 0x313c <__bad_interrupt>
302a: 00 00 nop
302c: ec c4 rjmp .+2520 ; 0x3a06 <__vector_11>
302e: 00 00 nop
3030: 85 c0 rjmp .+266 ; 0x313c <__bad_interrupt>
3032: 00 00 nop
3034: 83 c0 rjmp .+262 ; 0x313c <__bad_interrupt>
3036: 00 00 nop
3038: 81 c0 rjmp .+258 ; 0x313c <__bad_interrupt>
303a: 00 00 nop
303c: 7f c0 rjmp .+254 ; 0x313c <__bad_interrupt>
303e: 00 00 nop
3040: 7d c0 rjmp .+250 ; 0x313c <__bad_interrupt>
3042: 00 00 nop
3044: 7b c0 rjmp .+246 ; 0x313c <__bad_interrupt>
3046: 00 00 nop
3048: 79 c0 rjmp .+242 ; 0x313c <__bad_interrupt>
304a: 00 00 nop
304c: 77 c0 rjmp .+238 ; 0x313c <__bad_interrupt>
304e: 00 00 nop
3050: 75 c0 rjmp .+234 ; 0x313c <__bad_interrupt>
3052: 00 00 nop
3054: 73 c0 rjmp .+230 ; 0x313c <__bad_interrupt>
3056: 00 00 nop
3058: 71 c0 rjmp .+226 ; 0x313c <__bad_interrupt>
305a: 00 00 nop
305c: 6f c0 rjmp .+222 ; 0x313c <__bad_interrupt>
305e: 00 00 nop
3060: 6d c0 rjmp .+218 ; 0x313c <__bad_interrupt>
3062: 00 00 nop
3064: 6b c0 rjmp .+214 ; 0x313c <__bad_interrupt>
3066: 00 00 nop
3068: 69 c0 rjmp .+210 ; 0x313c <__bad_interrupt>
306a: 00 00 nop
306c: 67 c0 rjmp .+206 ; 0x313c <__bad_interrupt>
306e: 00 00 nop
3070: 65 c0 rjmp .+202 ; 0x313c <__bad_interrupt>
...
00003074 <__ctors_end>:
3074: 11 24 eor r1, r1
3076: 1f be out 0x3f, r1 ; 63
3078: cf ef ldi r28, 0xFF ; 255
307a: d2 e0 ldi r29, 0x02 ; 2
307c: de bf out 0x3e, r29 ; 62
307e: cd bf out 0x3d, r28 ; 61
00003080 <Application_Jump_Check>:
/* Re-enable JTAG debugging */
JTAG_ENABLE();
#else
/* Check if the device's BOOTRST fuse is set */
if (boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS) & FUSE_BOOTRST)
3080: e3 e0 ldi r30, 0x03 ; 3
3082: f0 e0 ldi r31, 0x00 ; 0
3084: 89 e0 ldi r24, 0x09 ; 9
3086: 80 93 57 00 sts 0x0057, r24 ; 0x800057 <__EEPROM_REGION_LENGTH__+0x7f0057>
308a: 84 91 lpm r24, Z
308c: 8e 7f andi r24, 0xFE ; 254
308e: 91 f0 breq .+36 ; 0x30b4 <Application_Jump_Check+0x34>
{
/* If the reset source was not an external reset or the key is correct, clear it and jump to the application */
if (!(MCUSR & (1 << EXTRF)) || (MagicBootKey == MAGIC_BOOT_KEY))
3090: 04 b6 in r0, 0x34 ; 52
3092: 01 fe sbrs r0, 1
3094: 0a c0 rjmp .+20 ; 0x30aa <Application_Jump_Check+0x2a>
3096: 81 e0 ldi r24, 0x01 ; 1
3098: 20 91 94 01 lds r18, 0x0194 ; 0x800194 <__bss_end>
309c: 30 91 95 01 lds r19, 0x0195 ; 0x800195 <__bss_end+0x1>
30a0: 22 34 cpi r18, 0x42 ; 66
30a2: 3c 4d sbci r19, 0xDC ; 220
30a4: 19 f0 breq .+6 ; 0x30ac <Application_Jump_Check+0x2c>
30a6: 80 e0 ldi r24, 0x00 ; 0
30a8: 01 c0 rjmp .+2 ; 0x30ac <Application_Jump_Check+0x2c>
JumpToApplication = true;
30aa: 81 e0 ldi r24, 0x01 ; 1
/* Clear reset source */
MCUSR &= ~(1 << EXTRF);
30ac: 94 b7 in r25, 0x34 ; 52
30ae: 9d 7f andi r25, 0xFD ; 253
30b0: 94 bf out 0x34, r25 ; 52
30b2: 11 c0 rjmp .+34 ; 0x30d6 <Application_Jump_Check+0x56>
}
else
{
/* If the reset source was the bootloader and the key is correct, clear it and jump to the application;
* this can happen in the HWBE fuse is set, and the HBE pin is low during the watchdog reset */
if ((MCUSR & (1 << WDRF)) && (MagicBootKey == MAGIC_BOOT_KEY))
30b4: 04 b6 in r0, 0x34 ; 52
30b6: 03 fe sbrs r0, 3
30b8: 0a c0 rjmp .+20 ; 0x30ce <Application_Jump_Check+0x4e>
30ba: 81 e0 ldi r24, 0x01 ; 1
30bc: 20 91 94 01 lds r18, 0x0194 ; 0x800194 <__bss_end>
30c0: 30 91 95 01 lds r19, 0x0195 ; 0x800195 <__bss_end+0x1>
30c4: 22 34 cpi r18, 0x42 ; 66
30c6: 3c 4d sbci r19, 0xDC ; 220
30c8: 19 f0 breq .+6 ; 0x30d0 <Application_Jump_Check+0x50>
30ca: 80 e0 ldi r24, 0x00 ; 0
30cc: 01 c0 rjmp .+2 ; 0x30d0 <Application_Jump_Check+0x50>
* start key has been loaded into \ref MagicBootKey. If the bootloader started via the watchdog and the key is valid,
* this will force the user application to start via a software jump.
*/
void Application_Jump_Check(void)
{
bool JumpToApplication = false;
30ce: 80 e0 ldi r24, 0x00 ; 0
* this can happen in the HWBE fuse is set, and the HBE pin is low during the watchdog reset */
if ((MCUSR & (1 << WDRF)) && (MagicBootKey == MAGIC_BOOT_KEY))
JumpToApplication = true;
/* Clear reset source */
MCUSR &= ~(1 << WDRF);
30d0: 94 b7 in r25, 0x34 ; 52
30d2: 97 7f andi r25, 0xF7 ; 247
30d4: 94 bf out 0x34, r25 ; 52
}
#endif
/* Don't run the user application if the reset vector is blank (no app loaded) */
bool ApplicationValid = (pgm_read_word_near(0) != 0xFFFF);
30d6: 20 e0 ldi r18, 0x00 ; 0
30d8: 30 e0 ldi r19, 0x00 ; 0
30da: f9 01 movw r30, r18
30dc: 45 91 lpm r20, Z+
30de: 54 91 lpm r21, Z
/* If a request has been made to jump to the user application, honor it */ //
if (JumpToApplication && ApplicationValid)
30e0: 88 23 and r24, r24
30e2: b9 f0 breq .+46 ; 0x3112 <__do_copy_data>
30e4: 4f 3f cpi r20, 0xFF ; 255
30e6: 5f 4f sbci r21, 0xFF ; 255
30e8: a1 f0 breq .+40 ; 0x3112 <__do_copy_data>
{
/* Turn off the watchdog */
MCUSR &= ~(1 << WDRF);
30ea: 84 b7 in r24, 0x34 ; 52
30ec: 87 7f andi r24, 0xF7 ; 247
30ee: 84 bf out 0x34, r24 ; 52
);
}
else
{
uint8_t register temp_reg;
__asm__ __volatile__ (
30f0: 0f b6 in r0, 0x3f ; 63
30f2: f8 94 cli
30f4: a8 95 wdr
30f6: 80 91 60 00 lds r24, 0x0060 ; 0x800060 <__DATA_REGION_ORIGIN__>
30fa: 88 61 ori r24, 0x18 ; 24
30fc: 80 93 60 00 sts 0x0060, r24 ; 0x800060 <__DATA_REGION_ORIGIN__>
3100: 10 92 60 00 sts 0x0060, r1 ; 0x800060 <__DATA_REGION_ORIGIN__>
3104: 0f be out 0x3f, r0 ; 63
wdt_disable();
/* Clear the boot key and jump to the user application */
MagicBootKey = 0;
3106: 10 92 95 01 sts 0x0195, r1 ; 0x800195 <__bss_end+0x1>
310a: 10 92 94 01 sts 0x0194, r1 ; 0x800194 <__bss_end>
// cppcheck-suppress constStatement
((void (*)(void))0x0000)();
310e: f9 01 movw r30, r18
3110: 09 95 icall
00003112 <__do_copy_data>:
3112: 11 e0 ldi r17, 0x01 ; 1
3114: a0 e0 ldi r26, 0x00 ; 0
3116: b1 e0 ldi r27, 0x01 ; 1
3118: ea eb ldi r30, 0xBA ; 186
311a: fd e3 ldi r31, 0x3D ; 61
311c: 02 c0 rjmp .+4 ; 0x3122 <__do_copy_data+0x10>
311e: 05 90 lpm r0, Z+
3120: 0d 92 st X+, r0
3122: a6 38 cpi r26, 0x86 ; 134
3124: b1 07 cpc r27, r17
3126: d9 f7 brne .-10 ; 0x311e <__do_copy_data+0xc>
00003128 <__do_clear_bss>:
3128: 21 e0 ldi r18, 0x01 ; 1
312a: a6 e8 ldi r26, 0x86 ; 134
312c: b1 e0 ldi r27, 0x01 ; 1
312e: 01 c0 rjmp .+2 ; 0x3132 <.do_clear_bss_start>
00003130 <.do_clear_bss_loop>:
3130: 1d 92 st X+, r1
00003132 <.do_clear_bss_start>:
3132: a4 39 cpi r26, 0x94 ; 148
3134: b2 07 cpc r27, r18
3136: e1 f7 brne .-8 ; 0x3130 <.do_clear_bss_loop>
3138: 82 d0 rcall .+260 ; 0x323e <main>
313a: 3d c6 rjmp .+3194 ; 0x3db6 <_exit>
0000313c <__bad_interrupt>:
313c: 61 cf rjmp .-318 ; 0x3000 <__vectors>