Цитата(ms1 @ Dec 24 2005, 03:40)

PS: Что то мы все хвалим, хвалим.
Поругайте что ли хоть кто нибудь.

Поругать? Это пожалуйста.

Итак. AVR при всех прекрасных инновационных идеях очень пострадал в плане реализации.
1) Регистровый файл. У AVR слишком много регистров при том, что используются они бестолково. Например, они неортогональны - нижняя половина регистров не может использоваться так же как верхняя, из-за чего регистры с 16-го по 31-й используются гораздо чаще, чем с 0-го по 15-й. И это мягко сказано - реально верхняя половина используется чуть ли не в 90% случаев. Т.е. можно было бы отказаться от нижней половины, при этом бы появился хоть и небольшой, но ресурс для улучшения функциональности - большое количество регистров небесплатно дается.
Далее. В сегменте r16:r31 тоже не все хорошо. Там не все регистры так же ортогональны - для адресной арифметики подходят только четыре верхних регистровых пары, а для адресации - только три из них. Причем и среди регистровых пар-указателей тоже отогональности нет - в итоге имеем не три указателя, а в лучшем случае два с половиной (Z, Y - полноценные, X - ущербный, у него нет очень важного режима адресации со смещением - этот режим адресации является, по сути, ключевым при используемой в AVR архитекитуре Load/Store). А в виду отсутствия нормального указателя стека (или отдельного фреймпоинтера) - об этом ниже, - остается только полтора указателя... Тут могут спросить: "А чего до этой отрогональности докопались, кому она мешает?" Ответ: ортогональность есть очень важный элемент, она очень сильно влияет на эффективность кода. Я как-то сравнивал оную эффективность между AVR и MSP430, ожидая, что уж на 8-битных-то данных AVR будет шустрее - гарвард как-никак. Ан нет, оказалось, что все далеко не так - у MSP430 как раз 12 РОН, которые полностью ортогональны - каждый из них может быть источинком данных, приемником, указателем для адресации данных и кода (когда функцию по адресу надо вызвать), т.е. обычная и адресная арифметика там совершенно прозрачны и после вычисления адресов не надо никуда ничего копировать, а можно прямо непосредственно работать с вычисленными адресами. В AVR, напротив, постоянно приходится копировать данные между Z-указателем и другими регистрами и на этом AVR в основном и "сливает". Будь у него все регистры с возможность образовывать регистровые пары, которые равнозначны и при вычислениях, и при адресации, все было бы гораздо веселей.
2) Указатель стека. Указатель стека у AVR (который SP) - просто убогий. SP совершенно не пригоден для работы с данными. Именно поэтому фирма IAR задействовала Y-указатель в качестве указателя стека (данных). Само по себе два стека есть неудобство, раз, и хоть и небольшой, но дополнительный расход ОЗУ, два. (Опять же, вспоминая MSP430, видно, что нормальный указатель стека прекрасно решает все задачи и по сохранению адресов возвратов, и по работе с данными). Но все весьма усугубляется тем, что указателей нормальных всего два - их и так почти нет, а тут еще один отдай! И из-за чего!??!
Кстати, avr-gcc не использует Y-pointer как указатель стека данных, все базирует на SP, иногда только используя Y в качестве Frame Pointer'а, но в итоге эффективность кода (и по размеру, и по скорости) получается еще хуже, т.е. IAR выбрала правильный подход.
3) Работа с памятью. Работа с памятью у AVR непростительно медленная для Load/Store архитектуры - два такта на обращение. Т.е. непростительно много времени уходит на пересылку между регистрами и памятью, а пересылка эта является совершенно неотъемлемой частью процесса работы МК и занимает очень большую долю. Иными словами, персылка память-регистр и регистр-память в AVR должна занимать 1 такт! Как это сделано в других процессорах с Load/Store архитектурой (например, ADSP-21xx и др.). И технических проблем тут не просматривается - шина данных 8 бит, шина адресов 16-бит. Т.ч. чисто реализация.
Итого, значительно лучший результат от AVR можно было бы ожидать будь у него не 32 теперешних регистра, а пусть 16, но образующих 8 регистровых пар-указателей полностью равнозначных, одна из которых образовывала бы указатель стека. Обращение в память за 1 такт. Такой AVR был бы раза в полтора-два быстрее сегодняшнего при той же тактовой.
Все перечисленное является плодом незрелости фирмы Атмел как процессоростроителя, делай они AVR сегодня, уверен, всех бы этих косяков им удалось бы избежать. На протяжении всего развития этого семейства отчетливо видна тенденция на улучшение и ядра, и периферии, и электрических характеристик (чего стОил только косяк со слетанием EEPROM или отстутствие средств определить, какой был старт (холодный, теплый) в AT90S8515 - в 8535 уже все появилось). Т.е. производитель сам рос по ходу развития AVR, набирался опыта. Но сегодня паровоз уже несколько ушел, есть требования по совместимости, поэтому все эти несуразности были, есть и будут.
К достоинствам AVR. Не буду повторять то, что уже сказали. Отмечу лишь, что очень важным и значимым достоинством этого МК является простота его освоения и использования. Это очень важный фактор, который на популярность влияет зачастую значительно больше, нежели фичи.
Цитата(=AK= @ Dec 24 2005, 08:13)

Имхо, Атмел ведет несерьезную политику в отношении пользователей AVR, третируя их как радиолюбителей и мелкосерийщиков с продуктами-однодневками. Атмел часто снимает с производства камни и заменяет их новыми, которые не полностью совместимы со старыми. Это значит, что долго выпускать изделие на AVR не удастся, придется регулярно их переделывать и проходить заново испытания.
Мелкочипы до такого маразма не опускаются, старые процы можно покупать, им просто задирают цену, "экономически" заставляя переползать на новые модели. При этом совместимость у PIC-ов хорошая. Есть у меня, например, изделие, запущенное в серию в 1998 году на PIC16C74А, выпускается оно до сих пор, только проц несколько лет назад сменили на PIC16F74, и то исключительно из экономии.
Еще работая на прошлой работе, была у меня разработка 1998 года, с 1999 года она в серии на заводе до сих пор. Там стоял 90S8515. Сегодня там стоит мега8515. Заменили ее без моего участия (как основного разработчика), никаких трудностей не испытали. Это при том, что завод там савеццкий ВПКшный, дубовость там высшей пробы. И ничего - асилили без единого вопроса. Т.ч. проблема, имхо, несколько надумана. Реально проблема может возникнуть, если чип снимается с производтства и ничего на замену не предлагается. Но Атмел так никогда не делал.