Цитата(Sobol' @ Jan 13 2015, 13:23)

мега88а пользуется такой популярностью только из-за пикопауэра? Или в ней есть еще какие-то вкусности?
Начну с того, что эта популярность возникла не из-за "пикопауэра", а гораздо раньше, где-то в 2005-2005 годах, когда "пикопауэра" еще и в помине не было. Именно к этому времени относится рождение Меги-88 и документа "
Replacing ATmega8 by ATmega88, подробно объясняющего, почему " ATmega88 is not designed to be a replacement for ATmega8, but is pin compatible and has a very similar feature set." Поэтому можно уверенно заявить, что не "пикопауэр" придал Меге-88 популярность, а, напротив, уже имеющаяся популярность Меги-88 явилась поводом, чтобы наградить ее "пикопауэром".
Теперь об истинных причинах популярности Меги-88. Здесь, полагаю, дело в том, что при масштабировании в сторону расширения объемов памяти FLASH и SRAM (это гарвардская архитектура, а потому это разные пространства) приходится проходить через уровни, на которых архитектура AVR постепенно теряет преимущества и обретает недостатки. Оно и понятно, т.к. это все-таки 8-битная архитектура, эффективность которой неизбежно упадет, когда адреса памяти станут длинными. Однако это происходит не постепенно, а скачком при переходе через определенные границы.
Первый барьер - это увеличение SRAM (ОЗУ) за границу 256 байт. С этого момента для обращения к памяти требуется заполнять уже не один регистр адреса, а два. Стало быть, заметно падает скорость обращения к памяти, т.к. формирование адреса следует отнести к накладным расходам. Здесь же приходится учитывать, что регистры управления периферией также находятся в этом же 256-битном объеме, а потому реальный размер SRAM, будет еще меньше. Поэтому чемпионом в легком весе у нас будет
ATtiny2313 (или ее близкие по параметрам аналоги). Этот МК подошел вплотную к первому барьеру, но не перешагнул его. Регистры периферии занимают у него 96 байт, а SRAM - 128 байт.
Второй барьер - это увеличение FLASH (ПЗУ) за границу 8 Кбайт. За переделы области 8 Кб не достают команды безусловного перехода (IJMP) и вызова подпрограммы/функции (ICALL). Ведь команды в архитектуре AVR 16-разрядные, где на адрес выделено 12 бит (остальные 4 - код операции), а 12 бит - это 4096 слов кода или 8 Кб. Здесь еще крайне неприятным моментом становится то, что замедляется вызов обработчиков прерываний, т.к. таблица адресов прерываний состоит из команд перехода. За границей 8 Кб FLASH переход придется делать длинными джампами, что не только увеличит таблицу прерываний, но и замедлит выполнение самих переходов. Однако пока границу 8 Кб мы не перешли, имеем чемпиона в среднем весе - это место разделяют
ATmega8 и ATmega88. У второго из них оптимизирована система регистров управления периферией, а потому он в этой паре чуточку предпочтительней.
Третий барьер - это увеличение FLASH (ПЗУ) за границу 128 Кбайт. Теперь за эту границу не достает даже длинный JMP, и более того - адрес не помещается в регистровую пару, для этого предназначенную. Как жить в этой ситуации рассказывать не стану, а выскажу лишь рекомендацию, что в этом случае надо перестать мучать AVR и переходить на 32-разрядные МК. Т.е. здесь не архитектура AVR виновата, а ваши запросы явно выросли из возможностей ее дальнейшего масштабирования вширь. Но на краю 128 Кб мы имеем чемпиона в тяжелом весе - это
ATmega128 или ATxmega128.
Вот эти три чемпиона и будут награждены золотыми медалями и окажутся наиболее популярными среди потребителей. Все это очень хорошо ложится на статистику, ранее приведенную halfdoom'ом:
Цитата(halfdoom @ Jan 13 2015, 11:18)

Статистика одной конторы по промконтроллерам за определенный период:
ATMega88A(P) - 2335
ATMega8(A) - 823
ATTiny2313 - 704
ATMega328P - 311
ATMega128 - 302 (изъят из перечня по различным соображениям)
Здесь, помимо ожидаемых, в призерах оказался ATMega328P, но это произошло, скорее всего, потому, что задачи той конторы оказались таковы, что услуги тяжеловеса в каких-то задачах показались им избыточными и слишком дорогостоящими, вот и они выбрали исполнителя рангом поменьше.
Возможно, своим признанием я и подмочу свою репутацию

, однако расскажу, что когда я решила "по-быстрому" заменить Мегу-8 на Мегу-88 (а она у меня в ту же панельку DIP28 влезала и по цоколевке подходила), и с этой целью полезла в ее датаашит, чтобы "чуть-чуть подправить" программу, то у меня глазища из орбит вылезли и я от этой идеи сразу же отказалась. Отказалась потому, что поняла, что тут не "чуть-чуть", а под 88-ю всю программу надо переписывать заново. Вот настолько велики отличия!
И хотя 88-я Мега меня и победила

, я все равно скажу, что она хороша. Просто мне надо было сразу с 88-ой начинать, а она в то время была труднее доставаема (особенно в DIP-корпусе) и заметно дороже. Ну, а после того, как я успела к Меге-8 привыкнуть, переход на Мегу-88 показался не стоящим усилий по ее освоению, т.к. все, что мне требовалось, я к тому времени уже реализовала на Меге-8. Нынче же я даже Х-Мегу программировать умею, но 88-ю так и не освоила - перепрыгнула через нее

.
Тем не менее, я вполне могу объяснить причины своего испуга от столкновения с Мегой-88. Однако рассказ придется начинать издалека, т.к. причины глубоко зарыты в прошлом. Надеюсь, что мой рассказ окажется для вас не только интересным, но и полезным.
Дело в том, что архитектура МК это не только система его инструкций, но и множество регистров, управляющих периферией. Если мы сравним AVR-ки сегодняшнего дня с первыми AVR-ками, то обнаружим, что их система инструкций практически не претерпела изменений, фактически сохранившись такой же, какой было задумана изначально. Между тем, развитие самих контроллеров, построенных на AVR-архитектуре, впечатляет своим размахом! Т.е. здесь эволюционные изменения в минимальной степени затронули систему команд/инструкций, а сосредоточились почти исключительно на регистрах управления периферией, которые за это время множились, пропорционально развитию периферии и ее усложнению.
Например, если МК снабдили вторым, дополнительным, UART-интефейсом, то система инструкций у него от этого не изменится, однако потребуются дополнительные регистры для доступа к приемнику, передатчику нового UART'а, к его статусу, флагам готовности, масками прерывания, установки скорости и прочих параметров передачи. А старшие модели сегодняшнего дня имеют порой так много периферии, что от числа регистров рябит в глазах, и даже программисты не знают, сколько их там всего.
Но хуже всего, что в процессе этой эволюции дополнительную периферию пристраивали в тому, что было в предшествующей модели, стараясь обеспечить максимальную совместимость кода. Из-за этого старые регистры с места не сдвигали, а новые рассовывали по пустым местам или в конец списка. А порой отдельные биты контроля/управления новой периферией вставляли в незанятые места старых регистров. В результате такой практики получалась куча-мала, когда, скажем, программированию каждым таймером приходилось учиться заново.
Скажем, когда-то на заре AVR-архитектуры (AT90S1200) таймер был только один, 8-разрядный (Timer 0). Со временем у МК появился еще один таймер, на этот раз 16-разрядный (Timer 1). В управлении эти таймеры отличались, как небо и земля. Потом у каких-то МК стали появляться третий (Timer 2), а то и четвертый таймер (Timer 3), из-за чего порой получался целый зоопарк, т.к. по каким-то причинам было невозможно придать дополнительным таймерам все без исключения функции, которыми обладал Timer 1. То ног в корпусе не хватало, чтобы ввести счетный вход, то выходов, чтобы вывести наружу PWM. Вот и получалось "сборная солянка", отражающая исторический путь прилаживания всевозможных пристроек.
Так вот появление Меги-88 ознаменовался тем значительным событием, что в регистрах попытались навести порядок, даже ценой отказа от совместимости. Впрочем, не сложно догадаться, что и в прошлом эта совместимость сильно хромала. И тут просто дошли до ручки и на эту совместимость решили наплевать. В результате этой революции число регистров увеличилось, т.к. от совмещения функций отказались. Впрочем, я думаю, что эту революцию стоило провести еще решительнее - например, отказаться от атавизма 8-разрядности Timer 0. Но почему-то это сделать не решились. Тем не менее, подвижка была весьма значительной.
Именно по этим причинам, проектируя МК с архитектурой AVR в наше время, совершенно не стоит повторять атавистические функции регистров, свойственные предшественникам Меги-88. И если Atmel решился-таки на революцию в этом деле и ее поддержали разработчики компиляторов, то возвращаться к прошлому нет никакого резона.
Цитата(Sobol' @ Jan 13 2015, 11:12)

Есть идея добавить команду 1/x, нннада? Какие еще полезные команды не реализованы у атмелек?
А вот этого делать ни в коем случае не надо! Т.к. любой отход от системы команд повлечет гораздо более болезненные последствия, нежели польза от новой команды/инструкции. Основной вред от такой самодеятельности состоит в том, что разработчики компиляторов едва ли подержат вашу новую инструкцию, а потому ее можно будет использовать только на ассемблере, на котором большинство электронщиков либо успели разучиться работать, либо никогда этого не умели

. А вот вводить новые регистры вы можете (если найдете для них место

) - это совместимость с компиляторами не нарушит.
Поэтому мой совет "выпендриться" будет таков - лучше увеличьте объем SRAM у вашего клона Меги-88 вдвое (до 2 Кб против оригинальных 1 Кб) и этой фичей вы, возможно, переплюните китайский клон в популярности

. А надежды на "пикопауэр" бросьте, вам по этому параметру не Atmel, ни китайцев, никогда не превзойти.