|
bootloader в WinAVR, к вопросу оптимизации |
|
|
|
Jun 25 2011, 16:58
|

Местный
  
Группа: Участник
Сообщений: 253
Регистрация: 15-04-10
Из: Волгоград
Пользователь №: 56 658

|
Простая программка: Код ************************************************ ПРИМЕР МИГАНИЯ СВЕТОДИОДАМИ ************************************************ #include <avr/io.h>
int main(void) { PORTB |=_BV(PB2) | _BV(PB0); DDRB |= _BV(PB0); while (1) { if (bit_is_clear(PINB,PB2)) PORTB |= _BV(PB0); else PORTB &= ~_BV(PB0); } } Использовал различные уровни оптимизации (OPT = s в данном случае) Команда: "make.exe" all выдает следующий протокол: Код Creating load file for Flash: test.hex avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature test.elf test.hex
Creating load file for EEPROM: test.eep avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" \ --change-section-lma .eeprom=0 --no-change-warnings -O ihex test.elf test.eep || exit 0
Creating Extended Listing: test.lss avr-objdump -h -S -z test.elf > test.lss
Creating Symbol Table: test.sym avr-nm -n test.elf > test.sym
Size after: AVR Memory Usage ---------------- Device: attiny2313
Program: 114 bytes (5.6% Full) (.text + .data + .bootloader)
Data: 0 bytes (0.0% Full) (.data + .bss + .noinit)
-------- end --------
> Process Exit Code: 0 > Time Taken: 00:02 Получается вот такой код: Код test.elf: file format elf32-avr
Sections: Idx Name Size VMA LMA File off Algn 0 .text 00000072 00000000 00000000 00000054 2**1 CONTENTS, ALLOC, LOAD, READONLY, CODE 1 .debug_aranges 00000020 00000000 00000000 000000c6 2**0 CONTENTS, READONLY, DEBUGGING 2 .debug_pubnames 0000001b 00000000 00000000 000000e6 2**0 CONTENTS, READONLY, DEBUGGING 3 .debug_info 00000076 00000000 00000000 00000101 2**0 CONTENTS, READONLY, DEBUGGING 4 .debug_abbrev 00000041 00000000 00000000 00000177 2**0 CONTENTS, READONLY, DEBUGGING 5 .debug_line 00000073 00000000 00000000 000001b8 2**0 CONTENTS, READONLY, DEBUGGING 6 .debug_frame 00000020 00000000 00000000 0000022c 2**2 CONTENTS, READONLY, DEBUGGING 7 .debug_str 00000079 00000000 00000000 0000024c 2**0 CONTENTS, READONLY, DEBUGGING Disassembly of section .text:
00000000 <__vectors>: 0: 12 c0 rjmp .+36; 0x26 <__ctors_end> 2: 2a c0 rjmp .+84; 0x58 <__bad_interrupt> 4: 29 c0 rjmp .+82; 0x58 <__bad_interrupt> 6: 28 c0 rjmp .+80; 0x58 <__bad_interrupt> 8: 27 c0 rjmp .+78; 0x58 <__bad_interrupt> a: 26 c0 rjmp .+76; 0x58 <__bad_interrupt> c: 25 c0 rjmp .+74; 0x58 <__bad_interrupt> e: 24 c0 rjmp .+72; 0x58 <__bad_interrupt> 10: 23 c0 rjmp .+70; 0x58 <__bad_interrupt> 12: 22 c0 rjmp .+68; 0x58 <__bad_interrupt> 14: 21 c0 rjmp .+66; 0x58 <__bad_interrupt> 16: 20 c0 rjmp .+64; 0x58 <__bad_interrupt> 18: 1f c0 rjmp .+62; 0x58 <__bad_interrupt> 1a: 1e c0 rjmp .+60; 0x58 <__bad_interrupt> 1c: 1d c0 rjmp .+58; 0x58 <__bad_interrupt> 1e: 1c c0 rjmp .+56; 0x58 <__bad_interrupt> 20: 1b c0 rjmp .+54; 0x58 <__bad_interrupt> 22: 1a c0 rjmp .+52; 0x58 <__bad_interrupt> 24: 19 c0 rjmp .+50; 0x58 <__bad_interrupt>
00000026 <__ctors_end>: 26: 11 24 eor r1, r1 28: 1f be out 0x3f, r1; 63 2a: cf ed ldi r28, 0xDF; 223 2c: cd bf out 0x3d, r28; 61
0000002e <__do_copy_data>: 2e: 10 e0 ldi r17, 0x00; 0 30: a0 e6 ldi r26, 0x60; 96 32: b0 e0 ldi r27, 0x00; 0 34: e2 e7 ldi r30, 0x72; 114 36: f0 e0 ldi r31, 0x00; 0 38: 02 c0 rjmp .+4 ; 0x3e <.do_copy_data_start>
0000003a <.do_copy_data_loop>: 3a: 05 90 lpm r0, Z+ 3c: 0d 92 st X+, r0
0000003e <.do_copy_data_start>: 3e: a0 36 cpi r26, 0x60; 96 40: b1 07 cpc r27, r17 42: d9 f7 brne .-10; 0x3a <.do_copy_data_loop>
00000044 <__do_clear_bss>: 44: 10 e0 ldi r17, 0x00; 0 46: a0 e6 ldi r26, 0x60; 96 48: b0 e0 ldi r27, 0x00; 0 4a: 01 c0 rjmp .+2 ; 0x4e <.do_clear_bss_start>
0000004c <.do_clear_bss_loop>: 4c: 1d 92 st X+, r1
0000004e <.do_clear_bss_start>: 4e: a0 36 cpi r26, 0x60; 96 50: b1 07 cpc r27, r17 52: e1 f7 brne .-8 ; 0x4c <.do_clear_bss_loop> 54: 02 d0 rcall .+4 ; 0x5a <main> 56: 0b c0 rjmp .+22; 0x6e <_exit>
00000058 <__bad_interrupt>: 58: d3 cf rjmp .-90; 0x0 <__vectors>
0000005a <main>: 5a: 88 b3 in r24, 0x18; 24 5c: 85 60 ori r24, 0x05; 5 5e: 88 bb out 0x18, r24; 24 60: b8 9a sbi 0x17, 0; 23 62: b2 99 sbic 0x16, 2; 22 64: 02 c0 rjmp .+4 ; 0x6a <main+0x10> 66: c0 9a sbi 0x18, 0; 24 68: fc cf rjmp .-8 ; 0x62 <main+0x8> 6a: c0 98 cbi 0x18, 0; 24 6c: fa cf rjmp .-12; 0x62 <main+0x8>
0000006e <_exit>: 6e: f8 94 cli
00000070 <__stop_program>: 70: ff cf rjmp .-2 ; 0x70 <__stop_program> Собственно полезный код занимает десяток байт , таблица векторов прерваний - это понятно, далее секция <__ctors_end>: первые две команды - обнуление SREG ! Для каких это целей ? Оставшийся код как я понимаю bootloader ? зачем он тут нужен ? Как исключить его из кода ?
Сообщение отредактировал MaxiMuz - Jun 25 2011, 17:02
|
|
|
|
|
 |
Ответов
|
Jul 5 2011, 00:22
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата В случае написании на Си и оптимизации по обьему (Оs), код , я думаю , тоже будет ужат нормально, а этих 128Б может как раз не хватить не понимаю я bootloader'ы в WinAVR, CV, ICC или еще какой-то байде, для бутсекций в 2kb. Если старая программа написана на asm'е да еще и соптимизирована, то на Си вы просто ни при каких обстоятельствах не сможете добиться такого функционала в том же объеме, не говоря уже о расширении оного. Функционал который со скрипом влезет в самую большую бут секцию (2kb) с макс оптимизацией на WinAVR, - на асм поместится в самую маленькую бутсекцию из 256 байт. Достигается это за счет оптимальных прологов/эпилогов функций и исключительно регистровых переменных. Реализция бутлоадера на Сях оправдана разве только "тайм ту маркетом" либо большим объемом флеш целевого МК. На С vs ASM, вы всегда потеряете или функциональность, или объем, или скорость, или всё сразу, какой бы ключик оптимизации не ставили. Цитата(Сергей Борщ @ Jun 30 2011, 08:50)  У вас такое бывало? Ибо ужать 2К программу на 128 байт обычно не составляет труда. Дальнейшая дискуссия неинтересна - вы спорите о вкусе устриц с теми, кто их ел. У меня вот что есть сказать, - бутсекция 1кб - поддержка: modbus по 485-му, загрузка с внешней eeprom'ки, CRC апп секции, шифрование в обе стороны... Портирование между МК байты приходится искать вставляя код в неиспользуемые ячейки таблицы векторов, проект собирается ровно в 1024байт ни одной свободной ячейки флеш (портировать с m8 напр на m16 - занятие не особо веселое, и найти там не то что 128, 8 байт без урезания функционала - большая проблема). Зато освобождается целый 1кб под апликейшин, для 8/16кб флешевых чипов - очень актуально. Бутлоадер - это такой тип программы, где простота найти 128 байт - означает недодать эти 128 байт (чаще больше) аппликейшину, а там они явно нужнее.
|
|
|
|
Сообщений в этой теме
MaxiMuz bootloader в WinAVR Jun 25 2011, 16:58 _Артём_ ЦитатаОставшийся код как я понимаю bootloader ?
з... Jun 25 2011, 18:06 Taradov Alexander Оставшийся код - это то, что позволяет неинициализ... Jun 25 2011, 18:19  MaxiMuz Цитата(Taradov Alexander @ Jun 25 2011, 21... Jun 25 2011, 20:38   zltigo QUOTE (MaxiMuz @ Jun 25 2011, 22:38) я по... Jun 25 2011, 20:49    MaxiMuz Цитата(zltigo @ Jun 25 2011, 23:49) P.S.
... Jun 26 2011, 06:48     Taradov Alexander QUOTE (MaxiMuz @ Jun 26 2011, 10:48) А на... Jun 26 2011, 08:24     zltigo QUOTE (MaxiMuz @ Jun 26 2011, 08:48) Друг... Jun 26 2011, 08:38    MaxiMuz Цитата(zltigo @ Jun 25 2011, 23:49) Это м... Jun 27 2011, 15:59     Палыч Цитата(MaxiMuz @ Jun 27 2011, 19:59) Непо... Jun 27 2011, 16:40      MaxiMuz Цитата(Палыч @ Jun 27 2011, 19:40) ... Ес... Jun 28 2011, 07:17       jorikdima Цитата(MaxiMuz @ Jun 28 2011, 11:17) можн... Jun 28 2011, 10:30        MaxiMuz Цитата(jorikdima @ Jun 28 2011, 13:30) У ... Jun 29 2011, 06:56         Сергей Борщ QUOTE (MaxiMuz @ Jun 29 2011, 09:56) И ча... Jun 30 2011, 05:50          MaxiMuz Цитата(Сергей Борщ @ Jun 30 2011, 08:50) ... Jul 2 2011, 06:06 XVR То, что вы видели называется Statrup. Он написан н... Jun 27 2011, 08:51 alexeyv ЦитатаПоэтому 128 байт - тоже обьем, и принцып тут... Jun 30 2011, 05:45 zltigo QUOTE (defunct @ Jul 5 2011, 03:22) Функц... Jul 5 2011, 09:03  defunct Цитата(zltigo @ Jul 5 2011, 12:03) Для по... Jul 5 2011, 12:59   zltigo QUOTE (defunct @ Jul 5 2011, 15:59) Bootl... Jul 5 2011, 13:22
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|