ikarab писал(а):Пишут не уж то правду ?
http://kazus.ru/forum/topics/15004.htmlВ проекте WinAVR при использовании "itoa" добавляется 180 байт, а в проекте CVAVR - 112, вот эта разница подрубает у меня всякую решительность. Но теперь даже не это важно. Просто принципиально непонятно как заставить этот код работать в WinAVR'e. Поэтому прошу помощи.
Это чистая правда.
А вопрос - как куски асма вставлять в WinAVR ?
Я отчётик о таком опыте оставил там, откуда Вы здесь меня процитировали.
2ARV. Притензий, кроме типовых, как и к любому компилятору языка высокого уровня у меня нет и не было. Тут всё понятно, и если решился - то будь готов к избыточности кода. Притензии были к библиотекам. Вот, нафига, собственно, такая и в таком виде функция "itoa" в "stdlib"? По "ключу" она формирует представление в "2", "16" или "10"... Это на мой взгляд чрезмерное увлечение универсальностью, применительно к МК, на которые и заточен весь WinAVR. Гуманнее было бы иметь три ф-ии, типа "itoa2", "itoa16" и "itoa10" - код короче. Далее, ещё прикол попался на глаза, открываем библиотеку LCD из avrlib (это типа SDK для WinAVR). Смотрим lcd.c:
Код: Выделить всё
LCD_DELAY; //waitУгу, запомнили, открываем lcd.h:
Код: Выделить всё
#if F_CPU >= 16000000
#define LCD_DELAY asm volatile ("nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n");
..................................................................................
Офигенная реализация.
Ну и ещё пару слов по асму. Я так и не понял идеи инлайнового асма в WinAWR. ИМХО, лучше он был бы реализован подобно CVAVR - простая вставка кода. Без вывертов, прозрачно.
Главная особенность в том, что в WinAVR не приветствуется использование явно указанных регистров в командах ассемблерных вставок - распределение регистров берет на себя компилятор, чтобы даже ассемблерные вставки оптимизировались!
Вот это ещё зачем? Если ты взялся, за АСМ в Си-проекте, то это как раз потому что тебя не устраивает "взгляд" компилятора с его "шаловливыми ручёнками".
WinAVR, кстати, нормально относится и к явному указанию регистров. Ну и с другой стороны, указатели ещё никто не отменял.
Всё здесь ИМХО, т.с. взгляд неискушённого любителя МК.