-

Почему я работаю с AVR?

 

Несколько лет назад назрела необходимость перехода с SAB535 (это расширенный 8051) на что-то поновее. Требования к контроллеру были следующие:

  •  встроенная память программ

  •  быстродействие получше, чем 1 мкс

  •  простота программатора

  •  бесплатный компилятор

  •  недорогой

По сути, выбор свелся к PIC 16-й серии и AVR. Примерно одинаковая стоимость, примерно одинаковые возможности, бесплатная среда программирования (MPLAB и AStrudio). Поначалу я взялся за PIC - сбитый с толку фразой "всего 38 команд для изучения" или что-то похожее, точно не помню.

Кстати, ATMEL пошел по другому пути и в своем даташите гордо заявляет "118 крутейших команд", хотя при ближайшем рассмотрении приличная их часть просто разные мнемоники одного и того же. Это я к тому, что ни в коем случае я не расхваливаю AVR - у них есть свои недостатки. И в описании системы команд я их постарался указать.

Но я отвлекся. Итак, взял PIC - 16F873 - и начал с ним осваиваться. И тут выяснились очень неприятные детали.

  • Всего один вектор прерывания. Попав в обработчик прерывания, надо прежде всего выяснить, что же собственно это прерывание вызвало.

  • Отсутствие стека! Я имею в виду стек, куда можно по человечески сохранить что-нибудь командами push/pop. Хотя, наверное, при его (PICа)  архитектуре стек и в самом деле не особо нужен.

  • Дырявая память. То есть адресное пространство хитрым образом побито на банки, причем в начале каждого банка расположены регистры ввода-вывода. К тому же - банки требуется переключать, да не просто переключать - а еще переключать по разному для прямой и для косвенной адресации. Может быть, при использовании ЯВУ это малосущественно, но для ассемблера - прямой путь к глупым (и потому трудноловимым) ошибкам.

  • Даже длинный переход сделать в нем проблематично - нужно сначала писать старшие биты адреса в специальный регистр. Такое впечатление, что весь девайс - заплатка на заплатке.

  • И еще куча всяких "мелочей" - таких, как единственный индексный регистр, противоположные признаки при выполнении вычитания, отсутствие арифметики с учетом переноса... Да и сама архитектура с  W регистром как-то неудобоварима. Хотя - тут, конечно, дело вкуса.

В общем, в результате на PICах я сделал всего три устройства - во первых, программатор для AVR (не сразу дошел я до простейшего), бегущие огни (до сих пор работают) и еще одно вспомогательное устройство - там понадобились два устройства capture, а megaAVR тогда еще не было.

Позже, правда, появилась 18-я серия PICов, в которой многое из вышеописанного уже было поправлено, но я к тому времени уверенно работал с AVR и переходить на PIC смысла никакого не было. А потом попробовал работать с Algorithm Builder - и теперь AVRы ни на что не променяю ;-) очень уж удобно. 

И еще раз напомню - это мое личное мнение, никому не навязываемое!



смесители для кухни Волгоград, oxy ·· Заметки, посоветуйте курсы бухгалтеров киев.  

(с)nml 10-Jul-2009