реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> bootloader в WinAVR, к вопросу оптимизации
Сергей Борщ
сообщение Jun 30 2011, 05:50
Сообщение #16


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (MaxiMuz @ Jun 29 2011, 09:56) *
И часто случается что каждый байт на счету. Поэтому 128 байт - тоже обьем, и принцып тут ни причем
У вас такое бывало? Вероятнее всего - нет. Ибо ужать 2К программу на 128 байт обычно не составляет труда. Дальнейшая дискуссия неинтересна - вы спорите о вкусе устриц с теми, кто их ел.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
MaxiMuz
сообщение Jul 2 2011, 06:06
Сообщение #17


Местный
***

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



Цитата(Сергей Борщ @ Jun 30 2011, 08:50) *
У вас такое бывало? Вероятнее всего - нет. Ибо ужать 2К программу на 128 байт обычно не составляет труда. Дальнейшая дискуссия неинтересна - вы спорите о вкусе устриц с теми, кто их ел.

У меня в ближайшем будущем стоит задача ужать хотябы на 100Б код для АТтини2313 ... Прога писана в Ассеблере, изначально уже оптимизирована и по обьему кода и по скорости. В случае написании на Си и оптимизации по обьему (Оs), код , я думаю , тоже будет ужат нормально, а этих 128Б может как раз не хватить
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 5 2011, 00:22
Сообщение #18


кекс
******

Группа: Свой
Сообщений: 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 байт (чаще больше) аппликейшину, а там они явно нужнее.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 5 2011, 09:03
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (defunct @ Jul 5 2011, 03:22) *
Функционал который со скрипом влезет в самую большую бут секцию (2kb) с макс оптимизацией на WinAVR, - на асм поместится в самую маленькую бутсекцию из 256 байт. Достигается это за счет оптимальных прологов/эпилогов функций и исключительно регистровых переменных.

Как человек неоднократно писавший загрузчики размером от 128байт до 16килобайт, как на ASM, так и на С для самых разных контроллеров, не могу не сказать, что соотношение 256 и 2048 есть абсолютный бред. Для получения такого "результата" нужно писать даже не левой ногой, а протезом левой ноги и после многократной лоботомии. На прикладных программах в десятки килобайт, ситуация с ASM становится еще печальнее, если программа создается за конечное время.
QUOTE
какой бы ключик оптимизации не ставили.

Голову на плечах иметь надо, а продуманные ключики оптимизации это дело абсолютно обязательное, но не они задают уровень качества полученного продукта.

QUOTE (defunct @ Jul 5 2011, 03:22) *
не понимаю я bootloader'ы в WinAVR, CV, ICC или еще какой-то байде, для бутсекций в 2kb.

Совершенно достаточный размер для более,чем многофункционального загрузчика. Все, что больше 1K редко способно выдержать конкуренцию с C. Ниша ASM загрузчиков заканчивается на уровне 128...256, максимум 512 байт. Дальше в 99% совершенно бессмысленно, даже при наличии хорошего опыта и больших шишек в ASM-описании. Результат-же большинства писателей на ASM (читай тех, кто только уровень ASM сумел понять и принять) вообще начинает не лезть в никакие ворота sad.gif. Вышесказанное, естественно, совершенно не означает того, что любой освоивший copy-paste мусора из интернету и прочитавший книгу типа Редькинской способен вообще что-то вменяемое написать на C. Тут порог вхождения в качественное программирование повыше будет.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 5 2011, 12:59
Сообщение #20


кекс
******

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



Цитата(zltigo @ Jul 5 2011, 12:03) *
Для получения такого "результата" нужно писать даже не левой ногой, а протезом левой ноги и после многократной лоботомии. На прикладных программах в десятки килобайт, ситуация с ASM становится еще печальнее, если программа создается за конечное время.

Достаточно одного неаккуратного оператора "*", "/" чтобы занять 2KB в 8-ми битнике.
Речь не о прикладных программах. Bootloader имеет самое постоянное и самое длительное время жизни. Требует высокой скорости работы, компактности и функционала.

То что там состряпает winavr и есть код писанный протезом левой ноги.

Цитата
Совершенно достаточный размер для более,чем многофункционального загрузчика.

При условии что есть возможность поместить тот же функционал в 1KB, тратить 2KB неразумно.

Цитата
Все, что больше 1K редко способно выдержать конкуренцию с C.

загрузчик по TFTP через ethernet на asm укладывается в 2KB секцию.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 5 2011, 13:22
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (defunct @ Jul 5 2011, 15:59) *
Bootloader имеет самое постоянное и самое длительное время жизни. Требует высокой скорости работы,

Скорость работы ему требуется в последнюю очередь, ибо работает он редко, в идеале никогда.
QUOTE
компактности и функционала.

Компактность и функционал должны быть достаточными, а не самоцелью.
QUOTE
То что там состряпает winavr и есть код писанный протезом левой ноги.

То, что Вы назвали winavr, есть GCC. Не самый плохой компилятор. Делает то, что ему прикажут. Для AVR, правда, есть и получше.
QUOTE
При условии что есть возможность поместить тот же функционал в 1KB, тратить 2KB неразумно.

Повторяю, cегодня, а не в середине 80x, на уровне программ размером 1-2K выигрыша в два раза между ASM и профессионально написанным C не бывает.
Двухкратным превосходством можете изредка себя тешить на кусочках программ с единицы-десятки байт.
QUOTE
загрузчик по TFTP через ethernet на asm укладывается в 2KB секцию.

TFTP/UDP/IP как раз тот случай когда смысл использования ASM равен ровно нулю. Проверено неоднократно. Та-же поддержка сети в на рубеже 80/90х писалась для своей операционки на 286 на ASM. На ASM тогда писалось все по причине того, что 12MHz 286 был отнюдь не гигант производительности и экономился каждый такт в системе жесткого реального времени с эмулятором виртуальной машины. Всякие фокусы, типа модифицируемого на лету кода тоже приходилось использовать. Доступные тогда C компиляторы были совершенно сырыми sad.gif. Эта фигня, как ни странно, живет и немного сопровождается по сей день. Не переписана на C по двум причинам - там все-таки набежало более 120K кода, что по любому немалая работа, и в общем-то это уже лет 10 минимум развивать бессмысленно.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 08:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.01503 секунд с 7
ELECTRONIX ©2004-2016