ikarab писал(а):Пишут не уж то правду ?
http://kazus.ru/forum/topics/15004.htmlВ проекте WinAVR при использовании "itoa" добавляется 180 байт, а в проекте CVAVR - 112, вот эта разница подрубает у меня всякую решительность. Но теперь даже не это важно. Просто принципиально непонятно как заставить этот код работать в WinAVR'e. Поэтому прошу помощи.
А вопрос - как куски асма вставлять в WinAVR ?
1. У меня был проект, относительно большой, под 12К итогового кода. Я обновил WinAVR и получил увеличение размера аж на 1,3К. Стал задавать вопросы и в конце концов получил ответ: в последнее время GCC вообще и AVR-GCC в частности развиваются в сторону агрессивной оптимизации по скорости. Проявляется это в том, что все бОльшие и бОльшие по размеру функции вставляются в код инлайном по умолчанию, ну и кое-какие другие вещи происходят. Разумеется, это вызывает видимое разрастание кода, хотя по скорости его исполнения предполагается выигрыш. Однако, GCC тем и отличается от CVAVR (мне так кажется), что предоставляет программисту богатейшие возможности для регулирования поведения компилятора. В частности, всю агрессию оптимизатора можно отклбючить или умерить. В общем, я сделал небольшую памятку по ключикам для оптимизации... короче, упомянутый выше проект в новой версии я собрал размером 9,8К - практически на 2К меньше, чем было! кстати, CVAVR, видимо, более лояльна к неаккуратности программиста, а GCC - четко следует стандарту. в итоге для WinAVR бывает достаточно написать static перед функциями, которые используются в единственном модуле, чтобы получить чуть ли не 10% экономии объема кода. Т.е. пишите грамотно - будет более оптимально.
2. С ассемблерными вставками в WinAVR тоже по сравнению с CVAVR двояко: с одной стороны мощность ассеблерных вставок умопомрачительная, а с другой - сложность их применения повыше будет. Главная особенность в том, что в WinAVR не приветствуется использование явно указанных регистров в командах ассемблерных вставок - распределение регистров берет на себя компилятор, чтобы даже ассемблерные вставки оптимизировались! кстати, благодаря тому, что WinAVR влезает оптимизатором и в ассемблерные вставки, частенько надо использовать volatile для ассемблера

Короче, тема ассемблерных вставок в WinAVR довольно обширна, а мне что-то подсказывает, что здесь не очень любят заморочки...