В свете известных сложностей с поставками и расценками на AVR, а также появлением нового семейства 8-разрядников STM8 перед разработчиками встают как минимум два вопроса:
1. Есть ли объективная необходимость замены ATmega в уже существующих проектах?
2. Насколько оправдано применение в новых проектах микроконтроллеров семейства STM8S вместо AVR? Необходимость замены AVR в готовых проектах, очевидно, полностью зависит от ситуации с поставками и ценами. Как долго продлится неопределенность в этом вопросе, на сегодняшний день никто с уверенностью сказать не может. Насколько предпочтительно применение в новых разработках STM8? Вопрос, кажется, логично разделить на две группы – доступность МК и средств разработки по цене и технические преимущества нового семейства STM, насколько они велики и оправдывают ли необходимость освоения новых микроконтроллеров и сред разработки.
Опустим (временно) тот факт, что при наличии у STM 32-разрядников Cortex по ценам близким к старшим моделям STM8 интереснее всё-таки говорить о замене AVR именно на Cortex. Текущий предмет исследования — серия STM8.
По первой группе вопросов доступности предлагаю сравнение двух практически эквивалентных по параметрам микроконтроллеров Atmega64 и STM8S207R8:
Параметры:
Цены:
Справедливости ради нужно сказать, что такие цены на микроконтроллеры AVR сформировались на фоне дефицита производства. В добрые времена стоимость ATmega64 составляла около 4$ за штуку, то есть приблизительно столько же сколько STM8S207R8 сегодня.
Средства разработки:
Быстродействие:
На форуме сайта kazus.ru имела место попытка провести сравнительный тест быстродействия архитектур AVR и STM8. Мнения участников, как по вопросу целесообразности такого сравнения, так и по его результатам были высказаны самые разные. В частности прозвучало мнение, что сравнивать восьмиразрядные микроконтроллеры по быстродействию занятие бессмысленное, так как в первом приближении c практической точки зрения все современные восьмиразрядные МК практически равнозначны, а при выборе той или иной архитектуры разумнее учитывать специфику конкретной задачи. Так же очевидно, что тест, написанный на языке Си, который в настоящее время преимущественно используется разработчиками, общем случае из-за особенностей компилятора может не учитывать преимущества конкретной архитектуры.
Тем не менее, коротенький тест, показал небольшое превосходство архитектуры STM8, благодаря способности ядра использовать в качестве одного из операндов инструкций любой регистр общего адресного пространства микроконтроллера.
unsigned char A,B,C; void SubRoutine(void); // Прототип функции. void main( void ) { DDRA=0xFF; // PORTA на выход. PORTA|=(1<<0); // Установить PA.0. A=1; B=2; // Инициализация переменных. SubRoutine(); // Уход в функцию. if (PINA&(1<<0)) PORTA&=~(1<<0); // Если PA.0 установлен, сбросить его. } void SubRoutine(void) { C=A+B; // Арифметика и возврат из функции. }
был выполнен микроконтроллерами STM8 и AVR за 21 и 27 тактов соответственно. Для большинства микроконтроллеров STM8 линейки Performance, способных работать на частотах до 24МГц, преимущество в скорости выполнения приведённого кода относительно AVR возрастает до 50%.
Периферия. EEPROM:
Одним из разочарований архитектуры AVR стала работа со встроенной памятью EEPROM. Это и большое время записи одного байта, достигающее нескольких миллисекунд и необходимость запрета прерываний при обращении к EEPROM и произвольная запись случайных данных при низкой скорости нарастания питающего напряжения.
Всех этих «особенностей” мы уже не встречаем у микроконтроллеров семейства STM8 – и длительность и сама процедура доступа к энергонезависимой памяти ничем не отличается от работы с обычными ячейками ОЗУ, за исключением необходимости пропуска одного такта на частотах выше 16МГц.