`

СПЕЦИАЛЬНЫЕ
ПАРТНЕРЫ
ПРОЕКТА

Архив номеров

Как изменилось финансирование ИТ-направления в вашей организации?

Best CIO

Определение наиболее профессиональных ИТ-управленцев, лидеров и экспертов в своих отраслях

Человек года

Кто внес наибольший вклад в развитие украинского ИТ-рынка.

Продукт года

Награды «Продукт года» еженедельника «Компьютерное обозрение» за наиболее выдающиеся ИТ-товары

 

Братья меньшие

0 
 

Краткий обзор "меньших братьев" универсальных компьютеров во всех их ипостасях -- микроконтроллеров -- мы начнем именно с объяснения причин, выводящих эту очень интересную тему из области "массово-интересной". Хотя бы потому, что сами причины заслуживают пристального внимания.

Братья меньшие
Контроллер i8051 более чем двадцатилетней давности. Несмотря на "возраст", по сей день чипы этой архитектуры остаются востребованными для самого разного применения -- начиная от копеечных реализаций для бытовой электроники и заканчивая радиационно-стойкими версиями космического назначения
Итак, почему же о действительно самых массовых компьютерах (сразу следует оговориться, что микроконтроллеры -- это более чем серьезные и вполне полноценные компьютеры) пресса предпочитает помалкивать? Первое объяснение вполне очевидно -- микроконтроллеры создаются для того, чтобы их присутствие в конечном продукте не обнаруживалось невооруженным глазом пользователя. Зачем человеку, каждое утро бреющемуся электробритвой, знать о том, что ее двигателем, жидкокристаллическим индикатором и зарядным устройством встроенного аккумулятора управляет N-битный контроллер такого-то семейства? Разве что от неуемного любопытства. Такие немногочисленные неуемно любопытные, без сомнения, это узнают и без участия технических писателей и журналистов. Микроконтроллеры же "как вещь в себе" представляют интерес или для соответствующих технических специалистов, или опять же -- для неуемно любопытных.

Но очевидные причины, как всегда, являются только надводной частью айсберга. "Под водой" скрыты куда более серьезные и иногда действительно шокирующие вещи, требующие, к слову, одного исключительно важного предварительного замечания.

Способность к обобщению -- один из признаков интеллекта. Но все хорошо в меру, и необдуманное обобщение -- это, простите, уже явная глупость. Поэтому даже не будем пытаться обобщать нижеприведенные сведения и цифры относительно всех классов компьютеров и программного обеспечения. Они справедливы и "работают" только в одной области компьютинга.

Вот теперь, кажется, все готово к знакомству с "подводной частью" упомянутых выше причин.

Как вы думаете, о чем меньше всего любят говорить разработчики? И соответственно о чем меньше всего пишут технические журналисты (в конце концов, чтобы о чем-то рассказать, надо это "что-то" узнать, а это не представляется возможным)? Любящие аббревиатуры американцы такое "что-то" называют NREС (NonRecurring Engineering Costs) -- "невозвращаемой стоимостью проектного этапа" (перевод хоть и не дословный, но лучше отражает суть понятия). В Штатах, впрочем, кроме склонности к аббревиатурам, умеют и удачно шутить, и для NREС придумали синоним BTML (Bane of Technology Manager's Life). Перевести эту идиому можно, разве что вспомнив древний редкий анекдот с названием "Смерть пионера" -- "Ужасная смерть управляющего технологическим процессом". Потому что малейшая оплошность на проектном этапе оборачивается для производителя непоправимой стратегической ошибкой. Все дело в том, что NREC -- действительно невозвращаемая стоимость в том смысле, что она противоположна так называемой "возвращаемой стоимости" -- COGS (Cost Of Goods Sold), с которой мы все как потребители хорошо знакомы. NREC -- это то, что амортизируется постепенно, на протяжении всего жизненного цикла изделия. В "классических" индустриях, например в автомобильной промышленности, производители, затрачивающие несколько миллиардов долларов на проектирование новой модели (порядок затрат соответствует вовсе не уровню Ferrari, а обычным машинам потребительского класса), заранее планируют объемы сбыта, "растягивая" амортизацию NREC, что выражается при объеме выпуска в несколько миллионов машин данной модели в приросте COGS, скажем, на $1000. Ведь вернуть разом, с одной продажи одного изделия, NREC невозможно -- никто не купит Opel Tigra за 3 млрд. долл. Вот отсюда и слово "невозвращаемая".

Братья меньшие
Топологическая схема кристалла микроконтроллера семейства Motorola HC08, оснащенного 60 KB перепрограммируемой памяти программ и 4 KB ОЗУ. STANDARD CELL AREA включает собственно ядро микроконтроллера и ряд "периферийных" устройств
Вводная часть была долгой, и вопрос "причем тут микроконтроллеры?" уже назрел. Но надо еще немного потерпеть, потому что это вопрос сложный вообще. Раз мы уже взяли за пример автомобильную промышленность, давайте продолжим разговор именно о ней. Проектировщик авто сталкивается со множеством противоречий. Так, ему нужны одновременно очень легкие и прочные фрагменты кузова -- их малый вес означает сокращение материальных затрат на этапе массового производства, а прочность -- высокие эксплуатационные характеристики конечного изделия и достижение заданного уровня пассивной безопасности. На основе таких примеров давно сформулировано проверенное обобщение, утверждающее, что в классических индустриях действует правило: "стремление к достижению максимума функциональности при минимуме веса". И как ни странно, у этого правила есть предел, достижимый при... равенстве веса нулю(!). Более того, данный предел имеет название, и вы его наверняка знаете. Это -- firmware, "встраиваемое программное обеспечение", те самые программы-невидимки, "вшитые" в компьютеры-невидимки и придающие изделиям или дополнительную функциональность, или же существенно улучшающие традиционные их функции.

Firmware-предел, к сожалению, -- действительно экстремум. Не в математическом смысле. Это "экстремальная область". Здесь цена строки кода может "зашкаливать" за тысячи долларов, производительность труда программистов измеряется сотней (или даже десятками) строк кода в месяц. Стоимость тестирований, верификаций, натурных и полунатурных экспериментов выражается труднопроизносимыми цифрами. Впрочем, судите сами: один из лучших firmware-проектов, управляющее ПО для челноков Space Shuttle, разработанное IBM (в среднем один некритический дефект на 10 тысяч строк чистого кода), обошелся приблизительно в $1000 за строчку, без учета стоимости документирования.

Короче говоря, упомянутое ранее правило сегодня уточнено и звучит так: "firmware -- бесконечные возможности за бесконечную цену при нулевом весе". Соответственно доля firmware в NREC современных промышленных изделий может достигать таких величин, что производители уже не просто не любят об этом говорить. Они вынуждены молчать хотя бы потому, что коммерческой тайны никто не отменял, а NREC -- страшный коммерческий секрет, знание которого дает возможность оценить не только стратегические возможности компании, но и нанести в конкурентной борьбе тяжелейшие по последствиям удары. А firmware и микроконтроллеры -- близнецы-братья. И несмотря на то что сегодня компьютеры-невидимки с программами-невидимками установлены чуть ли не в любом более-менее функциональном изделии, производитель об этом кричать на каждом углу не станет.

Вот круг и замкнулся: изготовители молчат -- журналисты не пишут -- микроконтроллеры "как бы есть", но их "как бы и нет".


Архитектуры-невидимки

Братья меньшие
Типичный образец симптомов первого этапа "микроконтроллерной болезни" -- макетная плата, использующая ROMless-контроллер семейства i8032
Наш обзор начинается с первой трудности, а именно определения понятия "микроконтроллер". Дело в том, что в существующем разнообразии исполнений, архитектур, классов и видов микроконтроллеров уловить что-то общее крайне трудно. Такие "народные приметы", как наличие встроенной памяти программ и данных или интегрированные различные подсистемы, не годятся, потому что есть обширные классы ROMless-микроконтроллеров (не оснащенных долговременной памятью) и типичные представители микропроцессоров, располагающие бог знает чем интегрированным. После долгих размышлений на ум приходит одно достойное определение-каламбур: микроконтроллер -- это такой специализированный компьютер, не представляющий самостоятельной ценности (т. е. предназначенный для установки в некоторое конечное изделие), о котором специалист по микроконтроллерам может уверенно сказать, что перед нами именно микроконтроллер. К слову, то, что сами производители микроконтроллеров называют "микроконтроллерами", под это определение попадает автоматически -- усомниться в компетенции их специалистов может разве что "юноша бледный со взором горящим".

Вторая трудность -- выбор классов (семейств) контроллеров, удостоенных ознакомления с ними читателя. Здесь не берутся в расчет "симпатии" и "приверженности" -- не та область, и даже неуместно любование красотой архитектуры. Грамотных разработчиков данный фактор, по большому счету, не волнует, и они прекрасно знают, что эффективно решить некоторую задачу можно с помощью любого адекватного ее требованиям контроллера. Так что критерии здесь иные: на вес золота ценятся стабильность производителя (все из-за дамоклова меча NREC -- нестабильный поставщик микроконтроллера, компонента сложного изделия, может создать ситуацию, при которой NREC станет совсем и никогда не возвращаемой); "распространенность", означающая хорошую инструментальную и информационную поддержку; энергетическая и производственная эффективность микроконтроллера (а именно, низкие энергопотребление и затраты на его применение в конечном изделии: создание печатной платы, монтаж, дополнительные компоненты и т. д.).

Итак, хоть по-настоящему перечень критериев куда более обширный, нам для "ознакомительного отбора" достаточно и приведенного.

Первым претендентом (хочется сказать -- естественно) выступит архитектура i8031/32 во всевозможных ее классических, неоклассических и даже "постмодернистских" реализациях. Не будем пытаться перечислять компании, выпускающие совместимые с данной архитектурой микроконтроллеры, -- занятие бесполезное. Диапазоны параметров представителей этого семейства впечатляющие: производительность варьируется от "стандартного" (определенного первыми реализациями Intel) миллиона "коротких" (задействующих только содержимое регистров) операций в секунду (далее -- MIPS, но именно в указанном смысле) до сотен MIPS; степень интеграции -- опять же от "стандартного" комплекта до встроенных декодеров MP3, полноценных Ethernet-контроллеров и расширенных банковых подсистем памяти; варианты исполнения -- от пригодных к синтезу описаний на языках "проектирования железа" до бескорпусных чипов для установки на подложки гибридных микросхем и "многоногих монстров". Несмотря на относительную "древность" и кажущиеся серьезными угрозы со стороны других микроконтроллерных архитектур, этой, по-видимому, суждена еще очень долгая жизнь.

Возможно, секрет долголетия и неснижающейся популярности i8031/32 кроется в удачной программистской модели, может быть, в своевременности появления, удачном маркетинге и умной политике лицензирования -- гадать не будем. К особенностям почти всего семейства следует отнести: полноценную гарвардскую архитектуру, позволяющую использовать одновременно до 64 KB памяти программ и до 64 KB данных, впрочем, не исключающую возможности эти памяти физически объединить (редкий и небезопасный "фокус", к которому иногда прибегают при построении контроллеров на основе ROMless-микросхем); банковую организацию рабочих регистров (4 банка по 8 регистров в каждом) и обеспечившую "расширяемость" семейства изначально избыточную область "регистров специальных функций". "Стандартно-минимальный" набор встроенной периферии включает в себя четыре "параллельных" 8-битных программируемых порта ввода/вывода (параллельных взято в кавычки, так как такие порты в микроконтроллерах можно использовать как угодно, поэтому лучше всего говорить, что у базовых контроллеров такой архитектуры "32 дискретных порта ввода/вывода"), два 16-битных таймера-счетчика и полностью дуплексный асинхронный последовательный порт (UART).

Все "периферийные" устройства "отображены" на регистры специальных функций, расположенные в соответствующей области блока отдельной встроенной памяти с произвольным доступом (IRAM -- Internal RAM). В этом же блоке расположены регистровые банки и "сверхоперативная память". Для базовых моделей данная область специальных регистров блока заполнена всего на 20%, что на деле означает -- для дополнительных периферийных устройств места "в архитектуре" более чем достаточно.

Восьмибитность микроконтроллеров этого семейства указывает, что все рабочие регистры имеют разрядность 8 бит. В свою очередь, значение адресуемой памяти команд свидетельствует, что счетчик команд (PC -- Programm Counter) 16-битный. Для адресации памяти данных используется отдельный 16-битный регистр специальных функций DPTR ("указатель данных" -- Data PoinTeR), который доступен и как пара 8-битных регистров. Упомянутые ранее регистровые банки переключаются установкой двух битов в особом регистре специальных функций -- слове состояния программы (PSW -- Program Status Word), что позволяет, например, быстро (если быть точным, в течение времени исполнения двух коротких команд) переключать контекст нескольких исполняемых программ без изменения состояния контроллера.

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

Претендентом номер два на краткое знакомство, с некоторыми сомнениями, можно назвать не менее "древнее" семейство архитектур PIC. Сомнения здесь ни в коем случае не связаны с их "недостатками" или качеством реализаций контроллеров. Скажем так, поставив PIC вторыми в списке (на самом деле здесь должны быть микроконтроллеры корпорации Motorola), пришлось все-таки немного пожертвовать инженерным прагматизмом в пользу "популярности в малосерийных разработках". В отличие от i8031/32, список производителей микроконтроллеров PIC-семейства невелик -- в него входят компании Microchip и Ubicom. Впрочем, это ни в коей мере не ограничивает спектр выпускаемых компаниями моделей.

PIC являются представителями класса "чистых RISC"-машин. Такие вычислители характеризуются, в первую очередь, сочетанием гарвардской архитектуры и отличающимися разрядностями данных и команд. Последнее свойство исключительно важное -- увеличенная разрядность команды позволяет "упаковать" в нее и код команды, и, например, операнд. В целом же сочетание формирует благоприятную почву для реализации конвейерной обработки и системы команд, ориентированной на однотактное исполнение. Эти особенности характерны для всех представителей семейства PIC. Кроме них, PIC демонстрирует еще один сугубо микроконтроллерный архитектурный прием -- аппаратный стек. В универсальных процессорах стек обычно организуется в основной оперативной памяти. Для микроконтроллеров RAM -- весьма дорогой ресурс (динамическая память здесь используется нечасто из-за жестких требований к энергопотреблению, а статическая -- занимает слишком много места на кристалле ввиду многотранзисторной реализации ячейки), поэтому вынесение стека в отдельную замкнутую подсистему, объединяющую регистр-указатель стека (SP -- Stack Pointer) и ограниченное количество ячеек памяти, -- прием обычный. Кроме того, "сугубо микроконтроллерным" свойством PIC-семейства можно считать "регистровую сверхнасыщенность", на деле означающую, что память данных в этой архитектуре является множеством регистров с банковой организацией (здесь также "работает" уже известная терминология: регистры специальных функций SFR, на которые, в частности, "отображается периферия").

Претендент номер три -- семейство контроллеров Atmel AVR. Как и PIC, это "чистый RISC" во всех отношениях (гарвардская архитектура, 16-битная команда и 8-битные регистры. Как и в PIC, здесь реализован конвейер (пока текущая команда выполняется, следующая выбирается из памяти). Но на этом сходство заканчивается. Главное отличие заключается в организации памяти данных -- в AVR-семействе обошлись без "выкрутасов" с банковой организацией (как в PIC) или выделения "сверхоперативной памяти" в отдельное пространство (как в i8031/32). Здесь все проще: и регистры общего назначения, и аналоги регистров специальных функций, и оперативная память находятся в одном адресном пространстве. Такой "прямолинейный характер" программистской модели, дополненный отличной системой команд и "однотактным" их исполнением, делают AVR почти идеальным для программирования не на ассемблере, а на языках высокого уровня (хотя кросс-трансляторы существуют, естественно, для всех перечисленных архитектур).

Микроконтроллеры семейств Motorola HC0x -- совсем иная история. Если i8031/32 -- "не то CISC, не то RISC" (особенно в современных "скорострельных" реализациях), PIC и AVR -- "чистый канонический RISC", то HC0x -- это классика CISC. Никакой "регистровой насыщенности", всего один рабочий регистр -- аккумулятор, фон-неймановская архитектура, никаких банков памяти -- линейно адресуемая память программ/данных, никаких "аппаратных стеков", однотактного исполнения команд, периферия "отображена" не на регистры, а на ячейки памяти. И между тем, все это не мешает HC0x быть одним из самых востребованных микроконтроллерных семейств "классическими" индустриями (в первую очередь, автомобильной). Простота вычислителя здесь -- гарантия простоты разработки весьма неплохих оптимизирующих компиляторов, а проектирование на языке высокого уровня становится и в микроконтроллерной области доминирующим.


Зачем и с чего начинать

Действительно, зачем возиться с 8-битными "жуками", если под рукой имеется более чем мощный ПК? Ответов может быть несколько, например: хотя бы потому, что это интересно. Ограниченные ресурсы и четко определенные задачи -- свойства всей области, называемой embedded (встраиваемые системы), для которой контроллеры -- основной вычислительный инструмент. Поэтому здесь есть простор для высококлассного программирования в "чистом виде", практически на уровне знаменитых книг Д. Кнута "Искусство программирования". Но это только вид "интересности" с одной стороны. Вторая определяется жесткими требованиями к качеству, потому никакого "хакинга", а только жесткая дисциплина, отличное знание всех нюансов целевой платформы, разумное и грамотное применение инструментальных средств. Чувствуете, что кроется за этим перечнем? То, что называется "высший пилотаж". А мастера "высшего пилотажа", понятно, невостребованы не бывают.

Как уже говорилось ранее, стартовой платформой разумнее всего выбрать любого представителя семейства i8031/32. Подобные микросхемы, особенно "древние" (никакой существенной разницы в дате выпуска для начинающего изучение нет), и ROMless на радиорынках стоят буквально копейки. Стремиться за "модностью" используемых компонентов на этапе освоения азов совершенно излишне. Найти документацию на практически любой чип можно без проблем с помощью Google. Вооружитесь довольно неплохой книгой "Последнее слово о 8051" (The Final Word on the 8051, доступна в онлайн- и офлайн-версии на сайте www.fe.up.pt/~ee99043/8051/), кросс-ассемблером ASEM-51 (plit.de/asem-51/final13.htm, версии для ОС MS-DOS, MS Windows и Linux), кросс-транслятором с языка С SDCC (sdcc. sourceforge.net, для производственных целей он малопригоден, но в качестве "учебной парты" весьма хорош в силу бесплатности). На начальном этапе не помешает программный симулятор некоммерческого качества Jsim -- бесплатный и вполне "съедобный". Любители интегрированных сред разработки могут "повозиться" с бесплатным для некоммерческого применения "комбайном" компании Riegel, объединяющим в себе и транслятор с подмножества языка С, и ассемблер, и программу-симулятор целевого процессора. Впрочем, данный перечень, весьма далекий от полноты, вы можете сами расширить, набрав в Google строку "8051 +”development tools” +freeware".

Начинать изучение микроконтроллера целесообразно с общего ознакомления с архитектурой, т. е. с видения "железа" программистом. Затем надо выяснить для себя все тонкости инициализации "машины": что происходит с ней после включения, в каком состоянии оказываются все подсистемы, что нуждается в принудительной инициализации со стороны программиста. По ходу узнавания здесь можно и нужно кратко ознакомиться с "периферийными" устройствами, пока не вдаваясь в детали. Для изучения системы команд обычно достаточно программного симулятора и описания из документации. Эти три базовых этапа соответствуют, скажем так, подготовке по курсу "виртуальные взлет-посадка". Для дальнейшего продвижения и постижения порой весьма забавных нюансов реальных микроконтроллеров понадобится реальное "железо". Разнообразных проектов с использованием чипов выбранного семейства в Сети множество, но из них выделяется "дешевая плата для разработки" Пауля Штоффрегена (Paul Stoffregen) -- продуманностью, возможностями и большим количеством удачных повторений. Она достаточно сложна на вид, но на деле не содержит никаких дефицитных по нынешним временам компонентов и собирается (при начальных радиолюбительских навыках) буквально за один выходной день.

Ни в коем случае не следует думать, что i8031/32 -- единственная удачная стартовая платформа. Вероятнее всего, если вы начнете освоение с PIC или AVR, вам будет даже намного проще -- для микроконтроллеров этих семейств есть распространяемые производителями бесплатные среды разработки (ограниченные, правда, языком ассемблера) -- MPLAB и AVR Studio. Многократно программируемые версии контроллеров обоих семейств более чем доступны по цене, схемы программаторов для них -- примитивны. Но имеется одно "но", оправдывающее "древнюю" архитектуру i8031/32 в качестве стартовой, -- она действительно настолько "ни рыба, ни мясо" (ни CISC, ни RISC), настолько распространена и популярна, что оказала колоссальное влияние на своих последователей-конкурентов. Так что все усилия по ее изучению окупятся сторицей -- тяжело в ученье...
0 
 

Напечатать Отправить другу

Читайте также

 
 
IDC
Реклама

  •  Home  •  Рынок  •  ИТ-директор  •  CloudComputing  •  Hard  •  Soft  •  Сети  •  Безопасность  •  Наука  •  IoT