Текст
                    EMBEDDED TECHNOLOGY™
series
So, You Wanna Be an
Embedded Engineer
The Guide to Embedded Engineering,
from Consultancy to the Corporate Ladder
By Lewin A. R. W. Edwards
Newnes


серия «ПРОГРАММИРУЕМЫЕ СИСТЕМЫ» Левин Эдварде Как стать специалистом по встраиваемым системам Пособие для тех, кто хочет заниматься интересным и хорошо оплачиваемым делом Перевод с английского Дюмина М. И. А Москва ЭКА Додэка-ХХ1 2009
УДК 004.312.46 ББК 32.973.26-04 Э18 Эдварде, Левин Э18 Как стать специалистом по встраиваемым системам. Пособие для тех, кто хочет заниматься интересным и хорошо оплачиваемым делом / Левин Эдварде ; пер. с англ. Дюмина М. И. — М.: Додэка-ХХ1, 2009. — 296 с.: ил. — (Серия «Программируемые системы»). — Доп. тит. л. англ. ISBN 978-5-94120-186-0 Эту книгу не стоит рассматривать как обычный учебник. В ней вы не найдёте подробных описаний архитектур микроконтроллеров или множе- ства рецептов построения отдельных узлов встраиваемых систем, листингов программ и т. п. Эта книга в первую очередь рассказывает о том, как именно становятся специалистами в столь востребованной области — а именно, в об- ласти создания встраиваемых систем, с которыми мы всё чаще сталкиваемся и на работе, и в повседневной жизни. Написанная авторитетным специали- стом, она будет прекрасным пособием для тех, кто умеет думать и хочет под- готовиться к тому, чтобы заняться хорошо оплачиваемым и интересным де- лом. УДК 004.312.46 ББК 32.973.26-04 Это издание «Как стать специалистом по встраиваемым системам. Пособие для тех, кто хочет заняться интересным и хорошо оплачиваемым делом» Левина Эдвардса выполнено по договору с Elsevier Inc., 200 Wheeler Road, 6th Floor, Burlington, MA01803, USA. This edition of So You Wanna Be an Embedded Engineer. The Guide to Embedded Engineering, From Consultancy to the Corporate Ladder by Lewin Edwards is published by arrangement with Elsevier INC of 200 Wheeler Road, 6th Floor, Burlington, MA01803, USA. Все права защищены. Никакая часть этого издания не может быть воспроизведена в любой форме или любыми средствами, электронными или механическими, включая фотографирование, ксероко- пирование или иные средства копирования или сохранения информации, без письменного разреше- ния издательства. ©ElsevierInc., 2006 ISBN 978-0-7506-7953-4 (англ.) © Издательский дом «Додэка-ХХ1», 2009 ISBN 978-5-94120-186-0 (рус.) © Серия «Программируемые системы»
Эта книга посвящена философии создания того, что вам надо, из того, что вы можете достать
Оглавление Глава 1. Введение в специальность 8 1.1. Об этой книге 8 1.2. Инженер по встраиваемым системам — кто он? 11 Глава 2. Образование 13 2.1. Традиционное образование как путь в технику встраиваемых систем .... 13 2.2. Как обойтись без традиционного образования и получить его впоследствии 20 2.3. Я пишу ПО — насколько хорошо я должен знать электронику? 33 2.4. Образовательные ловушки, тупики и аферы, которых следует избегать . . .37 2.5. Практические навыки, которые вам надо получить 43 Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы 48 3.1. Целевая аудитория 48 3.2. Варианты микроконтроллера 8051 фирмы Intel и других 52 3.3. AtmelAVR 65 3.4. MSP430 компании Texas Instruments 76 3.5. PICmicro компании Microchip 86 3.6. Менее распространенные специализированные архитектуры 94 3.7. Какой язык программирования мне следует выучить? C++, С и ассемблер в небольших встраиваемых системах 100 3.8. Немного возмущений по поводу защищенных от копирования средств проектирования 105 3.9. Пример 8-битного проекта с использованием AVR и бесплатного инструментария 109 Глава 4. Учимся сами, сверху вниз. Большие встраиваемые системы 147 4.1. Целевая аудитория 147 4.2. Встраиваемые системы на основе х86 149 4.3. Встраиваемые системы на основе ARM 164 4.4. PowerPC 178 4.5. Linux 183 4.6. eCos 194 4.7. Какой язык программирования мне следует выучить для работы с крупными встраиваемыми системами? 197 4.8. О проблеме выбора чипа 199 Глава 5. Сам себе инженер 205 5.1. Работа на самого себя? Риски и преимущества 205 5.2. От совместительства к статусу консультанта. Бухгалтерия, налоги и объём работ 208
Оглавление 5.3. Способы найти и удержать заказчиков 216 5.4. Итеративные проекты: нескончаемый ужас? 221 5.5. Оценивайте свои услуги должным образом 226 5.6. Выработайте свою собственную, наиболее подходящую вам систему работы 230 5.7. Не просто рукопожатие, или О важности контрактов 234 Глава 6. Работа в небольшой компании 238 6.1. Анализируйте свои цели: достоинства и недостатки небольшой компании 238 6.2. Как устроиться на работу 241 6.3. Небольшая компания: ответственность и стрессы 244 6.4. Межличностные отношения в небольших компаниях 247 6.5. Работа в условиях жестко ограниченных ресурсов 249 6.6. Распределение задач: типичная неделя 254 Глава 7. Работа в крупной компании 257 7.1. Анализируйте свои цели: преимущества и недостатки большой компании 258 7.2. Как устроиться на работу 260 7.3. Глобализация: аутсорсинг и временные рабочие визы 264 7.4. Процедуры и вы: держите голову над водой 271 7.5. Взаимоотношения с отделом маркетинга 279 7.6. Распределение задач: типичная неделя 282 Глава 8. Заключение: иди и побеждай 285 Предметный указатель 287
ГЛАВА I ВВЕДЕНИЕ В СПЕЦИАЛЬНОСТЬ 1.1. Об этой книге И в сети, и в реальной жизни почти ежедневно я встречаю людей, которые спрашивают, что им надо сделать, чтобы стать инженерами по встраиваемым системам. Это новоиспеченные выпускники колледжей, некоторые ещё сту- денты, попадаются школьники. В гораздо меньшей степени это люди, инте- ресующиеся такого рода деятельностью в качестве хобби; техники по обслу- живанию электронного оборудования; прикладные программисты, ищущие способы улучшить свои финансовые перспективы и/или разнообразить про- фессиональные навыки, дабы избежать чумы XXI века — переизбытка «белых воротничков». Почему так много людей хотят стать гуру в области встраиваемых систем? Очевидное объяснение этому заключается в том, что молодых (и не совсем молодых) программистов и техников соблазняет эффектная, привлекающая внимание работа, комфортные условия, ненапряженный стиль жизни, без- граничное богатство и толпы поклонников, то есть всё, что может дать только инженерия встраиваемых систем. Так как в последнем предложении нет ниче- го, даже отдалённо напоминающего правду (я работаю в этой сфере уже боль- ше десяти лет, но определённо не могу припомнить, когда толпа обожателей забрасывала меня наличными), я могу только предположить, что проводится какая-то крупная маркетинговая кампания, которая затягивает людей в эту область. Это, конечно, ведёт к трудно разрешимой моральной дилемме. Следует ли действующим специалистам по части встраиваемых систем перенаправлять
7.7. Об этой книге полную надежд молодёжь в другие сферы деятельности, тем самым препят- ствуя притоку новых талантов в свою и сохраняя соответственно выгодные расценки на собственные консультационные услуги? Или следует заманивать этих несчастных простаков к себе, чтобы они трудились на нижнем уровне, способствуя продвижению нас — посвященных — вверх на одну ступеньку пирамиды? Шутки в сторону: то, что число новых выпускников-инженеров во всех об- ластях сокращается (по крайней мере в США), — общепризнанный факт. Для объяснения этого феномена предлагаются разнообразные теории. В частном случае инженерии встраиваемых систем я вижу несколько факторов, обу- словливающих этот спад. Один из них — нынешняя недоступность домашних компьютеров с хорошей документацией, подобных тем, какими наслажда- лось моё поколение, — Acorn ВВС, Commodore VIC-20, Sinclair ZX Spectrum и т. п. Современные персональные компьютеры (ПК) — это чёрные ящики, разработанные, чтобы гонять лицензионные программы. Их поставляют без инструментов для программирования0 и без какой-либо технической до- кументации. Время, в которое мы живём, — это, безусловно, тёмное время. Продавцы операционных систем (ОС) активно трудятся над тем, чтобы разра- ботка стороннего программного обеспечения (ПО) ограничивалась эксклю- зивным клубом официальных лицензиатов (точно таким же образом контро- лируется разработка приставок для видеоигр), а низкоуровневое программи- рование с прямым доступом к аппаратной части — очень сложное дело из-за недоступности документации на микропроцессорный набор. Причиной этого во многих случаях являются контрактные обязательства производителей обе- регать информацию, относящуюся к коммерческой тайне, в соответствии с механизмами защиты интеллектуальной собственности. В добавление к этому мы сталкиваемся с большой сложностью и разнородностью компьютерного «железа». В старые добрые времена на своём Commodore 64 можно было на- писать программу «на коленке», отладить её до последнего командного цикла и с гордостью показать другим людям. Такого рода навыки жизненно важны при создании встраиваемых систем, но, в той или иной степени, их невоз- можно практиковать на подавляющем большинстве домашних компьютеров нынешней эры. l) Mac OS от Apple — единственное исключение из этого правила в общем потоке, име- ющем место в розничной торговле. В то время как некоторые продавцы всё же предлагают в качестве предварительного выбора Linux, люди, которые выбирают эту ОС, скорее всего установили бы её и сами. — Здесь и далее примеч. авт.
10 ■ Глава 1. Введение в специальность Есть также и другие факторы, поднимающие планку или отпугивающие людей от овладения профессией инженера по встраиваемым системам, и я коснусь их в соответствующих главах этой книги. А смысл написанного здесь заключается в утверждении, что в настоящее время детям сложнее экспери- ментировать с тем, что есть у них дома; их возможности для этого, в лучшем случае, ограниченны. Хорошие новости состоят в том, что спад в поставках инженерных талантов неизбежно ведёт к повышенной оплате за соответствие квалификации. Не- смотря на расширение использования аутсорсинга и политику привлечения иностранных специалистов в высокотехнологичные отрасли (подробнее об этом написано в главе 7, если вы любите перескакивать с одного места книги на другое), прямо сейчас отличное время поискать работу в данной сфере. Всё движется по спирали, и повсюду случаются катаклизмы: не так давно, напри- мер, был гигантский спад на рынке труда в сегменте инжиниринга телекомму- никаций, но прошло время, и тенденции к предоставлению полной занятости и долларовые инвестиции, идущие в высокотехнологичные инженерные про- екты, неуклонно увеличиваются. Кстати, заметьте, эта книга своего рода образец ереси с точки зрения ме- неджмента, я даже подумывал о том, чтобы опубликовать её под псевдони- мом. Она написана для инженеров по встраиваемым системам или для людей, желающих стать таковыми, но не для того, кто считает дни до того момента, когда сможет написать слово «начальник» в названии своей должности. Хотя многие инженеры однажды заслуженно выдвинутся на руководящие посты (вам определённо не следует считать эту дверь закрытой), я полагаю, что в данный момент вы, дорогой читатель, являетесь «отдельным сотрудником» — одним из тех, чьи грубо вырезанные лица гримасничают в нижней части то- темного столба. Когда-нибудь, возможно, я буду сильно сожалеть о разбра- сывании этих семян недовольства в моих будущих отчетах о состоянии дел на местах, но сейчас, пожалуйста, извлеките максимум из совета, который я вам предлагаю. И последнее замечание: вы будете встречать юмористические отступления, разбросанные по этой книге. Хотя большинство перлов — это мои собствен- ные творения, они, в определённой степени, соответствуют инженерному юмору, и довольно большое число инженеров сочло бы их смешными1*. Я на- |} Я буду прятаться за этим утверждением всякий раз, когда вы будете морщиться от какого-нибудь образчика легкомыслия.
1.2. Инженер по встраиваемым системам — кто он? ■ 11 деюсь, что вы посчитаете их забавными уже при первом прочтении; если нет, то призываю вас прочитать эту книгу снова, когда вы достигнете своей цели и станете инженером. 1.2. Инженер по встраиваемым системам — кто он? Прежде чем я приступлю к описанию того, как вы можете стать инжене- ром по встраиваемым системам, следует определить, что стоит за этим по- нятием (по крайней мере в отношении данной книги). Говоря кратко, такие инженеры работают над аппаратной частью и/или ПО встраиваемых систем управления. В нынешнем мире это практически всегда означает системы, по- строенные на базе микропроцессорного ядра, выполняющего управляющую программу0, хотя эта программа и микропроцессор не обязательно являются основой системы. Хотя большинство инженеров встраиваемых систем в той или иной мере склонны быть разработчиками либо аппаратной части, либо программ, в этом разделении труда меньше жёсткости, чем в других специализированных от- раслях инженерного дела. Хороший инженер встраиваемых систем — частич- но программист, частично разработчик цифровых схем, частично разработчик аналоговых схем, с рудиментарным пониманием радиочастотных вещей — во всяком случае, когда это касается подавления помех. Подобно специалисту- медику, такой инженер — это в первую очередь инженер «общей практики» с дополнительными знаниями, которые позволяют ему или ей довольно уве- ренно работать над решением определённого круга задач. Это определение работы охватывает громадную область — даже большую, чем вы, возможно, представляете себе из приведённого широкого описа- ния. Простая одноразовая игрушка, содержащая микросхему, ответственную за произнесение фраз, несколько светодиодов и переключателей; механизм круиз-контроля в автомобиле; ультраскоростная криптографическая машина, обеспечивающая связь между управляемой ракетой и оператором, — всё это сфера деятельности инженера по встраиваемым системам. Так что довольно 1) Ради соответствия этому описанию я намеренно затрону в книге экзотические сцена- рии, наподобие систем, состоящих только из Программируемой логической интегральной схемы (ПЛИС) без микроконтроллерного ядра.
12 ■ Глава 1. Введение в специальность сложно дать обобщение данной области деятельности, которое не показалось бы нелепым значительному числу читателей. Важнее даже то, что сложно предложить новичкам разумные ответы на вопрос: «Как мне заняться такой работой?» Эта книга -— попытка дать несколько ответов на множество общих вопросов, в ней содержится достаточно исходной информации, чтобы вы смогли решить, какой ответ наиболее соответствует вашим навыкам, амбици- ям и потребностям.
2 ГЛАВА ОБРАЗОВАНИЕ 2.1. Традиционное образование как путь в технику встраиваемых систем В октябре 2005 года я посетил ярмарку инженерных вакансий в Колумбий- ском университете в Нью-Йорке, главным образом, чтобы посмотреть, кто приглашает на работу и что ищет. Весьма познавательно изредка совершать подобные разведывательные вылазки, поскольку корпорации тратят огром- ные деньги на такие мероприятия, а также на стажировки и совместные про- граммы, к которым они часто приводят. Наблюдательный человек может из- влечь ценную информацию о состоянии дел в промышленности всего лишь из списка тех, кто предлагает работу, и какого рода вакансии они пытаются заполнить. Я покинул эту ярмарку вакансий, как и другие подобные недавние мероприятия, вынеся следующие два факта: 1. Внутри США спрос на инженеров всех типов растёт. 2. Традиционный путь — колледж, затем, стажировка (вежливый синоним нахождению в подмастерьях), потом постоянная работа с девяти до пяти с пенсионными отчислениями и оплатой услуг стоматолога в качестве главной льготы — вовсе не забыт, несмотря на то, что вы, возможно, чи- тали о новомодных компаниях, ищущих резюме в Интернете и пригла- шающих соискателей на футбольный матч, чтобы показать свою цен- ность как работодателя. Что касается второго пункта, то большинство людей, читающих данную книгу, возможно, уже сошли с этой наезженной дорожки. Моя задача — об-
14 ■ Глава 2. Образование судить этот нормальный путь и показать, каким образом вы можете или вновь ступить на него, или достичь той же самой цели, идя параллельно ему. Прежде чем вы начнёте составлять учебный план, пожалуйста, уясните для себя, чего именно вы хотите достичь. Работа в области встраиваемых систем охватывает необычайно широкий спектр сложных вещей по сравнению с боль- шинством других отраслей техники. В высшей степени непрактично пытаться стать всезнающим экспертом во всех этих вопросах. В любом случае при та- ком заявлении у всякого предполагаемого работодателя, вероятно, возникнут серьезные подозрения — и не без причины. Другая крайность — потратить десяток лет, специализируясь в какой-нибудь таинственной технологии об- работки сигналов, отбросив всё остальное, — тоже не самый полезный спо- соб провести время. Стандарты и лучшие опробованные на практике методы непрерывно эволюционируют, и приоритеты в проектировании сдвигаются в соответствии с изменениями спроса и предложения на рынке. Почти иде- ально подходящей иллюстрацией этого является тенденция переноса основ- ной части работы (особенно при анализе и генерации сложных сигналов) во встроенное ПО (firmware), поскольку процессоры цифровой обработки сигналов (DSP — Digital Signal Processors) и высокоскоростные традиционные микро- контроллеры становятся всё дешевле и мощнее. В наши дни господствует позиция «перевести побыстрее эти мерзкие аналоговые сигналы в цифровую форму»0. В былые времена, когда микроконтроллеры были дороги, во избе- жание необходимости иметь сложное встроенное ПО собирались умопомра- чительные (и часто гротескные) аналоговые, цифровые и гибридные каскады предварительной обработки сигналов. В наши дни для работы с DSP нам надо лишь освежить в памяти математические знания и изучить довольно сложные технологии программирования. Отсюда вывод: прежде чем вы приступите к интенсивной учёбе, вам надо каким-то образом сузить ваши цели, впрочем, не очень сильно. Вполне при- емлемо быть немного «расфокусированным» при определении того, где нахо- дится ваша сфера интересов, — это единственный способ попробовать что-то новое. Базовый уровень разработан для того, чтобы дать вам некие основные умения и достаточно общие знания как фундамент для получения детального понимания конкретной области специализации при послевузовском обуче- нии. Если вы совсем новичок в инженерном деле, то я бы предложил вам в 0 Фраза «Полностью цифровой!» значит сегодня то же самое, что значила «Транзистор- ный!» в эру электронных ламп. Она вызвала примерно столько же сдержанных стенаний по поводу смерти старой технологии.
2.7. Традиционное образование как путь в технику встраиваемых систем ■ 15 первые год или два учёбы сосредоточиться на изучении базовых предметов — математики, физики, химии и других0. При этом общайтесь с вашими препо- давателями и студентами старших курсов, чтобы решить, какая часть электро- ники вам наиболее интересна. Предположим, больше, чем что-либо, вас при- влекает техника радиосвязи. В таком случае последние год или два вы можете посвятить получению солидных знаний в области аналоговых схем. Затем по- сле получения степени бакалавра вы можете выбрать область специализации (предпочтительно, получив реальный опыт работы в этой сфере). Традиционный путь в технику встраиваемых систем (в США) — это сте- пень бакалавра после четырехлетнего обучения в институте, аккредитованном ABET, Inc. ABET — организация, официально аккредитующая научные и тех- нические программы высшего образования. Это фактически консорциум из 28 отобранных профессиональных и технических обществ, сайт которого на- ходится по адресу www.abet.org, хотя для обычного посетителя он малоинте- ресен. Типичным уровнем для инженеров по встраиваемым системам является сте- пень бакалавра по электротехнике (BSSE — a Bachelor of Science in Electrical Engineering). В Табл. 1.1 приведён пример учебного плана, который вам пред- стоит пройти, чтобы получить эту степень2). Если вам непривычна система кредит-часов, используемая колледжами в Соединённых Штатах, то эмпирически кредит-час означает один академи- ческий час (50 минут аудиторной работы) в неделю в течение семестра. Вы можете получить некоторое представление о том, какую нагрузку всё это представляет, если примете во внимание, что при очном обучении за семестр изучаются четыре курса. В пересчёте это составляет от двенадцати до шестнад- цати кредит-часов. Степень бакалавра по электротехнике — приблизительно восемь полных семестров. Если вы хотите потратить деньги, беря курсы летом и зимой в дополнение к обычным весенним и осенним сессиям, и у вас есть сильная мотивация, то можно пройти эту программу где-то за два-три года. Хотя, вероятно, к концу столь интенсивной учёбы вы будете близки к безу- 0 В американской системе образования студент сам выбирает изучаемые им предметы и то, когда он будет их изучать. — Примеч. ред. 2) Эта таблица — объединение опубликованных в 2005 году учебных планов нескольких колледжей США. Я создал её, разделив на категории предметы из учебных планов разных институтов и взяв средневзвешенные кредит-часы для каждой категории, а затем округлил их до целого. Эта информация представляет лишь относительный вес разных предметов в курсе на получение типичной степени бакалавра электротехнических наук.
16 ■ Глава 2. Образование мию и, когда придёте домой, ваша собака примет вас за грабителя и попыта- ется укусить. Таблица 1.1. Пример учебного плана для получения степени бакалавра по электротехнике (BSSE) Предмет Химия Физика Английский язык Математика Общая электроника Электромагнетизм и электромеханика Проектирование аналоговых схем Цифровые логические схемы и/или цифровая обработка сигналов Факультативные технические курсы и проекты Экономика или бухгалтерское дело Общие курсы по проектированию и анализу Гуманитарные предметы для «академичности» Объём, кредит-часы 4 4 6 20 24 7 4 12 21 4 8 16 Обратите внимание, что курсы колледжей, предлагаемые или требуемые для получения степени бакалавра по электротехнике, очень сильно отлича- ются. В частности, в некоторых учебных заведениях гораздо больший упор делается на компьютерные науки по сравнению с приведённым примерным учебным планом. Программы, которые предоставляют большое число курсов по компьютерным наукам (например, более восьми кредит-часов), чаще всего соответствуют гибридным квалификациям с такими названиями, как «Бакалавр по электротехнике и компьютерным наукам». Люди, которые получают тако- го рода степени, возможно, имеют небольшое преимущество (по сравнению с обладателями типичной степени бакалавра по электротехнике) при работе над ПО для встраиваемых систем относительно высокого уровня. Обладате- ли обычной степени бакалавра по электротехнике, вероятно, в какой-то мере предпочтительнее при работе с прецизионными системами, в которых надо разрешать большое число проблем на аппаратном уровне и «вылизывать» большие объёмы критичного по времени выполнения ассемблерного кода0. 0 Заметьте, я не говорю, что предполагаемый работодатель увидит разницу между дву- мя дипломами.
2.1. Традиционное образование как путь в технику встраиваемых систем ■ 17 Эта возможная разница, однако, в действительности окажет влияние толь- ко на вашу первую работу, когда вы выйдете из стен учебного заведения0. По- сле года или двух на рабочем месте набор ваших полезных и ценимых на рынке труда навыков будет определяться почти исключительно той сферой деятель- ности, в которой вы заняты, если только вы не предпринимаете заметных уси- лий по самосовершенствованию в какой-нибудь другой области (например, публикуя технические статьи). Есть две основные причины для этого. Во-первых, как только вы начнёте работать в «реальной» области, получае- мые вами знания и опыт будут, очевидно, ограничены этой областью. Вы об- наружите, что умения, ежедневно совершенствуемые на работе, многократно превзошли тот базовый уровень, который был освоен в учебном заведении. В то же время знания и навыки, которые не используются, будут неизбежно атрофироваться. Это до некоторой степени будет компенсироваться тем фак- том, что ваши общие способности решать проблемы значительно возрастут. Во-вторых, пока ваше внимание сфокусировано на выбранной сфере дея- тельности, не только забывается материал прослушанных в колледже курсов, но и практическое состояние дел в других областях движется вперёд без вас. Например, если вы посещали в 90-х годах какие-нибудь компьютерные кур- сы уровня колледжа, то, вероятно, вы выучили Паскаль. Если затем вы взяли десятилетний академический отпуск и уехали, чтобы поработать на ферме, то, вернувшись в инженерную отрасль, вы обнаружите, что Паскаль почти мёртв и похоронен2), даже как язык обучения программированию. Возможно, это глупый пример, но он должен показать вам, что если вы проведёте значи- тельное время — самое большее два или три года — вне инженерных дел, то, вернувшись к ним, вы будете вынуждены приложить значительные усилия, чтобы вновь привести знания в соответствие с современным уровнем. Что касается опыта работы и способов получить таковой, то вам следует серьёзно подумать о стажировке, если в настоящий момент вы следуете тече- нию «нормальной» жизни: школа — колледж — работа. Обратите внимание, что пока легче всего получить стажировку через ваше учебное заведение. Удо- стоверьтесь, что вы внесены во все почтовые рассылки, касающиеся ярмарок 1} Конечно, она может оказать влияние на ваше обучение после окончания института, но я полагаю, что вы подумали об этом, когда выбирали студенческий курс. 2) Пожалуйста, обойдёмся без писем с угрозами и оскорблениями! Я прекрасно осве- домлен, что, например, Delphi всё ещё существует. Однако изначально Паскаль создавался как язык, предназначенный для целей преподавания программирования, а из этой ниши он практически полностью вытеснен, главным образом языком Java.
18 ■ Глава 2. Образование вакансий и возможностей стажировки. Большинство факультетов регулярно получают предложения по стажировке от корпораций; эти предложения рас- сылаются по электронной почте или вывешиваются на досках объявлений в зданиях факультетов. Таким образом, если вы присутствуете в факультетском списке рассылки, вы будете регулярно получать приглашения на ярмарки ва- кансий и подобные мероприятия. Если вы не студент или ваше учебное заве- дение по каким-то причинам не привлекает такого рода нанимателей, вы мо- жете найти предложения о стажировке непосредственно на сайтах большин- ства крупных компаний. Чтобы узнать, что есть по месту вашего пребывания, используйте простую технологию. Поищите местные вакансии постоянной работы на относящихся к трудоустройству сайтах, затем отправляйтесь непо- средственно на обнаруженные при поиске сайты работодателей и посмотрите предлагаемые ими стажировки. Хотя на большинстве сайтов по трудоустрой- ству есть как список вакансий на постоянную работу, так и список предлагае- мых стажировок, мой опыт говорит, что о такого рода предложениях объявля- ют, главным образом, напрямую. Один или два года стажёром (поможет даже стажировка в течение пары летних каникул) обеспечат ваше резюме необходимым опытом реальной рабо- ты, чтобы выделиться из толпы новоиспечённых выпускников. И, как прак- тическое дело, вы, вероятно, могли бы использовать это время для уточнения интересующих вас областей, в которых вы наиболее компетентны. Так нач- нётся долгая дорога к обеспечению того, что на последующем рабочем месте вы будете заниматься именно тем, в чем хорошо разбираетесь и что достав- ляет вам удовольствие. В качестве почти бесплатного приложения пара лет в промышленности даст вам возможность завязать деловые контакты, которые могут оказаться весьма полезными, когда вы будете искать постоянное место работы. Если вы, к несчастью, уже работаете, то, вероятно, будет неразумно урезать свой постоянный доход и возвращаться на стажерский уровень. Если вы попадаете в эту категорию, я призываю переработать ваш собственный, относящийся к делу опыт. Задача здесь — составить перечень устройств, созданных вами, которые могут быть интересны будущему работодателю, ищущему инженера по встраиваемым системам. Вспомните свои хобби: авиамодели, домашние животные, автомобили, лазерные шоу — подойдет что угодно. Разработайте какое-нибудь устройство, подходящее для этой области, и внесите его в свой список. Будучи столь плохо сформулированным, это задание кажется почти нелепым. Но если вы немного подумаете об этом, то
2.L Традиционное образование как путь в технику встраиваемых систем ■ 19 сможете увидеть применение встраиваемых систем практически повсюду. Вы могли бы спроектировать автопилот для авиамодели, дверцу для собаки, использующую систему машинного зрения, чтобы узнавать вашего питомца и открываться только для него, модуль электронного зажигания для автомобиля выпуска 60-х годов с зажиганием на базе прерывателя и т. п. Кстати, местные радиолюбители — самая подходящая группа людей, которые могут помочь вам познакомиться с электроникой. И не только с радиотехникой, но и со всякого рода аналоговыми и цифровыми штуками. Даже если вы сами по себе не испытываете особого интереса к радиолюбительству, всё же стоит присоединиться к одному из этих клубов, чтобы познакомиться с местными техническими кудесниками. Посетите сайт американского союза радиолюбителей (American Radio Relay League) на www.arrl.org, чтобы больше узнать о том, что есть у вас по соседству. Наконец, если вы движетесь по служебной лестнице большой корпорации, то при отсутствии послеколледжского (postgraduate) образования добиться продвижения выше определённого уровня гораздо труднее. Вам следует очень тщательно подумать на эту тему при выборе базовой степени (undergraduate degree). Например, сейчас есть несколько учебных заведений, предлагаю- щих степень бакалавра в чём-то, называемом электротехническая техноло- гия (electrical engineering technology) — BSEET. На первый взгляд звучит как вполне подходящий курс, и если бы вы просмотрели учебный план, то могли бы подумать, что видите все правильные словечки: ABET, аппаратная часть, встроенное ПО, программные средства, программирование, проектирование схем и т. п. Однако BSEET разработан так, что не ведёт к последующей учёбе. Это своего рода инженерный эквивалент ПТУ. Я настоятельно рекомендую вам избегать этой программы; я проверил, что в институтах, предлагающих BSEET, этот курс не дешевле, чем BSEE, его изучение требует примерно того же времени и он дает значительно меньше возможностей поиска работы и дальнейшего образования. Одно пояснительное замечание по поводу послеколледжского обучения. Полезность высшего образования в плане получения хорошей должности не просто асимптотическая; фактически — это решающий момент. Хорошо иметь степень бакалавра. Обладать степенью магистра — просто великолепно. Технические сертификаты, отраслевые аттестаты и другие дополнительные дипломы — чудесно (хотя сами по себе они обычно не очень ценны). Однако фактически получить практическую инженерную работу может оказаться даже несколько тяжелее, если у вас есть учёная степень (PhD), — до такой степени,
20 ■ Глава 2. Образование что некоторые люди намеренно не упоминают о ней в своих резюме. Есть раз- ные причины столь странного предрассудка, но они включают требования по оплате (обладатели PhD дороги), мнение; что люди с учёной степенью лучше всего подходят для чистой науки и для творчества, и вера в то, что такие люди являются «профессиональными студентами». 2.2. Как обойтись без традиционного образования и получить его впоследствии В начале 2005 года, когда я приступил к работе над этой главой, телеви- зионный реалити-сериал «Новичок» от NBC (National Broadcasting Company) показывал состязание, названное «Книжная смекалка против уличной». Це- лью этих серий было установить (насколько вообще популярное телешоу может «установить» что-либо), кто в действительности лучше оснащён для выживания в корпоративном мире: выпускники колледжей или прошедшие «уличные университеты» люди без образования. Должен сознаться, я не по- смотрел пару последних серий, но в тех, что видел, люди с уличной смекалкой были довольно далеко впереди. Это отражает популярную в Америке веру, что человек, прошедший «кулачную школу», упорнее, крепче, смекалистее любо- го книжного червя. Циник во мне совершенно уверен, что это также отражает, что целевой аудиторией данного жанра телепрограмм является малообразо- ванная часть населения0. Существует мнение, что инженеры-самоучки более мотивированы, более гибки и креативны, чем их коллеги с традиционным образованием. В луч- шем случае такая точка зрения представляется мне противоречивой. Я думаю, было бы более корректно, хотя несколько многословно, сказать, что среди людей, не имеющих инженерных дипломов, те, кто достаточно мотивирован для самостоятельного развития инженерных навыков, являются необычайно инициативными людьми. Это способствует продуктивности и продвижению на руководящие должности, но не подразумевает, что эти люди обязательно являются лучшими инженерами. Впрочем, какое бы мнение ни обосновыва- 1) Интересная и приятная работа Чарльза Д. Хэйса (Charles D.Hayes) — хотя я не поддер- живаю философию данной книги — «Докажи свою квалификацию: стратегии для компе- тентных людей без дипломов колледжей» (Proving You're Qualified: Strategies for Competent People without College Degrees, Autodidactic Press, June 1995, ISBN 0-9662-1201-0). Суще- ствует удивительное количество изданий, посвященных этой теме.
2.2. Как обойтись без традиционного образования и получить его впоследствии Ш 21 лось, определённо нет причин полагать, что вся инженерная работа закрыта для вас просто потому, что у вас нет диплома колледжа в очевидно подходя- щей области (и, конечно, если вообще нет никакого диплома). Также почти не может быть диплома, который совершенно не относится к встраиваемым системам, просто по той причине, что в нашей повседневной жизни, в сущ- ности, встраиваемые системы управляют всем или, по крайней мере, на всё оказывают влияние. Прежде чем я продолжу, следует обратить внимание, что я не рекомендую вам выбирать столь нестандартный путь. Я даю в этой главе совет, потому что сам, пройдя точно такой же дорогой, понимаю, что иногда случается перейти на постоянную работу раньше, чем представится шанс получить «предвари- тельную» формальную аттестацию. По всей Америке огромное число людей делает успешную и доходную карьеру в сфере техники встраиваемых систем, не получая вообще никаких дипломов в этой или в любой другой области. Если вы хотите последовать их примеру, то это, несомненно, возможно. Однако я настоятельно рекомендую вам записаться на подходящий образовательный курс при первой же возможности. Это путь наименьшего сопротивления для движения вперёд в будущем, и он определённо сделает вашу жизнь значитель- но проще, не говоря уже о росте возможностей в плане жалованья. Итак, если у вас нет стандартной BSEE или эквивалентной степени, ваши возможности на рынке труда будут ограниченны, но полностью не исчез- нут. Чтобы получить хорошую должность, вам придётся приложить значи- тельно больше усилий, чем вашим коллегам с традиционным образованием. Как быть? Начнём с того, что я бы советовал вам даже не беспокоиться о посылке своих резюме на вакансии, афишируемые сайтами по трудоустройству, если только ваши квалификация, опыт работы и другие данные не соответствуют в точности заявленным в объявлениях требованиям. На это есть две причи- ны. Во-первых, эти сайты привлекают ошеломляющее число претендентов, и, весьма вероятно, ваши данные затеряются в общем потоке. Во-вторых, с февраля 2006 года в Соединённых Штатах вступил в силу новый и вызываю- щий чрезвычайное раздражение закон о «стимулировании разнообразия»0. В результате принятия этого закона вам придётся подгонять резюме в соот- !) Хорошее краткое изложение ситуации было опубликовано в CNNmoney в колонке Анны Фишер (Anna Fisher) под заголовком «Поиск работы в сети становится мудрёнее» (Job hunting online gets trickier); во время написания этой книги статья была доступна на www.money.cnn. com/2006/02/06/news/economy/annie/annie_0206/index.htm.
22 ■ Глава 2. Образование ветствие с интересующей вакансией и сделать так, чтобы вы соответствовали каждому заявленному требованию по всем пунктам. Если в вакансии требу- ется трехгодичный опыт работы в сфере телекоммуникаций, а вы прорабо- тали только два, то ваше резюме будет отвергнуто, даже если за эти два года вы полностью перепроектировали и в одиночку заново развели всё кабельное хозяйство телекоммуникационной инфраструктуры небольшого европейско- го государства, используя только собственные зубы и моток бечёвки, и за труд были удостоены Нобелевской премии. Да, звучит столь же безумно, сколь безумна эта система. В результате она естественным образом приведёт к тому, что посредственный претендент, ставящий галочки в нужных местах, будет иметь преимущество перед человеком, лучше остальных подходящим для дан- ной работы. Как будто бы отделам кадров (Human Resources) была нужна ещё одна — и весьма волюнтаристская — причина, чтобы отсеивать претендентов из набора кандидатов! Обратите внимание, что вышеупомянутое бюрократическое творение будет оказывать влияние только в случае, если вы ищете работу в средних или круп- ных компаниях (более 50 работников). Один этот факт — хорошая причина сфокусироваться при поиске на меньших компаниях. Впрочем, возможно, вы в своих поисках в любом случае двинетесь в этом направлении, поскольку в небольших компаниях практически всегда уделяют гораздо больше внимания вашему опыту, выполненным работам и другим осязаемым вещам, чем фор- мальным бумагам. Более детально я обсуждаю жизнь в маленькой компании в главе 6, но коротко можно сказать следующее. В небольшой фирме вы будете постоянно (от первого интервью до ухода на пенсию) лично иметь дело с на- чальниками, от которых зависит приём на работу и увольнение. Следователь- но, во время интервью у вас будет гораздо больше возможностей впечатлить кого-то, обладающего властью принимать решения немедленно. Произведите хорошее впечатление, и, возможно, вы будете взяты на работу практически сразу же, поскольку интервьюеру не надо утверждать решение в высших сфе- рах и/или доказывать его какому-нибудь другому партнёру. И наоборот, в процессе трудоустройства в крупную компанию вам потре- буется добиться благосклонности целой цепочки людей. Сначала идёт анке- тирование в отделе кадров (иногда этот процесс даже автоматизирован), затем вам нужно произвести впечатление на менеджера по найму, которого вам при- дётся снабдить достаточным количеством удовлетворительной информации для приведения убедительного для высшего руководства довода, почему вас следует принять на работу. Плюс, если всего этого недостаточно, вам придётся
2.2. Как обойтись без традиционного образования и полу нить его впоследствии ■ 23 столкнуться со множеством соперников уже только из-за того, что о вакансиях крупных компаний имеется больше информации, чем о вакансиях небольших фирм. Конечно, может быть, вы чувствуете, что медицинская страховка, ком- пенсация затрат на обучение, пенсионные отчисления, фонд материальной поддержки, услуги массажиста на рабочем месте и другие привилегии боль- шой компании0 абсолютно необходимы для вашего счастья на работе, в этом случае у вас нет выбора. Я не говорю, что для инженера без образования или, по крайней мере, с нетрадиционным образованием невозможно вытащить счастливый лотерейный билет, — фактически мне это удавалось дважды, — но это не просто. Придётся показать, что вы обладаете каким-то очень необыч- ным талантом, чтобы остаться в числе претендентов на вакансию. Независимо от того, является вашей целью вакансия в крупной или не- большой компании, мой опыт говорит, что наилучший способ получить хоро- шую должность — через агента по поиску работы, который будет действовать в ваших интересах внутри этой компании. В частности, это верно для людей с нетрадиционным образованием. До сих пор я добивался наилучших резуль- татов с помощью маленьких агентств по трудоустройству, которые обслужи- вают относительно небольшое число компаний и внимательнейшим образом относятся как к своим клиентам, так и к перспективным для них кандида- там. Крупные национальные информационные центры по трудоустройству интенсивно используют программы автоматической фильтрации резюме на соответствие вакансиям, которые мало что дают на выходе. Если обобщить, то люди, работающие на большие агентства по трудоустройству, также весьма невежественны в технических деталях тех отраслей индустрии, которые пред- ставляют. В результате они практически не способны грамотно совместить наиболее важные пункты резюме с требованиями отдельной вакансии. Одна из технологий, которую я использовал сам и рекомендовал другим и которая давала хорошие результаты, заключается в поиске по обычным се- тевым базам данных вакансий2) — не вакансий самих по себе, а тех, кто их размещает. Большинство записей вносятся сторонними агентствами, а не нанимающими компаниями. В эти записи обычно включается контактная информация агентств. Вместо использования расположенной на сайте кноп- 0 Если вы найдёте компанию, всё ещё предлагающую все эти вещи, сообщите мне, по- жалуйста. 2) HoUobs, Monster, BrassRing, CyberCoder и т. п. — есть буквально сотни сайтов по тру- доустройству, которые, частично или полностью, занимаются вакансиями в сфере высоких технологий.
24 ■ Глава 2. Образование ки «Получи эту работу прямо сейчас!», свяжитесь непосредственно с агент- ством — лучше всего по телефону, с последующим общением по электронной почте — и вышлите своё резюме. Сообщите, на какую вакансию вы смотрите, но уточните, что хотели бы, чтобы ваше резюме было положено в папку для рассмотрения на соответствие другим вакансиям. При посещении таких сайтов стоит разместить там ваше резюме, сделав его открытым для поиска, — я получил несколько превосходных предложений, исходивших от агентств по трудоустройству, которые просматривают сетевые базы данных с информацией о кандидатах в поисках талантов. Не разочаро- вывайтесь очень сильно, если вы не получите ничего стоящего таким спосо- бом, — тут уж как повезёт. Меня иногда спрашивают, хорошим ли вложением денег является плата агентствам, сообщающим о вакансиях по подписке, и службам, которые от- правляют ваше резюме на рассмотрение в многочисленные форумы, связан- ные с набором кадров. По моему мнению, средний инженер, оплачивающий такие услуги, впустую тратит деньги, и это вдвойне верно для тех, у кого за спиной нет нормального образования. Эти службы просто берут ваше резюме и, используя программу-робот, высылают его в ответ на сотни предложений о работе, разбросанных по разным сайтам. На мой взгляд, это самый неэффек- тивный и с наименьшей вероятностью ведущий к успеху метод, который вы могли бы использовать при поиске работы. Вы согласитесь с этим, если при- мете во внимание тот факт, что агентства оповещают работодателей главным образом посредством почтового спама. Кстати, упомянутые мной ранее программные системы с алгоритмическим поиском соответствия резюме претендентов имеющимся вакансиям, несо- мненно, работают точно, но совершенно не способны найти вакансию для людей с нестандартными историями получения образования. Так происходит потому, что эти системы почти неизменно в качестве приоритетного филь- тра используют формальные признаки квалификации. Например, работая инженером-разработчиком в одной крупной американской компании, я регу- лярно получал по электронной почте от этих систем автоматически сгенери- рованные письма, предлагающие мне должности уровня техника-ремонтника для работы в Ираке (за зарплату, даже с учётом надбавок за опасность работы в зоне военных действий на Ближнем Востоке, более чем вдвое меньшую моего тогдашнего жалованья). Такого рода поведение весьма типично для автомати- зированных программных систем по подбору персонала.
2.2. Как обойтись без традиционного образования и получить его впоследствии ■ 25 Работать за гроши, чиня электронное оборудование в ближневосточных песках, вероятно, несколько экстремальный случай. Однако, возможно, вы обнаружите, что ради достижения высшей профессиональной цели необхо- димо принять не столь уж идеальную должность или согласиться на зарплату, меньшую ожидаемой. Даже если вам удалось убедить менеджера по найму, что вы будете превосходным дополнением к существующей команде, всё же ре- шение должно быть им обосновано наверху. Для менеджера проще принять вас на более низкий уровень, чем вы заслуживаете, и гарантировать, что позд- нее вы получите продвижение по службе или вам будет повышена зарплата, как только вы докажете свою ценность для компании. Поэтому я советую вам не отказываться от чего-то, в меньшей степени соответствующего вашим же- ланиям, если есть перспектива вознаграждения за это в будущем. Это взваливает на вас бремя ответственности за две вещи. Во-первых, вы должны быть способны продемонстрировать свой высокий уровень за ра- зумный период времени — скажем, за шесть месяцев. Длительность перио- да следует подробно оговорить с менеджером во время интервью. Во-вторых, по истечении испытательного срока вы должны сами инициировать новую встречу с менеджером. Не надо делать её конфронтацией; вы только напо- минаете ему, что совместно пришли к договоренности об испытании ваших деловых качеств в течение определённого периода времени, который как раз истек. Кстати, я советую вам вести журнал, записывая в него, по крайней мере еженедельно, что было вами сделано в течение этого времени. Он поможет вам запастись весомыми доводами к концу испытательного срока. Получив роскошную инженерную «работу своей мечты», вам следует не- медленно начать планировать свою будущую карьеру и сделать так, чтобы перед вами открывался настолько широкий выбор, насколько это возможно. Если вы работаете в крупной компании, то для укрепления своих позиций и продвижения вверх — в начальственный зиккурат0 — вам надо привести своё образование к стандартному виду2). Если вы трудитесь в компании помень- ше, то приведение в порядок дипломов поможет вам, когда на фирме наступят трудные времена или её купят, и вам придётся искать новую работу. Основной момент здесь такой: если принять за данность, что место, дающее вам ценные баллы в смысле опыта работы, не обеспечивает вас должной финансовой ста- 0 Священная башня в Древней Месопотамии. — Примеч. ред. 2) Это правильно, даже если вы не испытываете особого желания быть начальником. Больше информации о том, почему это так, приведено в главе 6.
26 ■ Глава 2. Образование бильностью, то я настоятельно рекомендую потратить время и силы на полу- чение относящегося к инженерному делу диплома. Здесь следует немного сказать о базовом образовании для тех, кто уже дав- но окончил среднюю школу. Если вы попадаете в целевую аудиторию, для ко- торой я задумывал эту книгу, то, вероятно, вы уже находитесь в середине своей карьеры, хотя, возможно, и не как инженер. Это означает, что вы относитесь к тем людям, которых раньше в университетах называли возрастными (mature- age) студентами. Этот термин определённо попал в некоторую немилость, но никакой явной замены ему так и не появилось. Поэтому, возможно, вы по- баиваетесь ступить на новую стезю получения высшего образования, и я бы хотел рассеять страх и помочь вам сделать этот шаг, рассказав немного, как всё обстоит на самом деле. Первое, что вам надо сделать, — это преодолеть инерцию и подать заявле- ние. На данном этапе вы столкнетесь с разнообразными задачами: выбор ин- ститута, получение аттестата из вашей средней школы (и диплома колледжа, если таковой был), предоставление сведений о сделанных прививках и запол- нение анкеты. Фактически маловероятно, что поступление окажется пробле- мой, если только при выборе колледжа вы не замахнулись слишком высоко. Опыт моих личных исканий и обсуждение этого вопроса с другими людьми, прошедших через подобное, говорят, что значительно проще поступить в кол- ледж в качестве возрастного студента, чем в среднюю школу. В худшем слу- чае вам придётся проучиться семестр или два в статусе внештатного студен- та, чтобы набрать достойный уважения средний балл. Всё, что мне пришлось сделать, — написать убедительное эссе из 500 слов, рассказывающее, чем я занимался на своей работе последние несколько лет. Я также указал, что мой работодатель исповедует политику, согласно которой доля компенсируемых затрат пропорциональна достигнутым результатам, тем самым намекая при- ёмной комиссии колледжа, что я буду весьма мотивирован на получение пре- восходных отметок. Вам также надо обдумать, каким образом вы будете оплачивать своё обу- чение0. Высшее образование в Соединённых Штатах поразительно дорого. 1) Я намеренно поставил этот пункт после стадии «выбора колледжа и подачи заявле- ния», поскольку возврат от инвестиции в хорошее образование, складывающийся только из роста заработной платы, столь огромен (по сравнению с риском), что при выборе кол- леджа стоимость обучения не должна быть главным критерием. Если исключить удачные вложения в недвижимость, то это просто лучшая гарантированная инвестиция, которую вы когда-либо сделаете.
2.2. Как обойтись без традиционного образования и полунить его впоследствии ■ 27 По уровню стоимости четырехлетние программы образования (включая кни- ги и другие принадлежности и, разумеется, не включая плату за проживание и прочие дополнительные расходы) делятся на три категории. Приблизительно 5000 долл. за год очного обучения в публичном институте, 21 000 долл. — в частном колледже среднего уровня, от 40 000 долл. и выше — в учебном за- ведении «Плющевой Лиги». Несомненно, в первую очередь по вопросу опла- ты обучения вам следует обратиться к вашему работодателю. Большинство крупных компаний США, а также и многие малые предлагают, по крайней мере, некоторую финансовую помощь на образовательные цели, а многие более крупные фирмы оплатят всё ваше обучение, часто даже включая рас- ходы на книги и другие принадлежности0. Всё, что вам придётся выложить из собственного кармана, — заплатить налог на этот дополнительный доход, но определенная его часть, зависящая от уровня ваших доходов и вашей кредито- способности, налогом облагаться не будет. Если дорога, ведущая к компенсации со стороны работодателя, недоступна, то следующей наилучшей возможностью будет спланировать такой темп обу- чения, который позволит вам выплачивать за занятия часть жалованья (а не снимать деньги с вашего накопительного банковского счета). В зависимости от того, насколько давно вы начали работать (чем меньше, тем лучше), вы мог- ли бы обдумать возможность перенаправления в образовательную программу ваших инвестиций в фонд 401(к) или в любой другой пенсионный фонд. Кста- ти, не все финансовые консультанты согласятся с этим предложением. Я же полагаю, что это здравый совет, поскольку фактический возврат от инвести- рования в ваш первый диплом довольно значителен. Часто цитируемая ста- тистика Бюро переписи населения утверждает, что в среднем за всю трудовую жизнь люди, окончившие только школу, зарабатывают 1.2 миллиона долла- ров, тогда как доход обладателей степени бакалавра составляет 2.1 миллиона. Если предположить, что получение диплома обойдется вам в 80 000 долл., то APY составит приблизительно 5.5%2), что вызывает уважение, но не изумляет. Перед тем как добраться до изумляющей части, я бы хотел, чтобы вы осо- знали, что эти грубые цифры усреднены по всем профессиям и должностям. Если мы возьмем 45-летний рабочий стаж, то усредненные данные от Бюро 0 Это ещё одна превосходная причина, чтобы вновь сесть за парту. В этот век умень- шающихся или несуществующих бонусов и выплат по акциям потенциально вы можете «нарисовать» себе на год бонусов на 10 000 долл. или даже больше, просто воспользовав- шись программой выплат компенсаций вашего работодателя. Воистину было бы безумием не ухватить огромные пригоршни свободных денег, если подвернулась такая возможность. 2) За 45 лет работы.
28 ■ Глава 2. Образование переписи населения дадут 26 667 долл. в год для выпускника средней шко- лы и 46 667 долл. в год для обладателя диплома колледжа. Таким образом, в большинстве мест Соединённых Штатов 45 000 долл. — это средняя старто- вая зарплата инженера-электронщика, недавно окончившего колледж0. Если вы занялись инженерным делом сразу по окончании колледжа, то, принимая ежегодный рост заработной платы равным 3.5%2), ваше жалованье окажется больше базового уровня — 46 667 долл. всего через два года. За номинальные 45 лет трудовой деятельности вы в действительности заработаете 4.2 миллио- на долларов. При этом эффективный APY на ваше вложение в образование составит 8.4%, что значительно по любым меркам. Всё может оказаться даже лучше этого, если вы рассмотрите идеальный случай, когда обучение оплачи- вает ваш работодатель (предположим, что вы попадаете в группу с 35%-ной налоговой ставкой), тогда фактически за образование вы выплатите только что-то около 20 000 долл. в виде налогов3). Ради увлекательной беседы о стоимости высшего образования и о том, как вам стоит расставлять приоритеты, а также ради многочисленных финансо- вых советов, которые могут оказаться полезными людям, совершающим ка- рьерные повороты, вы можете насладиться чтением произведения Сьюз Ор- ман (Suze Orman) «Руководство по зарабатыванию денег для тех, кто молод, потрясающ и сидит без гроша» (The Money Book for the Young, Fabulous and Broke, Riverhead Hardcover, March 2005, ISBN 1-5732-2297-6). Обратите вни- мание, что есть издание в мягкой обложке, которое не было должным образом внесено в каталоги; книжные каталоги, которые я проверял, утверждают, что оно будет выпущено в 2025 году! 0 Я получил эту цифру усреднением данных с www.salary.com для различных почтовых индексов, ища записи, относящиеся к начинающим инженерам встраиваемых систем. 2) Это, конечно, не обязательно представляет фактический рост; эта цифра лишь (наде- юсь) соответствует повышению уровня жизни. Случилось так, что в 2005 году рост зарплат на 3.5% для профессий инженерного типа оказался «средним по промышленности» для крупных корпораций. Для частного сектора, вероятно, лучше подходят цифры от 4.5 до 5.5%. Сюда не включены однократные бонусы. 3) Я хорошо осознаю, что 20 000 долл. не есть 35% от 80 000 долл. Очень тяжело разу- мно оценить действительные налоговые выплаты на компенсацию оплаты образования, поскольку они зависят среди прочего от того, насколько быстро вы учитесь. На каждый налоговый год существует фиксированная, не облагаемая налогами сумма расходов на обу- чение. Если вы будете ограничивать свои траты только этой суммой, то можете получить спонсируемое вашим работодателем образование вообще без выплаты каких-либо налогов, но в этом случае ваша учёба затянется примерно на 16 лет!
2.2. Как обойтись без традиционного образования и получить его впоследствии ■ 29 В зависимости от вашего иммиграционного статуса, уровня дохода и дру- гих критериев «приемлемости» вам также следует исследовать возможность получения федеральных грантов и студенческих займов. И конечно, если это возможно, следует подать заявление на какие-нибудь подходящие стипендии. В конце каждого семестра всегда стоит спрашивать у куратора вашего курса или колледжа о возможности получения стипендии, особенно если вы хоро- шо учитесь. Стипендии подобны фразам из репортажей о матчах в высшей бейсбольной лиге: всегда найдётся что-то уникальное, но в то же время отно- сящееся ко всем0. Чрезмерная стоимость образования в Соединённых Штатах в некоторой степени компенсируется тем странным фактом, что почти все в колледже платят несколько меньше полной цены. Наименее предпочтительный способ оплаты (опять же, по моему мне- нию) — залезть на свой сберегательный счёт. Выплаты из накопительных фондов — неплохой выбор, если вам осталось совсем немного до получения диплома. Однако, если вы только в начале учебной программы, я бы не сове- товал распечатывать ваши сберегательные счета, разве только это не послед- ний доступный вам выбор. Вспомните, что средняя инженерная программа может стоить в районе 80 000 долл.; если снятие столь больших средств с на- копительных счётов сильно повлияет на вашу финансовую безопасность, то вам необходимо поискать другие возможности. Итак, это всё о поступлении и оплате. А каково быть студентом инженерно- го колледжа в зрелом возрасте? Больше всего вызывает тревогу — я чувствовал её сам, — что, оказавшись среди первокурсников, вы будете чувствовать себя словно школьник, которого оставили в шестом классе на три года. Каково си- деть в аудитории, заполненной людьми, которые вдвое моложе тебя? Оказывается, всё не так уж плохо. В частности, если вы будете посещать вечерние занятия, то обнаружите, что значительную часть однокурсников со- ставляют такие же возрастные студенты, у которых, вероятно, будет много об- щего с вами. Некоторые специальности, для которых не предлагается вечернее обучение, будут, возможно, заполнены только студентами племени «прямо из школы», но это не столь ужасно, как вы думаете. Вероятно, вы обнаружите, что большинство студентов будут просто сфокусированы на формировании своей собственной группы общения, исключая всё остальное. Вспомните, эти ребята только-только покинули среднюю школу, в колледже они впервые 0 В оригинале здесь была специфическая бейсбольная фраза. При переходе к отече- ственным реалиям она, вероятно, выглядела бы как высказывание комментатора о футбо- листе: «Он был заметен в ходе игры». — Примеч. науч. ред.
30 ■ Глава 2. Образование оказались вне дома и без школьных друзей, следовательно, они испытывают гораздо больший стресс, чем вы. Для вас нет необходимости плотно взаимо- действовать с ними, но наладить общение полезно — в конце концов эти люди будут сдавать те же экзамены и выполнять те же задания, что и вы. Так что, если вы можете это сделать, было бы полезно установить некие приятельски- студенческие отношения. Пока мы обсуждаем вечерние занятия, следует тщательно обдумать, как много учебной работы вы можете выполнять. Если у вас есть хотя бы малей- шие сомнения в своей способности оценить это (в частности, если вы уже дав- но покинули школу), я настоятельно рекомендую начинать в медленном тем- пе. Сев снова за парту, возьмите на первый семестр только один курс — в той предметной области, где вы не ожидаете никаких мерзких сюрпризов, — для появления чувства уверенности. Возможно, вы будете поражены, насколько легка учёба в колледже для тех, кто несколько лет поработал в промышлен- ности (особенно для «белых воротничков»). Учебная нагрузка этих программ высшего образования рассчитана на молодежь, пришедшую прямо со школь- ной скамьи. Несмотря на это, важно не переоценивать собственные силы и брать такой объём занятий, на усвоение материала которого вы можете найти время; большая нагрузка может плохо отразиться на ваших академических по- казателях, и, что более важно, вы можете потерять уверенность и откажетесь от продолжения учёбы. Если у вас есть семья, понадобится найти баланс между временем, затрачи- ваемым на учёбу, и временем на ваши семейные обязанности. Это определён- но изнуряет — 40-часовая рабочая неделя плюс колледж и, придя домой, надо ещё управиться со всеми семейными делами. К тому же может возникнуть серьезное напряжение во взаимоотношениях, если из-за вечерних занятий несколько раз в неделю придётся приходить домой поздно. Эта ситуация осо- бенно усложнится, если вы выберете интенсивные семестры с большой кон- центрацией уроков (зимние, летние и другие программы ускоренного обуче- ния). Лучшее, что я могу вам здесь посоветовать: прежде чем записываться на занятия, сядьте с вашей супругой (супругом) и другими близкими и решите, какого рода учебное расписание ваша семейная жизнь сможет выдержать. Последнее замечание об учёбе в свободное от работы время. Так как вы не сможете выполнять учебную программу с той же скоростью, что и обычные студенты, я предлагаю выбирать изучаемые курсы стратегически, чтобы по- степенно максимизировать вашу способность обучаться. Некоторые кураторы посоветуют вам взять стандартный опубликованный учебный план и пройти
2.2. Как обойтись без традиционного образования и получить его впоследствии ■ 31 приведённые в нем курсы в рекомендованном порядке, но изучая за семестр половину рассчитанного на это время материала. Это, по моему мнению, опасный и весьма неэффективный способ учёбы. Например, на инженерной специальности у вас будет, по меньшей мере, два семестра исчислений. Обыч- но один из них проходится в первом семестре младшего курса, а второй — сразу после него, во втором семестре. Если вы будете следовать стандартной программе с половинной скоростью, то столкнетесь с тем, что изучение этих двух близко связанных предметов будет происходить с перерывом длиной в целый семестр, во время которого вы многое забудете, ухудшая тем самым эф- фективность изучения второго предмета. Поэтому мой вам совет: группируйте вместе предметы, которые долж- ны изучаться последовательно, проходите каждый набор до конца, а только потом переходите к другим. Иными словами, возьмите две важные области (скажем, математику и английский язык) и сконцентрируйтесь на выполне- нии всей требуемой для их изучения работе, прежде чем перейти к следующей дисциплине. Это же означает, что, возможно, в течение пары последних се- местров в колледже вы будете «добивать» разные оставшиеся после младших курсов предметы, вроде химии и физики. Ну, так это просто ваш шанс побыть несколько последних семестров на заметке у декана! Кстати, помимо карьерного продвижения есть и другие причины иметь формальное образование. Если вы работаете на инженерной должности без соответствующего диплома, то вам нужно быть очень внимательным ко все- му, что касается профессионального лицензирования, и тщательно следить за тем, чтобы не нарушить какое-нибудь законодательство. Хотя это не оказыва- ет столь непосредственного влияния на инженеров, занимающихся встраива- емыми системами, как, скажем, на архитекторов или инженеров-строителей, каждый штат в США предъявляет свои специфические требования к инже- нерным профессиям. Вам следует проверять действующие на настоящий мо- мент законы в вашей собственной сфере деятельности. Я не намерен их здесь перечислять, но вообще-то запрещено рекламировать свои услуги в качестве инженера по найму0, если у вас нет соответствующей местной лицензии, ко- торая, в свою очередь, требует формального диплома, нескольких лет опыта работы и успешной сдачи двух письменных экзаменов. В Соединённых Шта- 0 Это скорее вопрос терминологии. Если вы заявляете себя в качестве «программиста», вы избегаете буквы закона во всех изученных мной юрисдикциях. Какая здесь может быть разница — вопрос, далёкий от практики. Вы могли бы даже найти юридически безупреч- ный довод, доказывающий, что вы художник.
32 ■ Глава 2. Образование тах инженерная лицензия называется лицензией профессионального инженера (РЕ — Professional Engineer license), а требования, плата за лицензию, экзаме- ны и прочая канцелярщина несколько изменяются от штата к штату. Есть, конечно, множество лазеек, которые позволят вам работать инже- нером без получения РЕ-лицензии. Наиболее очевидная из них в том, что все грехи отпускаются0, если значащими партнерами в вашем бизнесе являются настоящие, живые обладатели РЕ-лицензии, которые могут просматривать, ставить печати и расписываться на публичных документах. Во многих местах есть параграф о «промышленном освобождении», который в зависимости от того, где вы находитесь, может означать одну из двух вещей. Он освобожда- ет вас от требования получения лицензии, если вы или не предлагаете услуг широкой публике, или сидите под зонтиком работодателя, который является ответственным за то, что вы делаете. Наконец, можно подправить формули- ровки ваших рекламных материалов таким образом, чтобы избежать опреде- лённых слов и фраз, не соответствующих местному законодательству. Интересно, что относительно небольшое число инженеров, в том числе и инженеров по встраиваемым системам, являются действительно лицензи- рованными РЕ. Равно интересно — и немного забавно — заметить, что На- циональный совет инспекторов по инженерному делу и геодезии (the National Council of Examiners for Engineering and Surveying) недвусмысленно признает этот факт2), заявляя, что «лицензирование [...] отделяет вас от других в вашей профессии». Я должен признать, что разделяю точку зрения многих специали- стов (включая некоторых обладателей лицензии РЕ), что РЕ-лицензирование представляет собой пустопорожнее и дорогое занятие. Как замечание на близкую тему, если вас принимают в крупную компанию как инженера с нетрадиционным образованием, то вам следует внимательно наблюдать за политической ситуацией на фирме. Я бы посоветовал скрывать ваш статус настолько долго, насколько возможно, и не поднимать эту тему в обычном разговоре. Дипломные дела могут легко превратиться в большую проблему, если, например, вы хорошо выполняете работу и получаете хорошие отзывы (и рост зарплаты или премии), тогда как один из ваших коллег с тради- 0 Пожалуйста, не воспринимайте моё заявление здесь как благую весть. Совет кате- горически вне закона; это только предупреждение, дающее знать, что впереди вас ждут трудности. Прежде чем предпринимать какие-либо действия, вам следует изучить местные законы. 2) Во время написания книги эту цитату можно было найти на сайте www.ncees.org/ licensure/licensure_for_engineers.
2.3. Я пишу ПО — насколько хорошо я должен знать электронику ? ■ 33 ционным образованием не добивается больших вознаграждений и постепен- но начинает раздражаться. Также следует быть готовым при необходимости принять, что ваша должность будет именоваться не так, как та, на которую вы устраивались. Например, вас брали на должность инженера-исследователя, но по политическим причинам вашим официальным титулом может быть программист электронного оборудования. В заключение всего сказанного: можно избежать большей части или всей этой государственной бумажной волокиты, если вы либо играете в словесные игры, либо живёте под защитой физического или юридического лица, которое хранит вас от вступления на вредную дорожку, связанную с лицензированием. Однако инженеры, не имеющие диплома колледжа, просто не будут радушно приниматься в нашем загородном клубе. Поскольку всякий, кто достаточно компетентен, чтобы выполнять инженерную работу, будет, весьма вероятно, иметь лишь очень небольшие сложности с академическими требованиями к получению диплома бакалавра, то вполне стоит приложить усилие, вернуться за парту и заполнить этот пробел, если у вас есть такая возможность. Если ваш работодатель будет оплачивать обучение, то у вас просто нет разумной причи- ны, чтобы не пойти в колледж. Получение РЕ-лицензии — дело вкуса, но мо- жет в некотором отношении повысить вашу «ликвидность» на рынке труда. 2.3. Я пишу ПО — насколько хорошо я должен знать электронику? Прежде чем мы приступим к этой теме, самое время для небольшого юмо- ристического перерыва, иллюстрирующего потенциальную глупость, имею- щую место при создании встроенного ПО. Теорема о 999999-й мартышке Книга по теории вероятности Эмиля Бореля (Emile Borel), вышедшая в 1909 году, утверждает, что мартышка, нажимая наугад клавиши печатной машинки, постепенно напечатает все книги, имеющиеся во Французской национальной библиотеке. Вам, возможно, гораздо более известен англи- зированный вариант формулировки этой теоремы, обычно звучащий так: «Миллион мартышек, стучащих по клавишам миллиона печатных машинок, постепенно создадут полное собрание сочинений Шекспира». Есть мно- жество других способов сказать то же самое, и многие люди предпочита-
34 ■ Глава 2. Образование ют поручить эту работу бесконечному количеству мартышек, однако это приводит нас к трудному парадоксу банановой бесконечности, поэтому мы будем рассматривать только конечное число мартышек. Пугающее количество программ явно генерируется с использованием мартышкиного подхода. Достаточным доказательством этого является тот факт, что со времен первого набора перфокарт для жаккардового ткац- кого станка почти каждый релиз ПО выходит с опозданием. («Мы просим прощения, выход Sweater 1.1 был отложен из-за проблем с подпрограм- мой двойного перекрёстного трикотажного переплетения».) Далее, самая сложная часть в методе мартышек — не усадить их за работу, а отфиль- тровать результаты. Сканирование случайного текста на предмет соот- ветствия Шекспиру — относительно простое дело, поскольку желаемый результат хорошо определён. Вы просто сравниваете текст с известными произведениями Шекспира и получаете ответ. Сканирование результатов труда миллиона мартышек с целью найти программу, отвечающую требо- ваниям проекта, — гораздо более трудная задача, потому что вы не знаете точно, что ищете. Теорема о 999999-й мартышке звучит примерно так. При заданном желае- мом результате и функционирующем обезьяньем механизме будет конеч- ный набор «корректных» ответов, и удовлетворяющих всем ограничениям «совершенного» результата: «Быть или не быть — вот в чём вопрос». Будет также бесконечное количество ответов, являющихся бесполезной тара- барщиной: «Thabahq892a qw[t980q324[!» Однако для всякого корректного ответа есть бесконечное количество его возможных вариантов, которые все слегка некорректны, но внешне выглядят правильными: «Быть или не быть вот, в чём вопрос». Поскольку бесконечное количество бесконечно больше любого конечного количества, существует лишь незначительная вероятность того, что ответ, кажущийся корректным, будет таковым в дей- ствительности. К несчастью, это также означает, что отбирающая логика в нашем программирующем механизме на обезьяньей тяге может только, в лучшем случае, решить, абракадабра это или возможное решение. Она не сможет выбрать корректные решения из набора возможных, что приводит к несоответствиям с совершенным ответом. Отсюда мы делаем вывод, что любое функциональное ПО, сгенерирован- ное с использованием метода миллиона мартышек, практически наверня- ка не будет работать корректно, и мы можем сказать это с уверенностью, даже если понятия не имеем, как оно должно работать и что фактически делает. Следствием этого является то, что единственное транспортное средство, пользующееся моим доверием, — это лошадь, которая, надо признать, тоже была спроектирована посредством случайных процессов, но про-
2.3. Я пишу ПО — насколько хорошо я должен знать электронику ? ■ 35 шла гораздо более длительный период бета-тестирования, чем любое транспортное средство, сделанное человеком. Настоящее же беспокой- ство вызывает то, что вознаграждение за нахождение на месте 999999-й мартышки постоянно гораздо больше вознаграждения за нахождение на месте миллионной. Ради примеров результатов работы настоящего кластера мартышек (хотя и с количеством узлов несколько меньшим миллиона) посетите www.vivaria, net/experiments/notes/documentation/. Среди многих вопросов, вызывающих яростные дебаты, есть и вопрос о том, насколько большими познаниями в электронике должен обладать ин- женер по встраиваемым системам, чтобы работать эффективно. Некоторые люди отстаивают мнение, что для инженеров, занимающихся чисто встроен- ным ПО, нет нужды знать аппаратную часть свыше простого понимания по- ведения системы на уровне регистров. Другие говорят, что они никогда бы не приняли на работу инженера, даже на должность, связанную исключительно с ПО, если он (или она) не обладал бы хорошей практической хваткой в раз- работке как аналоговых, так и цифровых схем. Истинный ответ на этот вопрос находится где-то посредине и зависит от того, какого рода разработки вы собираетесь делать. До определённой степе- ни фактором также является размер компании. Если вы собираетесь работать в маленькой фирме или в небольшой команде в компании покрупнее, то вы окажетесь под повышенным давлением. От вас будут ожидать уверенности в собственных силах и способности решать проблемы, которые лежат «за чер- той», очерченной описанием ваших должностных обязанностей (см. главу 6). Вам не надо быть гуру, но всё же следует понимать поведение других частей системы, чтобы вы могли предсказать, как она поведёт себя при взаимодей- ствии с вашей программой. Когда вы доберётесь до «чистого металла» (напри- мер, при написании драйверов устройств), то проведение надёжной отладки может оказаться практически невозможным делом, если вы не способны под- цепить осциллограф или логический анализатор и понять, что именно делает аппаратная часть при выполнении вашего кода. Раз уж я добрался до этой темы, то позвольте мне заявить со всей страстью, что идеи как о ПО, независимом от «железа», так и об аппаратной части, не- зависимой от ПО, опасны и глупы. Ни тот, ни другой компонент не могут ра- ботать сами по себе; вы можете разработать поразительно сложную и мощную аппаратную часть встраиваемой системы, но, пока она не станет платформой,
36 ■ Глава 2. Образование поддерживающей рабочее ПО, она будет просто лабораторным хламом. Точно так же вы можете создать ПО встраиваемой системы, используя какое-нибудь стороннее симулирующее оборудование, но, пока оно не будет загружено в ре- альное устройство, оно будет прожектом из области компьютерных наук, а не продуктом. Это, кстати, совершенно не дискредитирует симуляцию, но в основе симуляции программ лежит то, что симулирующее оборудование имитирует зна- чимые характерные свойства фактического оборудования, на котором ожида- ется работа конечного продукта. Меня как инженера-разработчика в крупной компании раздражает без конца видеть, как команда, занимающаяся аппарат- ными вещами, строит нечто «превосходное» и швыряет эту штуку через стенку группе программистов. Разумеется, программисты разрабатывают превосхо- дное ПО, которое просто чудесно работает на эмуляторе и, может быть, даже на первом прототипе. И естественно, когда превосходная программа встречается с превосходным «железом», возникают непредвиденные проблемы. Так что точно вам следует знать? Вот краткий список умений и знаний, кото- рые я бы посчитал важнейшими, но которые, возможно, не очевидны для нович- ка. Заметьте, что не всё из этого явно включено в программу на степень BSEE: • По крайней мере, рудиментарное понимание того, как разводятся шины питания и как влияет плохая разводка на качество питания. Даже если вы никогда лично не разводите платы, вам надо уметь обнаруживать пробле- мы, возникающие из-за путаницы в разводке. Ваши BSEE-курсы, весь- ма вероятно, не дадут вам что-нибудь особо практичное по технике раз- водки печатных плат. Очень полезная книга Говарда Джонсона (Howard Johnson) «Проектирование высокоскоростных цифровых схем:руководство по чёрной магии» содержит гораздо больше информации, чем вам, веро- ятно, когда-либо понадобится {High-Speed Digital Design: A Handbook of Black Magic, Prentice Hall PTR, April 1993, ISBN 0-1339-5724-1). • У вас должно быть базовое понимание того, как разводка печатной пла- ты может влиять на время распространения сигналов. • Умение читать схемы. • Понимание на начальном уровне низкочастотных характеристик дио- дов, биполярных и полевых транзисторов, операционных усилителей и компараторов. • Понимание различных конфигураций портов ввода-вывода в цифровых микросхемах (таких, как микроконтроллеры) — с открытым истоком, от- крытым стоком, двухтактных, наличия и отсутствия защитных диодов и т. д. Вам, в частности, надо понимать вещи, связанные со сдвигом уровня
2.4. Образовательные ловушки у тупики и аферы, которых следует избегать Ш 37 напряжения (в нынешних системах часто используются различные уров- ни напряжения при вводе-выводе) и с подключением разных нагрузок. Я видел уже слишком много систем, к которым подключают индуктив- ные нагрузки типа реле, не обращая внимания на их природу, что ведёт ко всякого рода странностям при замыкании или размыкании реле. • Некоторые простые технологии для снижения чувствительности к элек- тростатике, размещение искровых разрядников, последовательных це- почек резисторов и конденсаторов к «земле», где это уместно. • Умение работать со симулятором SPICE зачастую полезно, но не являет- ся абсолютно обязательным. • Практические навыки отладки «железа» (см. раздел 2.5). Теперь, когда всё это сказано, если у вас нет абсолютно никаких познаний в электронике и никакого желания их получить, то я бы рекомендовал вам перевести взгляд на ту работу в области встраиваемых систем, которая соот- ветствует высокому уровню абстракции при разработке ПО. По отношению к данной книге это означает, что, вероятно, вам следует пропустить главу 4. Такие системы, конечно, всё же требуют привлечения людей, которые разби- раются как в программных, так и в аппаратных делах. Однако масштаб этих систем столь велик, что смыслящие в аппаратной части люди будут сфоку- сированы на ОС и разработке слоев драйверов устройства. В таких огромных проектах обычно есть место для людей, работающих на уровне приложений, которым вообще нет никакой нужды знать что-либо о «железе», за исклю- чением того, как использовать интерфейсные функции (API — application programming interface), поставляемые командой разработчиков ОС. 2.4. Образовательные ловушки, тупики и аферы, которых следует избегать Когда я читаю мою утреннюю «макулатурную» почту и вижу изобилие пред- ложений фальшивых или бессмысленных дипломов, напыщенные заявления и безграничная алчность авторов всегда неодолимо вызывают в моей памяти тираду Чарльза Диккенса о йоркширских школах его века: «Частные школы долгое время являлись знаменательным примером того, сколь чудовищно пренебрегают в Англии воспитанием и как небрежно от- носится к воспитанию государство, — к выращиванию добрых или плохих
38 ■ Глава 2. Образование граждан, несчастных или счастливых людей. Любой человек, доказавший свою непригодность к какой-либо другой профессии, имел право без эк- замена и без проверки знаний открыть школу в любом месте, тогда как к врачу предъявлялись требования пройти необходимую подготовку, что- бы оказывать помощь ребёнку при появлении на светили способствовать уходу его из этого мира; подобные требования предъявлялись к аптекарю, к адвокату, к мяснику, булочнику, свечному мастеру — к представителям всех профессий и ремесел, за исключением школьных учителей, а школь- ные учителя, как правило, были болванами и мошенниками, которые, нату- рально, должны были множиться и процветать при таких обстоятельствах, причем йоркширские учителя занимали самую низшую и самую гнилую перекладину лестницы. Люди, промышлявшие скупостью, равнодушием или тупостью родителей и беспомощностью детей, люди невежественные, корыстные, жестокие, которым вряд ли хоть один рассудительный человек поручил бы уход за лошадью или собакой, эти люди послужили достойным краеугольным камнем сооружения, которое при всей существующей не- лепице и великолепном высокомерном laissez-aller* вряд ли имело себе подобное в мире». «Образование. В Академии мистера Уэкфорда Сквирса, Дотбойс-Холл, в очаровательной деревне Дотбойс, близ Грета-Бридж в Йоркшире, маль- чиков принимают на пансион, обеспечивают одеждой, книгами, карман- ными деньгами, снабжают всем необходимым, обучают всем языкам, живым и мертвым, математике, орфографии, геометрии, астрономии, тригонометрии, обращению с глобусом, алгебре, фехтованью (по же- ланию), письму, арифметике, фортификации и всем другим отраслям классической литературы. Условия —двадцать гиней в год. Никакого до- полнительного вознаграждения, никаких вакаций и питание, не имеющее себе равного». * Равнодушии (франц.). Чарльз Диккенс. «Жизнь и приключения Николаса Никльби»1) В разделе 2.1 я уже ссылался на программу BSEET и говорил, что не посо- ветовал бы её людям, думающим о долговременной карьере в сфере техники встраиваемых систем. Однако существует множество других медвежьих лову- шек, расставленных на доверчивых студентов. Спектр этих ловушек широк — от курсов, которые просто не так полезны, как кажутся, до образовательных программ так называемого жизненного опыта, являющихся откровенным на- дувательством (подробнее об этом далее). Проблему выбора программы обу- 1} Пер. Кудрявцева Г. Г. — Примеч. ред.
2.4. Образовательные ловушки, тупики и аферы, которых следует избегать ■ 39 чения в Соединённых Штатах исключительно сложно разрешить, поскольку система высшего образования в этой стране строится, очевидно, исключи- тельно на принципе свободного рынка без централизованного правитель- ственного регулирования. Практически любой может брать плату и выдавать «дипломы». Третья сторона, скажем, предполагаемый работодатель, теорети- чески может судить о ценности диплома по тому, аккредитовано ли выдав- шее его учебное заведение кем-нибудь, достойным уважения. Это напоминает известный вопрос о курице и яйце, потому что любой мошенник, который может открыть выдающую дипломы «школу», также может создать частное сертификационное агентство для её «аккредитации»0. Поэтому, чтобы понять ценность диплома, вам действительно необходимо знать, кем аккредитовано учебное заведение, и насколько добросовестен сертифицирующий орган. Из-за этого вместе с обилием разнообразных учебных планов и заявлений различных институтов о качестве обучения оценка относительных достоинств разных программ высшего образования может оказаться мучительно трудным делом. Очевидно, диплом Плющевой Лиги легко отличить от махинации вро- де «напечатай свой собственный диплом, плати только за бумагу!», но между этими двумя крайними случаями лежит очень широкий спектр по стоимости и практичности. Давайте также не будем забывать, что, как только вы закон- чите образовательную программу, надо будет суметь убедить работодателя или других коллег в полезности вашей квалификации. В качестве общего эвристического правила я бы сказал, что если вы смо- жете приблизиться к «нормальной» образовательной программе (воспроизво- дя курсы и этапы, которые бы возникали, если бы вы поступили на эту про- грамму сразу после средней школы), то ваша жизнь будет проще. Бюрократы в колледжах относительно плохо понимают, каким образом управляться с не- обычными ситуациями, особенно на студенческом уровне. Если вам надо за- честь прослушанные ранее курсы либо, ещё хуже, получить диплом, который бы признавался в другой стране или получил оценку лицензирующего органа или работодателя, то у вас всё пойдет гораздо более гладко, если ваши доку- менты просты для понимания. Многие люди, рассчитывающие на карьерный рост, обращают взгляд на программы дистанционного образования по почте или в сети Интернет, так, что- бы им было проще втиснуть обучение в напряженный график служебных и до- 0 Интересную статью на эту тему, с небольшим историческим экскурсом, можно найти на сайте www.degree.net/guides/accreditation_guide.html.
40 ■ Глава 2. Образование машних дел. В этом случае первая проблема, над которой надо подумать, — каким образом определить качество программ дистанционного образования. Далее, то, что я собираюсь сказать здесь, довольно несправедливое обобще- ние, но при поиске электротехнических программ я бы советовал относиться с чрезвычайным подозрением и осторожностью к тем из них, которые пред- лагают исключительно дистанционную форму обучения. Инженерное дело — дисциплина практическая, и лабораторные работы являются важной частью образовательного процесса. Если мы исключим «колледжи», которые общеизвестны как фабрики дипло- мов^, то останется лишь небольшое число учебных заведений, предлагающих полностью дистанционную образовательную программу электротехническо- го профиля, и вы, вероятно, потратите массу времени, пытаясь их отыскать. Инженерное дело, будучи практической дисциплиной, имеет лабораторную составляющую, которую очень сложно обеспечить при дистанционном обу- чении. Обратите внимание, кстати, что выполнение легитимной дистанцион- ной программы такого рода потребует помощи инженера или другого квали- фицированного профессионала — возможно, вашего начальника — живущего неподалеку от вас. Этот человек будет поверенным, следящим за вашими эк- заменами и другой оцениваемой, рассчитанной на выполнение в определён- ное время работой. Учебные заведения устанавливают разные критерии при- емлемости для назначения человека поверенным. Если вы присматриваетесь к таким курсам обучения, обязательно проверьте, чтобы в программе указы- валось, что она аккредитована ABET, и перепроверьте это, посетив сайт ABET и найдя там нужное учебное заведение. Все образовательные учреждения с аккредитацией ABET должны быть сертифицированы одним из шести глав- ных региональных сертификационных агентств, действующих на территории Соединённых Штатов2), поэтому вам не надо беспокоиться об этом аспекте легитимности учебного заведения. 1) На эту тему есть приятная книжка уважаемых авторов Аллена Эзелла (Allen Ezell) и Джона Бэра (John Bear) «Фабрики дипломов: миллиарды долларов в индустрии, продавшей свыше миллиона липовых дипломов» (Degree Mills: The Billion-Dollar Industry That Has Sold Over a Million Fake Diplomas, Prometheus Books, January 2005, ISBN 1-5910-2238-X). 2) Департамент высшего образования Федерального управления просвещения поддерживает удобную, доступную для поиска базу данных аккредитованных учебных заведений (прочитайте их формулировку, чтобы понять, что это означает в контексте) на www.ope.ed.gov/accreditation.
2.4. Образовательные ловушки, тупики и аферы, которых следует избегать ■ 41 Обратите внимание, что есть несколько учебных заведений — я не могу сказать с уверенностью, признаны ли они фабриками дипломов или нет, — которые изобрели инженерную «аккредитацию» для самих себя. Одно из этих учреждений, по крайней мере до недавнего времени, рекламировало на своём сайте лавры «Национального обчества (так!) аккредитованных инженеров» (National Siciety of Accredited Engineers). Другие образовательные заведения по поводу лицензирования или аккредитации делают неопределённые заяв- ления, такие, как «лицензированы штатом Вайоминг»0. Такая лицензия, даже если она существует, просто позволяет работать в качестве средней школы или вуза. Она не имеет ничего общего с региональной сертификацией колледжа и абсолютно никак не связана с той единственной аккредитацией ABET, в кото- рой вы действительно заинтересованы. Видя всю эту сложность, вы, возможно, чувствуете сильное искушение по- интересоваться, действительно ли имеет такое уж значение, какой колледж выбрать для поступления. В конце концов большинство работодателей даже не будут проверять, существует ли вообще ваша альма-матер, не говоря уже о проверке её региональной аккредитации. Наверняка среди работников есть тысячи людей с ничего не значащими бумагами от фабрик дипломов. К не- счастью для них — и для вас, если вы пойдете этим путём, — иметь такие бу- маги примерно то же самое, что сидеть на ручной гранате с выдернутой чекой. Нужен лишь один недовольный коллега, задающий вопросы, и вас при случае могут уволить. Определённо не стоит рисковать. Это не оправданно даже с точки зрения стоимости — многие фабрики дипломов запрашивают пример- но такие же суммы за обучение, какие вы бы заплатили в достойном уважения колледжей Весьма уважаемой книгой на тему дистанционного обучения является «Пу- теводитель Бэра по дистанционному получению дипломов» Мэриха П. Бэра 1} Я намеренно использую в примере Вайоминг, так как этот штат печально известен нестрогими стандартами лицензирования учебных заведений. Если вам интересно, вы мо- жете прочитать характерный законопроект на www.legisweb.state.wy.us/statutes/titles/title21/ cO2aO4.htm. Однако все эти законодательные дела, в лучшем случае, мышиная возня — как только вы ужесточаете правила в одной юрисдикции, аферисты просто переходят в следую- щее место с наименее строгими правилами. 2) Должен со стыдом сознаться, что, когда я начал засматриваться на программы дис- танционного обучения, я не понимал систему аккредитации в США, поэтому я не задал правильных вопросов правильным людям. В результате я потратил существенные суммы на учебное заведение, которое хотя и не отнесено к фабрикам дипломов, но определённо находится где-то на грани. Вы не найдёте упоминаний о нём в моём резюме.
42 ■ Глава 2. Образование и Томаса Никсона (Mariah P. Bear and Thomas Nixon, Bear's Guide to Earning Degrees by Distance Learning, Ten Speed Press, January 2006, ISBN 1-5800-8653-5). Эта книга регулярно обновляется, и её следует считать важнейшей точкой от- счёта, если вы думаете учиться дистанционно. Как дополнение к своим кни- гам Бэр и другие ведут информативный сайт на www.degree.net. Теперь всё должно быть очевидно: чтобы никогда не попасть в ловушку, получая по электронной почте предложения по обучению, я бы посоветовал считать их фальшивкой. Все сайты по трудоустройству (и другие сайты, коли на то пошло) в нашем мироздании продадут ваши контактные данные вся- кому, у кого есть желание заплатить за них. Они также предлагают «целевые» кампании рассылок писем по электронной почте любому, имеющему средства для финансирования этих операций. В результате если вы когда-либо разме- щали в сети своё резюме или пытались через Интернет устроиться на работу (и даже если вы не делали ничего подобного), то вы точно будете регулярно получать спам, навязывающий «дипломы на основе жизненного опыта». Хотя большинство колледжей действительно зачитывают некоторые предметы, принимая во внимание производственный опыт, ни одно легитимное образо- вательное учреждение не выдаст вам диплом чисто на его основе. Получение зачетов за жизненный опыт в настоящем колледже может оказаться довольно трудной задачей. Требования простираются от простого получения письма от вашего начальства, утверждающего, что это то, чем вы занимаетесь в повсед- невной работе, до написания эссе в 5—10 тысяч слов на тему зачитываемого предмета и/или, возможно, сдачи экзамена. Наконец, есть ряд ГГ-квалификаций, таких, как MCSE, CNE, CNA и так да- лее, которые постоянно рекламируются и предлагаются в составе корпоратив- ных образовательных программ. Столь же часто люди, выражающие интерес к миграции на «программистскую» или «инженерную» работу, будут получать рекомендации пройти один из этих курсов. Это для меня непонятно, но, ви- димо, в голове человека, не являющегося инженером, все названия должно- стей, содержащих слово «инженер», сливаются в единое целое. Пожалуйста, не тратьте ваше время и деньги на такие курсы. Они дают исключительно сер- тификаты, имеющие отношение к работе в области информационных техно- логий («инженер по сетям» — это не инженер в том смысле, какой мы вклады- ваем в это слово в данной книге, и конечно же не инженер по встраиваемым системам, как ни растягивай это понятие). Что ещё хуже, большинство из этих сертификатов должны ежегодно обновляться за довольно значительную сум- му. В качестве ремарки я бы хотел указать, что рабочие места, к которым име-
2.5. Практические навыки, которые вам надо получить ■ 43 ют отношение такие сертификаты, — это именно та категория мест в сфере высоких технологий, которые в последние годы массово мигрируют в офф- шорные центры. Хватит о тех вещах, которые вы определённо не хотите изучать. С другой стороны, есть умения действительно огромной важности, которые может дать формальное образование, но к ним, кажется, студенты инженерного профиля относятся как к бесполезным. В следующем разделе некоторые из них обсуж- даются подробно. 2.5. Практические навыки, которые вам надо получить Неважно, в чем именно вы намереваетесь в конечном счёте специализи- роваться, существует небольшое ядро базовых умений, которые сослужат вам огромную службу в любом секторе техники встраиваемых систем. Некоторым из них детально учат в колледжах, другие удостаиваются только упоминания без какой-либо детальной проверки усвоения, а остальные познаются и шли- фуются исключительно посредством практического опыта. Я надеюсь, тот факт, что вы читаете данную книгу — и предположительно даже раскошелились на её покупку, — продемонстрирует, что один из самых важных навыков, который вы можете получить, — это изучить потерянное ис- кусство эффективного чтения и письма на, несомненно, мертвом языке, из- вестном как английский. Большинство инженеров, возможно, не станут авто- рами толстых книг, но всякий хороший специалист напишет за свою карьеру тысячи слов в технических документах, включая следующие: • Подробные описания продуктов, точно объясняющие людям, ответ- ственным за сбыт, и людям, пишущим руководства по эксплуатации, что эти изделия делают. • Спецификации протоколов, объясняющие другим инженерам, как об- мениваться информацией с вашим изделием. • Технические обзоры, рассказывающие другим инженерам, над чем вы работаете и какие полезные открытия сделали. • Заявки на получение патентов.
44 ■ Глава 2. Образование • Статьи для технических журналов (такие публикации могут сделать вас существенно более заметной фигурой в организации — подумайте о ро- сте зарплаты и продвижении по службе). • Замечания по отладке, письма продавцам, техникам по гарантийному обслуживанию и коллегам-инженерам для решения проблем. • Оправдательные бумаги (осмелюсь это сказать) за определённое разви- тие событий. Когда вещи выходят из-под контроля и в воздухе начинают летать встречные обвинения, обычно выигрывает тот, за кем тянется са- мый лучший бумажный «хвост». Большинство студентов инженерного профиля — фактически большинство студентов естественнонаучного профиля — относятся к связанным с языком занятиям как к пустой трате времени. К несчастью для них, за очень редкими исключениями0, инженеры, которые могут писать понятные и лаконичные документы, — это именно те, чьи спецификации полны и легки для понима- ния, чьи программы хорошо структурированы и просты для чтения и для кого эффективное общение с коллегами не представляет особой трудности. Обратите внимание, что в Табл. 1.1 BSEE программы, которую я привел в разделе 2.1, содержится только шесть кредит-часов для английского языка. Это более или менее соответствует средней BSEE программе; вы можете на- брать ещё немного письменных и устных занятий на выбираемых гуманитар- ных предметах. Неважно, каким образом вы составите расписание ваших за- нятий, в формально предусмотренных языковых предметах в программах на степень бакалавра в области инженерных наук вас лишь мимолетно познако- мят с искусством владения языком. Вам надо практиковаться в этом. Необхо- димо ненасытное чтение — не только технических книг, но и художественной литературы, написанной хорошими авторами. Выделите на это время в вашем еженедельном расписании (подсказка: ванна — отличное место, чтобы рас- слабиться и почитать, а на Project Gutenberg вы можете бесплатно скачивать в PDA бесчисленные тексты в электронном виде и читать их где угодно). Прак- тикуйте умение выражать свои мысли письменно везде, где только можете. До того как меня начали публиковать, я шлифовал этот навык главным образом 0 В данном утверждении я не говорю о людях, для которых английский не является родным языком. Всякий раз, когда в этом разделе я пишу «английский язык», вы можете подставлять «родной язык инженера». Я говорю просто о владении языком, не обязатель- но английским. Однако уже только из-за того, что большинство научных и технических публикаций выходят на английском языке, было бы разумно выучить его, если он для вас не родной.
2.5. Практические навыки, которые вам надо полунить ■ 45 в шутливых рассказах — технических и иных — на Usenet и, ранее, в Fidonetx\ Хорошее владение языком может возвысить компетентного инженера над его коллегами. Другой существенный набор умений, который вы не сильно затронете при формальном обучении, — разводка печатных плат и понимание концепций технологичности (DFM — design for manufacturing). И то, и другое — отдель- ные предметы, но, с точки зрения инженера по встраиваемым системам, они тесно связаны и могут изучаться одновременно. Хотя инженер-разработчик в компании даже скромного размера не будет, вероятно, тратить много време- ни, работая над платами, важно понимать, по крайней мере, основы того, из чего складываются процессы проектирования, разводки и монтажа печатных плат. Если вы работаете в крупной компании, у вас будет возможность погово- рить с инженерами на производстве и мастерами разводки плат и почерпнуть массу полезных знаний. Вам вовсе не надо раздражать людей беспрестанными вопросами, просто внимательно слушайте во время обзорных докладов о про- ектах, и вы значительно улучшите своё понимание этих вопросов. Есть мно- жество деталей, которые, когда вы их слышите, интуитивно кажутся очевид- ными, но о которых вы бы, может быть, никогда сами не подумали. Напри- мер, необходимость располагать керамические конденсаторы поверхностного монтажа подальше от краев печатной платы, чтобы избежать их растрески- вания во время вырубки; гарантировать, что вокруг поверхностно монтируе- мого микроконтроллера вы оставили достаточный зазор для использования тестового зажима; понимание того, как происходит дрейф и самовыравнива- ние компонентов на контактных площадках при прохождении через печь ИК- оплавления и т. п. Вам также понадобится набраться опыта практической отладки ПО. Хо- рошее начало для этого — просто занятия в вашем колледже. Если вы зани- маетесь с достаточным усердием на практических работах по курсу компью- терных наук или по другому относящемуся к программированию курсу, то на момент окончания колледжа у вас будет начальное понимание методологии отладки программ. Однако к одному делу колледж оставит вас практически 1} Всемирная сеть электронных досок объявлений (BBS — bulletin board system) во вре- мена, когда ещё не было Интернета; моей была ZWSBBS, 3:634/396. Fidonet всё ещё су- ществует (хотя существенно сократилась с тех пор) и подключена к Интернету в разных точках — подробности смотрите на www.fidonet.org.
46 ■ Глава 2. Образование совершенно неподготовленным — к прыжку в омут и началу работы над под- держкой большого программного проекта, созданного кем-то другим0. Практически гарантировано, что ваша первая работа (и каждая последую- щая, если уж на то пошло) будет включать поддержку какой-нибудь унасле- дованной программы. Может быть, вам повезёт, и вы обнаружите, что код аккуратно документирован и снабжён хорошими комментариями. Или вы можете столкнуться (как сталкивался я) с программой, вообще не содержа- щей комментариев и структурированной на такой сложный и странный ма- нер, что добавление или удаление одной строчки комментариев может заста- вить компилятор аварийно завершить работу с выдачей внутренней ошибки. Наиболее полезный обнаруженный мной способ подготовки к этому — взять проект с открытым исходным кодом и дополнить его определённой простой функциональностью. Например, вы могли бы поставить перед собой цель модифицировать драйвер IDE в ядре Linux таким образом, чтобы он зажигал красный светодиод всякий раз, когда от слоя приложений приходит запрос на операцию записи, или зеленый светодиод для операции чтения. В качестве более сложного проекта можно было бы взять ОС с открытым кодом, такую, как NetBSD или eCos, и адаптировать её к новой платформе. В любом случае целью является разобраться в существующем коде до такой степени, чтобы знать, куда вставить ваши изменения и модифицировать программу настоль- ко мягко, насколько возможно, чтобы избежать возникновения сбоев. Наконец, большинству инженеров по встраиваемым системам понадо- бятся, по крайней мере, рудиментарные навыки работы в лаборатории. Это включает умение паять прототипы и работать с осциллографом, генератором сигналов и анализатором спектра. Основы, которые вы получите в коллед- же, скорее всего будут адекватной базой для этого. С опытом ваши умения существенно возрастут. В наше время также очень полезно уметь работать с компонентами, предназначенными для поверхностного монтажа. Вы можете попрактиковаться в этом на любом хламе: на старой материнской плате ПК, на старом DVD-плеере или на любой подобной плате с большим количеством компонентов. 0 Общий недостаток обучения в школьной среде состоит в том, что вы знаете, что дан- ная вам задача имеет решение, что есть знания и время для нахождения этого решения, и вы можете предполагать (по расположению курса в учебной программе), что именно име- ет отношение к заданию. Реальные проблемы не дают никаких гарантий и подсказок, вы остаетесь один на один с постоянно тикающими часами (и бюджетом) и начальством, ко- торое дышит вам в затылок. Наслаждайтесь студенческим временем; задачи здесь — самые простые из всех, которые вам когда-либо предложат решить.
2.5. Практические навыки, которые вам надо получить ■ 47 Я уверен, вы обратили внимание, что здесь вновь всплыла та же тема — даже если вы теоретически изучаете в учебном заведении что-то, я заклинаю вас найти возможности для работы над похожими проблемами, требующи- ми этих знаний, в реальной жизни. Более того, многое из того, что вам надо знать, вы можете получить, только имея дело с реальными проблемами. Ин- женерное дело — практическая дисциплина. Погрузитесь в какие-нибудь «до- морощенные» проекты, чтобы ваши навыки не «заржавели» и были готовы к действию. Этим вы также демонстрируете будущим работодателям свою само- мотивацию.
ГЛАВА з УЧИМСЯ САМИ, СНИЗУ ВВЕРХ. МАЛЕНЬКИЕ ВСТРАИВАЕМЫЕ СИСТЕМЫ 3.1. Целевая аудитория На инженерных форумах по встраиваемым системам один из наиболее часто задаваемых новичками вопросов звучит примерно так: «Какой микро- контроллер мне следует изучить, чтобы сразу получить знания, ценящиеся на рынке труда в области встраиваемых систем?» Этот вопрос также довольно ча- сто задается техниками и инженерами с опытом проектирования схем, кото- рые хотят дополнить свой набор знаний умением создавать встраиваемое ПО. Данная глава даст таким людям некоторое понимание, почему на этот вопрос не так-то просто ответить, а также определённые полезные рекомендации, ка- сающиеся того, какие платформы вы могли бы выбрать для экспериментов и в целях обучения. Сейчас подходящий момент сделать очень важное замечание, касающееся тех людей, кто занят главным образом проектированием «железа». Для совре- менного инженера-разработчика аппаратных средств понимание, по крайней мере частичное, находящегося на верхнем уровне программного слоя •— не просто практическая необходимость. Хорошее понимание того, что может быть достигнуто с помощью встраиваемого ПО, сделает ваши схемные реше- ния более эффективными. Есть задачи, которые гораздо проще решить про- граммно, а не аппаратно, и хороший разработчик должен помнить о том, что в проекте в целом можно совмещать программную реализацию каких-нибудь функций с аппаратной.
3.7. Целевая аудитория ■ 49 Рассмотрим тривиальный пример. Ожидается, что к большинству микро- контроллеров, в которых имеется аппаратный универсальный асинхронный приёмопередатчик (UART — Universal Asynchronous Receiver/Transmitter), бу- дет подключена готовая драйверная микросхема, совместимая с RS-232 (чип МАХ232 — обычный кандидат, и эту микросхему можно купить у многих по- ставщиков). Предположим, вы подключаете микроконтроллер через UART к чему-то ещё, находящемуся на той же плате, и не намерены осуществлять преобразование уровней выдаваемого сигнала к уровням, определяемым спецификацией протокола RS-232. В этом случае ПО будет проще и гораздо эффективнее в смысле затрачиваемых тактов, если вы сделаете так, что або- нент на другом конце коммуникационного канала будет принимать инверти- рованный входной сигнал. В любом случае в ответ на вопрос: «Какой микроконтроллер мне следует изучить, чтобы достичь богатства и славы?» — коротко можно сказать, что знание работы того или иного МК не приведёт вас непосредственно к по- лучению работы0. Когда вы придёте на новое рабочее место, то обнаружите определённое количество унаследованной техники, реализованной на том или ином микроконтроллере (возможно, на столь древнем, что вы бы никог- да его не выбрали даже в самом кошмарном сне2)) и, вероятно, более новое поколение на основе другого семейства микроконтроллеров. А когда вы при- ступите к работе над собственными совершенно новыми проектами, вы опять же можете выбрать другое семейство. На ваш выбор МК будут влиять разноо- бразные факторы: доступность в будущем, цена, контрактные отношения с дистрибьюторами, ограничения источников питания, необходимые характе- ристики, требуемая периферия и далее по списку. Возможно, иногда вы встречали людей, спрашивающих, имеет ли смысл изучать способы разработки на 8-битных ядрах, если 32-битные дешевеют с каждым днем. Эти люди не принимают во внимание тот факт, что для выпу- 1} Иногда для какой-нибудь отдельной работы требуют опыт использования опреде- лённого микроконтроллера. Описание работы с подобным ограничением указывает на недостаток понимания со стороны разместившего данное предложение. Для любого ком- петентного инженера изучение нового микроконтроллера является тривиальным упраж- нением. Много времени уходит на изучение системы, и это время не может быть серьёзно сокращено за счёт знакомства только с несколькими компонентами. 2) Так бывало в моей ежедневной деятельности и в проектах, за которые я брался по контракту. Существующий код и аппаратная часть для недавно принятых на работу по- добны назначенной свадьбе — они, возможно, сделали бы все лучше, но боятся и осто- рожничают.
50 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы скаемых в массовом количестве потребительских товарах, таких, как видео- магнитофоны и CD-плееры (для которых высокотехнологичные микрокон- троллеры не дают вообще никаких преимуществ), небольшая разница в стои- мости трансформируется в огромную годовую экономию. Такие приложения не перейдут с 8-битных ядер на 32-битные до тех пор, пока между ними во- обще не будет разницы в стоимости. Заметьте, это не то же самое, что сказать «никогда». И стоит разъяснить кое-что, чтобы вы могли понять, какие факторы здесь работают. Так как раз- меры кристаллов уменьшаются, стоимость заключения кристалла в корпус и разводки (приваривания проводников от кремния к выводам, выходящим во внешний мир) начинает преобладать в общей стоимости микросхемы. Из- за меньшего числа транзисторов 8-битные кристаллы-полуфабрикаты будут всегда дешевле 32-битных, но к тому времени, когда чипы будут упакованы на продажу, разница в цене может оказаться почти незаметной. Для некото- рых применений уже можно предвидеть, что не будет реального выигрыша в себестоимости, если их будут продолжать реализовывать на 8-битной архи- тектуре. Здесь имеется сложный и довольно интересный набор одновременно работающих факторов. Стоимость индивидуальных чипов-полуфабрикатов (бескорпусных чипов, вырезанных из общей пластины кремния — «вафли») определяется главным образом числом технологических шагов в «рецепте» и количеством годных кристаллов, получаемых с каждой «вафли». Так как гео- метрические размеры чипов уменьшаются, то на пластине умещается большее количество заготовок. Дополнительно абсолютная разница в стоимости между 8-битными и физически более крупными 32-битными ядрами снижается, так как абсолютный размер обоих становится меньше. Относительная разница в размере остается той же самой; если 32-битное ядро было на 30% больше до уменьшения, то после оно всё равно останется на те же 30% больше. Одна- ко поскольку каждый элемент стоит меньше после уменьшения размеров, то финансовое влияние этой разницы в размерах снижается. С другой стороны, меньшие геометрические размеры могут привести к пониженному выходу годных кристаллов, поскольку один дефект в пластине, вероятно, повлияет на большее число заготовок. Этот фактор воздействует на стоимость чипов малых размеров в сторону увеличения. Итоговый результат этого рассказа в том, что с улучшением процессов производства стоимость ядер — на любой вкус — асимптотически приближается к нулю. Когда и 8-битные, и 32-битные ядра приближаются к этой магической точке, стоимость самих ядер становит- ся незаметной за другими факторами.
3.1. Целевая аудитория ■ 51 Для микроконтроллеров с большой встроенной памятью стоимость ядра более или менее несущественна по сравнению со стоимостью массива памяти. Однако этот вопрос становится ещё более запутанным, поскольку процессы, используемые при изготовлении памяти, — это не те же процессы, что исполь- зуются при изготовлении микропроцессорных ядер. Из-за сложности микро- процессоров требуется несколько слоев межсоединений. Это необходимо для трассировки больших шин вблизи множества периферийных устройств, и во многих случаях нужны дополнительные специальные узлы для работы с сигналами смешанного типа. С другой стороны, массив памяти — это просто двумерная матрица, здесь не надо так много слоев. Так как все области чипа должны проходить через каждый процесс, необходимый для создания одно- го устройства на этом чипе, то создать память на одном кристалле с процес- сором обходится гораздо дороже (в долларах за килобайт). Поэтому, перейдя определённый предел, вы обнаружите, что производители переключились на конфигурацию с многоярусным расположением кристаллов — отдельный чип используется для массива памяти, а микроконтроллер установлен на нем сверху0. Оба кристалла соединяются сварными проводниками. Принципиальные недостатки такой конструкции — высокая стоимость соединения двух частей, уязвимость к повреждениям при вибрации, пони- женная скорость и повышенное РЧ-излучение. Очень полезно при сравне- нии цен разных (больших) микроконтроллеров с приблизительно равными возможностями докопаться до подобных деталей и точно определить, какие затруднения у вас возникнут при выборе более дешевого чипа. На некоторые приложения такой выбор не окажет никакого влияния, но для применений с жесткими требованиями к уровню РЧ-излучения (например, GPS-приёмники или мобильные телефоны) при выборе чипов с многоярусной конфигурацией надо очень тщательно искать баланс между стоимостью и параметрами. Оставим это интересное отклонение от темы. Если вы обладаете солид- ным практическим опытом в электронике — я говорю здесь, в частности, об инженерах-разработчиках аппаратных средств и о техниках, — то в таких при- менениях, где обычно используются 8-битные процессоры, у вас есть большое преимущество перед людьми, занимавшимися только ПО. Причина этого в том, что вы уже привыкли вытягивать информацию о состоянии сложной си- стемы, используя аппаратные инструменты, которые обычно позволяют вам заглянуть внутрь системы через крошечное окошко. Вы также достигли ком- 0 В любом чипе, сделанном таким образом, секция памяти будет по размеру гораздо больше, чем микроконтроллерное ядро.
52 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы фортного уровня понимания того, что в системе может идти не так, по внеш- ним проявлениям, видя напряжения и временные параметры. Следовательно, если вы можете квалифицированно управляться с осцил- лографом или логическим анализатором, то вы уже овладели одним из наибо- лее важных навыков, которые придётся использовать при разработке встраи- ваемого ПО: умением многое узнать об отлаживаемой системе, глядя через относительно маленькую щелочку. Хотя и приятно работать с полноценным символьным отладчиком, такая роскошь часто недоступна. Иногда это слиш- ком дорого, чтобы оправдать покупку необходимых аппаратных и программ- ных средств, а иногда вы просто не сможете воспроизвести проблему в вашем коде, прогоняя его на эмуляторе. В оставшейся части этой главы я познакомлю вас с несколькими популяр- ными микроконтроллерными ядрами и опишу некоторые их особенности, как приятные, так и отвратительные. Данная глава, конечно, не руководство типа «бери и запускай» по использованию какого-либо из рассматриваемых контроллеров. Это общий обзор того, что находится внутри чипов, где бы вы могли использовать некоторые из этих семейств контроллеров и каковы их сильные стороны. Там, где возможно, я укажу места, в которых вы можете по- лучить аппаратные и программные средства для проведения своих собствен- ных разработок и экспериментов. Относящееся к делу замечание. В этой главе я упоминаю названия несколь- ких поставщиков и продуктов и привожу некоторые приблизительные цены. Я не рекомендую этих поставщиков в том же самом смысле, в каком атлет мог бы рекомендовать компанию, производящую спортивную обувь («Покупай- те кроссовки Фреда! Их испытания мне оплатили действительно быстро!»). Я однозначно не призываю вас что-то покупать, я лишь привожу эти данные ради удобства, чтобы вы могли быстро найти и прочитать о продуктах, кото- рые я использовал и посчитал хорошо подходящими для целей самообучения без значительных затрат. 3.2. Варианты микроконтроллера 8051 фирмы Intel и других С начала эры микропроцессоров почти во всех инженерных курсах архи- тектуру микроконтроллера 8051 фирмы Intel называют промышленным стан- дартом. Когда об этом чипе говорят в благовоспитанном обществе (и даже в
3.2. Варианты микроконтроллера 8051 фирмы Intel и других ■ 53 книгах вроде этой), вы, в общем случае, обнаруживаете, что номер 8051 пред- варяется прилагательным «почтенный» или его синонимом. Лично я бы ско- рее описал его словом «немощный», но абсолютно достоверным остаётся факт, что 8051 — всё ещё самое продаваемое в мире 8-битное микропроцессорное ядро. Если исключить возможность каких-нибудь крупных религиозных вос- станий, то, вероятно, такое положение будет сохраняться до тех пор, пока в мире будут производиться и использоваться 8-битные микроконтроллеры. Я включаю в эту книгу обсуждение контроллера 8051 по двум главным при- чинам и одной второстепенной: 1. Он неожиданно всплывает во всякого рода очевидно не связанных между собой приложениях. Например, во многих специализированных стан- дартных продуктах (ASSP — application-specific standard product) имеется ядро 8051. Таким образом, у вас есть очень хорошие шансы столкнуться с каким-нибудь вариантом 8051 в своей карьере. Знакомство с возмож- ностями этого ядра, если и не понадобится ни для чего другого, поможет решить, каким образом приладить ваш проект. 2. Если вы можете эффективно работать с 8051, то сможете работать с чем угодно, так что это не столь уж плохая с точки зрения изучения архитек- тура. 3. Микроконтроллер 8051 оказывается очень эффективным в задачах, включающих манипуляцию данными на битовом уровне. По количеству требуемых тактов в таких операциях он быстрее многих 32-битных ми- кроконтроллеров. Возможно, вы посчитаете это свойство полезным, поскольку 8051 к тому же весьма дёшев. С точки зрения образовательных целей плюсом семейства 8051 является его вездесущность. С точки зрения реальных коммерческих проектов можно сказать, что главным достоинством 8051 является его доступность из многих источников, и у вас есть гарантированный путь отступления к другому постав- щику при возникновении проблем с тем, с которым вы работаете. Эта традиционная мудрость, по большому счёту, не совсем верна. Меня не- сколько раздражает, когда её произносят люди, не обладающие достаточной квалификацией. Определённо верно, что поставщики предлагают как неболь- шое число чрезвычайно унифицированных МК, изготавливаемых в почти идентичных корпусах, так и более специализированные микроконтроллеры. Некоторые из них оптимизированы на выполнение микрокода с меньшим
54 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы числом тактовых циклов на инструкцию, некоторые обладают более высо- кими максимальными тактовыми частотами, имеют больше ОЗУ, встроенные средства отладки, дополнительные универсальные асинхронные приёмопере- датчики (UART) и так далее. Если вы посмотрите на ASSP, такие, как микро- схемы цифровых камер, контроллеры USB клавиатур и мышей, интерфейс- ные чипы USB флэш-накопителей и т. п., то увидите, что здесь вообще нет никакой стандартизации, помимо голого набора команд. Определённо здесь невозможна простая замена микросхемы от одного поставщика микросхемой другого. В результате 8051 будет действительно доступен из многих источни- ков (в смысле прямой замены, с совпадением выводов), только если вы хо- рошенько потрудитесь, чтобы избежать использования любых особенностей, специфичных для микроконтроллеров конкретного поставщика. А в таком случае, зачем вам за них платить? Для быстрого ознакомления с семейством микроконтроллеров 8051 я опи- шу базовый чип 80С51 фирмы Intel0 для автомобильных применений. Этот микроконтроллер поставляется или в корпусе DIP с 40 выводами, или в кор- пусе PLCC с 44 выводами (расположение выводов в обоих случаях является промышленным стандартом). В нем имеется 4 килобайта встроенной EPROM или ПЗУ, 128 байт ОЗУ, два 16-битных таймера/счётчика, пять входов пре- рываний, один UART. Тактовая частота может достигать 16 МГц. В процес- се разработки вы обычно будете использовать или внутрисхемный эмулятор (ICE — in-circuit emulator), или микроконтроллер 87С51 — вариант с перепро- граммируемой EPROM. Обратите внимание, что для унифицированных ми- кроконтроллеров серии 8051 используется нумерация, подобная нумерации микросхем энергонезависимой памяти: как правило, обозначение 87ххх озна- чает, что используется EPROM, а 89ххх — флэш-память. На Рис. 3.1 показана цоколевка микроконтроллера 87С51 в корпусе DIP с 40 выводами; многочис- ленные клоны имеют идентичную или почти идентичную цоколевку. Среди выводов, как вы видите, преобладают порты ввода-вывода общего на- значения (GPIO — General-Purpose I/O). В стандартном микроконтроллере 8051 имеется четыре 8-битных порта, что дает 32 доступных линии ввода-вывода. Однако порты 0, 2 и 3 мультиплексированы с другими функциями, показан- ными в скобках. Обратите внимание, что для некоторых выводов предусмо- !) Информация для этого раздела взята главным образом из различных руководств по проектированию, а также из «80С31ВН/80С51ВН/87С51 MCS 51 CHMOS SINGLE-CHIP 8-BIT MICROCONTROLLER» (Intel, 2004) и «MCS 51 MICROCONTROLLER FAMILY USER'S MANUAL» (Intel, 1994).
3.2. Варианты микроконтроллера 8051 фирмы Intel и других ■ 55 трено альтернативное использование, когда микросхема программируется в соответствующем программаторе (это здесь не показано). Базовые микрокон- троллеры серии 8051 не программируются в системе. Помните, что не все вводы-выводы общего назначения ведут себя одина- ково, даже если связанная с ними мультиплексированная периферия не вклю- чена! Предположение, что характеристики всех линий ввода-вывода иден- тичны, — ошибка новичков при проектировании на микроконтроллере 8051. В частности, вы должны обратить внимание, что порт 0, когда он использует- ся в качестве порта ввода-вывода общего назначения, имеет выходы с общим стоком без внутренних подтягивающих резисторов. Порт 0 ведёт себя иначе, когда используется для доступа к внешней памяти (подробнее об этом далее). Порты 1, 2 и 3 имеют внутренние подтягивающие резисторы. Если вы исполь- зуете эти порты в качестве входов, и внешнее устройство удерживает выводы на НИЗКОМ уровне, то выводы микроконтроллера 87С51 будут работать как источники тока. (RXD) (TXD) (INTO) (INfl) (TO) (T1) (WR) (RD) Pi.ОС Pl.i С PI.2 С P1.3C PI.4 С P1.5C Pi.6 С PI.7 С RESET С P3.0C P3.1 С Р3.2С РЗ.ЗС Р3.4С Р3.5С Р3.6С Р3.7С XTAL2 С XTAL1 С VssC 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 3 РО.О (ADO) DP0.1 (ADI) 3 Р0.2 (AD2) 3 РО.З (AD3) 3 Р0.4 (AD4) 3 Р0.5 (AD5) 3 Р0.6 (AD6) 3 Р0.7 (AD7) ЭЁА/Vpp* DALE/PROG* DPSEN DP2.7 (A15) ЭР2.6 (A14) 3 P2.5 (A13) DP2.4 (A 12) DP2.3 (All) DP2.2 (A10) DP2.1 (A9) DP2.0 (A8) Рис. 3.1. Цоколевка 8051 в корпусе DIP-40.
56 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы Далее перечислены функции других выводов: • RXD, TXD — линии приёма и передачи данных встроенного универсаль- ного асинхронного приёмопередатчика UART. • _INT0, _INT1 — линии запроса прерываний от внешних источников. • ТО, Т1 — входы внешних тактовых сигналов для таймеров 0 и 1. • _RD, _WR — стробы операций чтения и записи при работе с внешней ОЗУ. • _PSEN (Program Store ENable) — строб операции чтения из внешней па- мяти программ. • ALE/_PROG — вывод разрешения загрузки адреса, используемый муль- типлексированной шиной адресов/данных при доступе к внешней па- мяти. Также используется при программировании микроконтроллеров с EPROM в специализированном программаторе. • RESET — линия сброса микроконтроллера (обратите внимание: актив- ный уровень на этом выводе высокий, что слегка необычно). • _EA/Vpp — если этот вывод притянут к НИЗКОМУ уровню, микрокон- троллер будет загружать код из внешней памяти программ, а не из встро- енной. Это в высшей степени полезное свойство, если вы натолкнулись на упаковку бывших в употреблении микроконтроллеров 8051 с одно- кратно программируемым или масочным ПЗУ. Просто установите на этом выводе НИЗКИЙ уровень и применяйте микросхему без использо- вания встроенного ПЗУ. Я сталкивался с коммерческими устройствами, в частности с дешёвыми модемами и определёнными автомобильными аксессуарами, в которых таким образом повторно использовались вся- кого рода остатки/излишки микроконтроллеров 8051. Если вы намере- ны позволить контроллеру работать с внутренней памятью, вам следует установить на этом выводе ВЫСОКИЙ уровень. Обратите внимание, что в некоторых вариантах 8051 эта функция может частично или полностью блокироваться, если включена защита кода от считывания. • XTAL1, XTAL2 — вход и выход усилителя, к которому подключается кварцевый резонатор. В дополнение к ранее описанным свойствам микроконтроллер 8051 име- ет мультиплексированную шину адреса/данных, обеспечивающую доступ к внешнему статическому ОЗУ объёмом до 64 КБ и к 64 КБ внешней памяти программ. Эти два типа памяти располагаются в разных адресных простран-
3.2. Варианты микроконтроллера 8051 фирмы Intel и других ■ 57 ствах, так как микроконтроллер 8051 является прибором с гарвардской архи- тектурой^. Способы, с помощью которых осуществляется доступ к каждой из этих внешних памятей, в целом похожи, но слегка отличаются в деталях. Рассмо- трим процесс, который используется в микроконтроллере 8051 для доступа к внешней памяти программ при использовании или инструкции MOVC (о ней далее) или для перехода на ячейку внешней памяти: • Микроконтроллер устанавливает на выводах ALE и _PSEN ВЫСОКИЙ уровень. • Младшие 8 бит нужного адреса выдаются на порт 0. В этом режиме порт использует мощные внутренние подтягивающие резисторы. Если вы ис- пользуете порт 0 только для работы с шиной адреса/данных, внешние подтягивающие резисторы вам не нужны. • На выводе ALE устанавливается НИЗКИЙ уровень. • На выводе _PSEN устанавливается НИЗКИЙ уровень и одновременно порт 0 переключается в режим ввода для чтения команды. Порт 2 всё ещё продолжает выдавать старший байт желаемого адреса. В типичной схеме включения микроконтроллера 8051 с использованием внешней памяти вывод ALE соединяется с тактовым входом восьмиразряд- ной защёлки, такой, как 74НС373, а Р0.0...Р0.7 — со входами D0...D7 этой микросхемы. Выходы Q0...Q7 защёлки 74НС373 формируют младшие 8 бит на адресной шине памяти (А0...А7). Старшие 8 бит (А8...А15) поступают непо- средственно с линий Р2.0...Р2.7 микроконтроллера 8051. Линии А0...А15 подключаются непосредственно к адресным входам вашей микросхемы (микросхем) памяти. Сигнал _PSEN идёт на вход _ОЕ (Output Enable) чипа EPROM или флэш-памяти, а линии _RD и _WR должны быть подключены соответственно к входам _ОЕ и _WE (Write Enable — разрешение записи) микросхемы статического ОЗУ. На выводы выбора кристалла (если таковые имеются) микросхем памяти должны быть поданы уровни, переводя- щие память в активное состояние. Всё это звучит довольно сложно и выглядит 0 Если вы не помните курс 101 Computer Science, то вкратце: в архитектуре фон Ней- мана программа и данные располагаются в едином адресном пространстве, а в гарвардской архитектуре — в отдельных адресных пространствах. Это приводит к самым разнообразным последствиям, с точки зрения программистов встраиваемых систем, и особенно — неопыт- ных программистов, использующих высокоуровневые языки, скрывающие некоторые из таких деталей.
58 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы весьма впечатляюще, если вы всё нарисуете на бумаге. Но если вы посмотрите внимательно, то увидите, что во многих случаях можете реализовать подклю- чение внешних ОЗУ и ПЗУ без каких-либо дополнительных компонентов, кроме защёлки 74НС373. Фактически некоторые производители даже прода- ют микросхемы статического ОЗУ и/или EPROM (и в некоторых случаях — экзотические комбинации статическое ОЗУ/EPROM или статическое ОЗУ/ флэш), которые уже имеют встроенную защёлку-демультиплексор адреса, так что пользователи микроконтроллера 8051 могут уменьшить площадь своих печатных плат. Адресация внешнего ОЗУ через указатель данных (DPTR; смотрите далее) осуществляется почти так же, за исключением того, что в цикле доступа к па- мяти вместо выдачи строба с вывода _PSEN используется строб либо с вывода _RD, либо с вывода _WR — в зависимости от того, осуществляется операция чтения из памяти или записи в память. В случае операции записи порт 0 в течение периода, когда _WR активен, выдает записываемые данные, а не ра- ботает в режиме ввода. В чрезвычайно распространенной схемной конфигурации с микроконтрол- лером 8051, в частности платах, предназначенных для любительских экспери- ментов, имеется гнездо для микросхемы флэш-памяти или EPROM с 28 выво- дами (обычно это микросхема 27256 на 32 КБ или 27512 на 64 КБ), джампер для разрешения загрузки из этой внешней микросхемы памяти и один 32 КБ чип статического ОЗУ типа 62256 или подобный ему. Другая довольно распростра- ненная конфигурация похожа на описанную, но имеет одну микросхему флэш- памяти объёмом 32 КБ, сконфигурированную таким образом, что, используя интерфейс внешней памяти, в неё можно осуществлять запись как во внешнее статическое ОЗУ, а чтение — как из внешней памяти программ. Благодаря это- му вы можете расположить маленькую программу-загрузчик в микроконтрол- лере 8051, а пользовательскую программу записать во внешнюю флэш-память. Пользовательскую программу можно легко модифицировать, используя после- довательную связь или какой-нибудь другой традиционный механизм. Конечно, так вы можете подключать не только микросхемы памяти, но и внешние буферы, защёлки для увеличения числа входов-выходов или добав- лять микросхемы расширения периферии, такие, как 82С55. Общей практикой в таких случаях является использование внешней логики, например демулъ- типлексора «один-на-восемь» 74НС138, для дешифрации нескольких бит де- мультиплексированной адресной шины и генерации требуемых сигналов вы- бора микросхем.
3.2. Варианты микроконтроллера 8051 фирмы Intel и других ■ 59 Карта памяти программ микроконтроллера 8051 относительно проста. Имеется единое 64 КБ адресное пространство от OOOOOh до OFFFFh. В зави- симости от уровня напряжения на выводе _ЕА это или единая внешняя 64 КБ память, или 4 КБ внутренней и 60 КБ внешней памяти (в таком случае самые младшие 4 КБ устройства внешней памяти не используются). Обратите вни- мание, что функция защиты кода может приводить к странным результатам, если вы используете внешнюю память программ. Например, некоторые вари- анты микроконтроллера 8051 при включенной защите программ отключают инструкцию MOVC, когда программный счётчик указывает на внешнюю ОЗУ. Смысл этого в том, чтобы не дать взломщику записать код, который считывает нижнюю область памяти программ и выводит её через порт. При этом предпо- лагается, что ваш проект уже использует внешнюю память программ, так что взломщик может просто вытащить устройство, содержащее незащищенную часть кода, вставить свою взламывающую программу и завладеть считывае- мой версией секретного кода. Память данных более замысловата. Внутренняя память данных занимает область от 000h до OFFh. В нижней части этой области, от 000h до OlFh, рас- положены четыре банка по восемь рабочих регистров. Эти регистры обозна- чаются R0...R7; в соответствии с текущим выбранным банком регистр R0 на- ходится по адресу 000h, 008h, 01 Oh или 018h. Область от 020h до 02Fh — доступная пользователю рабочая память, обла- дающая интересным и полезным свойством: она адресуема побитно в одной инструкции. Биты в этой области логически пронумерованы от 000h (бит 0 ячейки 020h) до 07Fh (бит 7 ячейки 02Fh). При использовании ассемблера со стандартным синтаксисом Intel вы можете обращаться к каждому биту или по его 7-битному адресу, или как «20.0», «2Е.4» и т. д. Чрезвычайно эффективно с точки зрения размера кода и скорости его выполнения располагать в этой области флаги программы и другие данные, доступ к которым осуществляется на уровне битов. Несомненно, это одно из ключевых достоинств микрокон- троллера 8051. Оставшаяся область от 030h до 07Fh (верхняя часть внугренней памяти в микроконтроллере 8051) — это рабочая ОЗУ, пригодная для размещения стека и других пользовательских потребностей. Над внутренней памятью данных, от 080h до OFFh, находится область ре- гистров специальных функций (SFR — Special Function Register, см. Табл. 3.1). Эти регистры управляют различными аппаратными устройствами в микро-
60 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы контроллере. Заметьте, что многие из них адресуемы побитно. Также обратите внимание, что SFR-область состоит главным образом из пустых регистров. Они используются для управления иными аппаратными устройствами в вари- антах микроконтроллера 8051 с расширенными возможностями. Например, поскольку DPTR — дефицитный ресурс, многие производители микрокон- троллеров 8051 реализуют дополнительный DPTR (и даже не один), чтобы ускорить выполнение некоторых операций, таких, как копирование больших объёмов данных, или чтобы позволить пользователю поддерживать состоя- ние более чем одного процесса без необходимости сохранять и перезафужать DPTR. Таблица 3.1. Область регистров специальных функций Адрес 080h 081h 082h 083h 087h 088h 089h 08Ah 08Bh 08Ch 08Dh 090h 098h 099h OAOh 0A8h OBOh 0B8h ODOh OEOh OFOh Побитный доступ Да Да Да Да Да Да Да Да Да Да Да Название Р0 SP DPL DPH PCON TCON TMOD TL0 TL1 ТНО ТН1 Р1 SCON SBUF Р2 IE РЗ IP PSW АСС В Функция ПортО Указатель вершины стека Младший байт указателя данных DPTR Старший байт указателя данных DPTR Управление энергопотреблением Управление таймером/счётчиком Управление режимом таймера/счётчика Таймер/счётчик 0, младший байт Таймер/счётчик 1, младший байт Таймер/счётчик 0, старший байт Таймер/счётчик 1, старший байт Порт1 Управление последовательным портом Буфер последовательного порта Порт 2 Разрешения прерываний ПортЗ Управление приоритетом прерываний Состояние (статус) программы (помимо прочего здесь находятся флаги, указывающие, какой регистровый банк используется в данный момент) Аккумулятор Регистр В
3.2. Варианты микроконтроллера 8051 фирмы Intel и других ■ 61 Обратите внимание, что доступ к регистрам специальных функций воз- можен только в режимах прямой адресации. Например, инструкция «MOV 080Н,#012Н» запишет 012Н в регистр специальных функций, находящийся по адресу 080Н, т. е. в порт 0. Однако инструкции «MOV R0,#080H» и далее «MOV @R0,#012H» не изменят состояние порта 0. Причина столь странного на вид поведения заключается в том, что в ва- риантах 8051 с внутренним ОЗУ большого объёма, например 8052, ОЗУ на- ходится «под» областью SFR. Если вы хотите получить доступ к регистрам специальных функций, вы используете прямую адресацию. Если вы хотите получить доступ к ячейкам ОЗУ с теми же самыми адресами, вы используете режимы косвенной адресации. Последний тип памяти, доступной в микроконтроллере 8051, — XRAM, ко- торая адресуется косвенным образом с использованием 16-битного регистра DPTR и инструкции MOVX (например, команда «MOVX @DPTR,A» сохраня- ет содержимое аккумулятора в ячейке внешней памяти, адрес которой нахо- дится в DPTR). Сделаем здесь паузу, чтобы произвести инвентаризацию всех адресных пространств. У нас есть память программ (MOVC, только чтение), память данных/SFR и внешняя память данных (MOVX, чтение/запись). Если вы читаете это и начинаете чувствовать, что архитектура 8051 несколь- ко вычурна, то вы не одиноки. Раздельные адресные пространства (гарвард- ская архитектура) и, в меньшей степени, набор команд не очень дружелюбны к начинающему разработчику встраиваемых систем. Специальные микро- контроллеры 8051, встроенные в проблемно-ориентированные микросхемы (ASIC — Application-Specific Integrated Circuit), могут оказаться даже более сложными для работы, в частности когда вы сталкиваетесь с системами, име- ющими более 64 КБ памяти программ или XRAM. Архитектура также весьма непривлекательна для компиляторов с языков высокого уровня. Предположим, что вы хотите использовать микроконтроллер 8051. Как на- чать работу с этим ядром? Обычный недорогой способ научиться применять эти чипы — купить одноплатный компьютер на основе одной из таких стан- дартных микросхем. Раньше также было необходимо иметь устройство для «прошивки» EPROM, чтобы «прошить» непосредственно или микроконтрол- леры со встроенным EPROM, или внешнюю микросхему. В наши дни гораздо больше возможностей выбора микроконтроллера, и общая сумма, требуемая на первоначальном этапе, существенно ниже.
62 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы Самый дешевый способ начать работу с архитектурой 8051 — сделать свою собственную макетную систему, используя микроконтроллер со встро- енной флэш-памятью, для программирования которого не требуется спе- циальных аппаратных средств. В практическом смысле это означает выбор микроконтроллера, который поддерживает программирование по последо- вательному каналу непосредственно в системе. Интерфейсы программиро- вания по последовательному каналу обычно очень просты, и подсоединение к ПК легко осуществляется с помощью простых аппаратных средств (в не- которых случаях с помощью лишь пассивного кабеля). Лично мне доставля- ет удовольствие работать с микроконтроллерами серии AT89S фирмы Atmel. Это усовершенствованные 8051, работающие на тактовой частоте до 33 МГц. Фирма Atmel бесплатно предоставляет ПО для последовательного програм- мирования в системе (или AT89ISP, или более новое FLIP) и схему простого программирующего кабеля. Весьма вероятно, что все требуемые для кабеля компоненты есть в коробке, где вы складируете всякий хлам0. Суммарная стоимость изготовления кабеля и доморощенной макетной платы составля- ет где-то 20 долл. Что касается коммерческих аппаратных средств разработки для 8051, то здесь доступные вам варианты сыпятся, как из рога изобилия. Роскошный лимузин среди аппаратных средств — внутрисхемный эмулятор (ICE — In- Circuit Emulator), такой, как Nohau EMUL51-PC. Это дорогостоящее обору- дование позволяет вам эмулировать целевое устройство в режиме реального времени, вводить точки останова или зависящие от условий переходы. Если вы инсталлировали сохранение данных трассировки, то в случае возникно- вения проблемы вы можете остановить выполнение профаммы и «отмотать» программный счётчик, чтобы посмотреть, что делала ваша программа до того, как её поведение стало таинственным. В общем такой внутрисхемный эмуля- тор дает бесподобную возможность отслеживать состояние профаммы, и он может сэкономить вам массу времени. Если эмулятор, работающий в режиме реального времени, вам не по сред- ствам, то сейчас в некоторых микроконтроллерах 8051 имеется встроенный JTAG-интерфейс. Такого рода интерфейс позволяет вам выполнять, по край- 0 В настоящий момент «официальную» схему программирующего кабеля фирмы Atmel можно увидеть, пройдя по ссылке www.atmel.com/dyn/resources/prod_document/isp_C_ v5.PDF Однако у таких глубоко вложенных ссылок есть тенденция перемещаться. Обрати- те внимание, что это тот же самый ISP-кабель, который фирма Atmel изготавливает и ре- комендует для своего семейства ПЛИС на базе флэш-памяти ATF15xx , хотя в настоящий момент не указывает на этот факт явным образом.
3.2. Варианты микроконтроллера 8051 фирмы Intel и других ■ 63 ней мере, рудиментарную отладку, используя простой и недорогой JTAG- адаптер и соответствующее ПО на ПК. Средства JTAG гораздо медленнее, чем полностью аппаратные эмуляторы, и отнюдь не столь гибкие. Напри- мер, большинство JTAG-отладчиков обычно не позволяют сделать останов и добраться до определённой ячейки памяти. Это, возможно, самая полезная функция, которую я использую, когда есть доступ к внутрисхемному эмулято- ру, потому что она позволяет точно узнать, не было ли испорчено содержимое ячейки ОЗУ. Метод JTAG-отладки недорог и несомненно адекватен для мно- гих применений. У подножия пирамиды простых отладочных средств находятся знакомые способы типа «прошивай и молись»: или использование эмулятора EPROM (в его основе питаемая от батареи статическая ОЗУ, загружаемая с ПК; эмуля- тор вставляется в гнездо, в которое вы бы в обычном случае вставили внеш- нюю EPROM программ), или применение перепрограммируемых микрокон- троллеров 8051 на основе флэш-памяти, например, упомянутой мной ранее серии AT89S фирмы Atmel. Если вы движетесь последним путем, то, прежде чем решить, какой из микроконтроллеров вы будете использовать, тщатель- но изучите, что точно требуется для программирования каждого чипа. Только что упомянутые мной микроконтроллеры фирмы Atmel, например, являются программируемыми в системе с использованием простого аппаратного интер- фейса, который вы можете сделать за несколько минут, и утилит для «прошив- ки» флэш-памяти от Atmel или бесплатной программы PonyProg (доступна с www.lancos.com/prog.html). Для программирования некоторых других вариантов 8051 требуются спе- циальные, относительно дорогие адаптеры. Если вы не видите в списке ха- рактерных свойств микроконтроллера слов «возможность программирования в системе по последовательному каналу» (series ISP programmability), то есть шансы, что для перезаписи вам придётся вставлять его в дорогой внешний па- раллельный программатор. Некоторые поставщики предлагают недорогие оце- ночные платы (evaluation boards) для микроконтроллеров типа 8051. Например, список плат, предлагаемых фирмой Keil, довольно впечатляет. Плата МСВ900, к примеру, позволяет вам работать с различными микроконтроллерами типа 8051 на базе флэш-памяти фирмы Philips. Она продаётся в розницу по цене около 70 долл. Плата МСВХ51 позволяет работать со стандартными микро- контроллерами 8051 в корпусе с 44 выводами от различных производителей, но она гораздо дороже — чуть меньше 300 долл.
64 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы Существует большое разнообразие программных средств разработки для микроконтроллеров 8051. Коммерческие пакеты поставляются такими фир- мами, как Keil, IAR, Avocet, Hi-Tech, Raisonance и др. В большинстве случаев имеются бесплатные демо-версии с различными ограничениями. Очень по- лезна демонстрационная версия от фирмы Raisonance, имеющая общее огра- ничение в 4 КБ объектного кода, но в остальном являющаяся более или менее полностью функциональной. Лично я предпочитаю пользоваться бесплатным компилятором sdcc (www. sdcc.sourceforge.net). Безусловно, Си-компилятор для 8051 — выбор бедного человека. И если бы вы захотели использовать его в коммерческом продукте, это было бы спорным решением из-за относительной неэффективности по- лучаемого откомпилированного кода (как в смысле размера, так и скорости). При больших объёмах производства сравнительный расчёт стоимости инстру- ментов разработки и увеличения себестоимости одного устройства из-за ис- пользования большего микроконтроллера, возможно, заставит вас отказаться от компилятора sdcc. Впрочем, в любом случае большинство проектов с 8051, над которыми я работал, были написаны на чистом ассемблере, так что меня не сильно волнует относительная примитивность sdcc по сравнению с ком- мерческими Си-компиляторами. Как бы то ни было, компилятор sdcc совер- шенно адекватен для любительских проектов, проектов с небольшим объёмом выпуска и для учебных целей. К несчастью, из-за большого разнообразия специальных расширений, до- бавляемых различными производителями в свои варианты 8051, в компилято- ры с высокоуровневых языков необходимо вводить много детальной инфор- мации о целевом микроконтроллере. Это требует большой непрекращающей- ся работы по сопровождению компилятора со стороны поставщика. Поэтому бесплатные компиляторы, такие, как sdcc, вряд ли достигнут эффективности, близкой к коммерческим компиляторам, уже потому, что им необязательно будет «известно» всё разнообразие улучшенных чипов. Например, простое знание о существовании второго DPTR в целевом чипе могло бы позволить компилятору провести существенную оптимизацию размера и скорости вы- полнения. Поскольку существует тенденция использовать микроконтролле- ры 8051 в весьма ограниченных по стоимости приложениях, то, к сожалению, ограничения бесплатных компиляторов — это довод в пользу коммерческих инструментов разработки, которые недёшевы. Это замечание, конечно, не от- носится к ассемблеру; если вы пишете весь код вручную, то приемлемо ис- пользование любого ассемблера.
3.3.AtmelAVR ■ 65 В заключение я поделюсь интересной мыслью, которая, возможно, даст вам пищу для размышлений. Одним из самых уважаемых производителей инструментов разработки для 8051 является фирма Keil. В 2005 году Keil была куплена фирмой ARM. Было множество предположений о возможных послед- ствиях этого. Некоторые люди указывали на тот факт, что Keil имеет опыт разработки очень изощрённых компиляторов для 8051, и строили теории, что ARM использует этот опыт для создания ARM-компиляторов с существен- но улучшенной эффективностью. Другие обращали внимание на то, что 8051 является очень зрелым продуктом, и кривые «стоимость-характеристики» для 8051 с мощными функциональными возможностями почти совпадают с подобными кривыми для микроконтроллеров ARM начального уровня. Имеется чрезвычайно большое число приложений с 8051, которые начина- ют трещать по швам, когда список обязательных, «модных» функций (про- водной Ethernet, WiFi, Bluetooth и функции управления через Интернет, если говорить о некоторых наиболее популярных) становится более «наворочен- ным». Эти большие приложения созрели для перехода на однокристальные ARM-микроконтроллеры. Есть предположение, что фирма ARM перестроит линейку продуктов Keil, чтобы посодействовать переходу людей на микро- контроллеры с ядром ARM, и, возможно, вклинится в номенклатуру продук- тов, начав с самых больших и сложных, но постепенно вытесняя 8051 даже в более простых приложениях. 3.3. AtmelAVR Технически относясь к тому же виду, что и 8051, Atmel AVR — значитель- но более дружелюбная архитектура. Прежде чем углубиться в этот раздел, мне лучше всего сразу признаться в своей страсти — я действительно люблю семей- ство AVR. Это определённо моя любимая 8-битная платформа. Я обнаружил, что с ней легко работать, а приобретение необходимого инструментария об- ходится недорого. Это семейство хорошо подходит для любительских проек- тов и мелкосерийных коммерческих приложений, которыми я занимаю своё свободное время. Вам следует обратить внимание, что крупные коммерческие приложения отсутствуют в этом списке. Я пытался и пытаюсь найти довод для использования AVR в своей ежедневной работе. Хотя руководство выказыва- ет осторожный энтузиазм, главный фактор, который до сих пор препятствует
66 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы переходу на AVR, заключается в наличии большого количества ассемблерных программ для других ядер. Теперь, когда была воздана хвала всем достоинствам, от меня требует- ся, полноты ради, указать и некоторые недостатки. Первый очевидный не- достаток в том, что AVR является патентованным ядром, и, следовательно, все микроконтроллеры AVR поставляются только фирмой Atmel. Это не так уж ужасно, так как любой микроконтроллер поставляется какой-то одной фирмой. Однако к этому комментарию следует присовокупить тот факт, что у фирмы Atmel далеко не великолепный послужной список в части взаимо- действия с мелкими покупателями. Если вы просмотрите архивы comp.arch. embedded (с.а.е.), то обнаружите периодические жалобы людей по поводу обе- щанных Atmel к выпуску, но так и не появившихся продуктов, странных и волюнтаристских решений о снятии с производства, абсолютной невозмож- ности получить образцы любых новых микроконтроллеров (я сам сталкивал- ся с этой проблемой), сложностей с внезапными переносами сроков выхода продуктов и неаккуратными оценками сроков поставок. В результате пред- ставляется разумным не брать в расчёт совершенно новые микроконтролле- ры какое-то время после их появления в производственной линейке Atmel. Также мудрым представляется отказ от использования в проектах микрокон- троллеров, как только они получают статус «не рекомендованных для новых разработок», если только вы недостаточно крупный покупатель, чтобы быть достойным уведомления о дате последней закупки. Если вы полагаетесь на поставки мелкими партиями и не следите за жизненным циклом продукта, то, когда в очередной раз отправитесь заказывать микроконтроллеры, вас мо- жет ожидать неприятный сюрприз. Как общее правило: если вы работаете с выпускаемыми в массовых количествах микроконтроллерами, которые легко купить в розницу у фирм со складскими запасами, таких, как Digi-Key, то скорее всего проблем у вас не будет. В качестве примера возможностей микроконтроллеров AVR рассмотрим ATmega32L в корпусе DIP-40, показанный на Рис. 3.2°. Обратите внимание, что имеется несколько слегка отличающихся подсемейств AVR — маломощ- ные, средние и мощные. ATmega32 относится к крупным микроконтроллерам. Более мощные ядра имеют расширенный набор команд, являющийся над- множеством набора команд меньших ядер. 1} Информация, приведённая в этом разделе, взята из технического описания (datasheet) на ATmega32/ATmega32L, документ #2503F-AVR-12/03.
3.3.AtmelAVR ■ 67 (ХСКЯО) РВО С (Т1)РВЩ (INT2/AIN0)PB2C (OC0/AIN1)PB3CI (SS) PB4 С (MOSI) PB5 С (MISO)PB6C (SCK) PB7 С RESET С VCCC GNDC XTAL2C XTAL1 С (RXD) PDO С (TXD) PD1 С (INTO) PD2 С (INT1)PD3C (OC1B)PD4[I (OC1A)PD5E (ICP) PD6 С 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 3 РАО (ADCO) DPA1 (ADC1) 2 PA2 (ADC2) H РАЗ (ADC3) 3 PA4 (ADC4) D PA5 (ADC5) 3 PA6 (ADC6) 3 PA7 (ADC7) DAREF UAGND DAVCC 3 PC7 (T0SC2) :pc6(tosci) 3 PC5 (TDI) 3 PC4 (TDO) 3 PC3 (TMS) 3 PC2 (TCK) 3 PC1 (SDA) 3 PCO (SCL) D PD7 (OC2) Рис. 3.2. ATmega32L в корпусе DIP-40. Как и в большинстве других микроконтроллеров, здесь снова преобладают вводы-выводы общего назначения. Порты от А до D — 8-битные порты обще- го назначения, у которых каждая линия может быть индивидуально запро- граммирована на работу в качестве ввода или вывода. Далее описаны функ- ции других выводов (включая мультиплексированные функции, связанные с линиями портов): • XTAL1, XTAL2 — выводы для подключения кварцевого или керами- ческого резонатора. В AVR для получения тактовых сигналов можно использовать внутренний RC-генератор, внешний RC-генератор или внешний резонатор. • AVCC, AREF — питание Vcc и опорное напряжение для встроенного аналого-цифрового преобразователя (АЦП). • ADC0-ADC7 — входные линии АЦП. Каждую линию можно индивиду- ально назначить в качестве входа модуля АЦП. • ХСК — вход внешнего тактового сигнала модуля универсального синхронно-асинхронного приёмопередатчика (USART). Этот вывод ис- пользуется, если вы реализуете синхронный последовательный протокол с тактированием от внешнего источника.
68 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы • ТО — вход внешнего тактового сигнала таймера/счётчика 0. • Т1 — вход внешнего тактового сигнала таймера/счётчика 1. • AIN0 — неинвертирующий вход встроенного компаратора. • INTO, INT1, INT2 — входы внешних прерываний 0, 1,2. • AIN1 — инвертирующий вход встроенного компаратора. • ОС0, ОС2 — выходы таймеров/счётчиков 0 и 2 (режим Compare match, используемый при формировании ШИМ-сигналов). • SS — вход выбора ведомого (Slave) на шине SPI (при работе в качестве ведомого устройства). • MOSI — линия вывода данных при работе ведущим устройством (Master Output) или ввода данных при работе ведомым устройством (Slave Input) шины SPI. • MISO — линия ввода данных при работе ведущим устройством (Master Input) или вывода данных при работе ведомым устройством (Slave Output) шины SPI. • SCK — линия тактового сигнала шины SPI. • SCL, SDA — линия тактового сигнала и линия данных двухпроводного последовательного интерфейса (TWI — two wires interface; другое назва- ние - 12С). • ТСК, TMS, TDO, TDI — выводы JTAG интерфейса. • TOSC1, TOSC2 — выводы для подключения кварцевого резонатора для таймера/счётчика 2, который может работать в режиме асинхронного тактирования, а тактовый сигнал обеспечивается внешним резонато- ром, подключенным к этим выводам. • RXD, TXD — линии соответственно приёма и передачи данных модуля USART. • ОС1А, ОС 1В — выходы А и В таймера/счётчика 1 (режим Compare match). • ICP — вход захвата таймера/счётчика 1. Обратите внимание на богатый набор периферии в этом чипе. Если вы со- бираетесь сравнить его с микроконтроллером 8051, то спещу уведомить, что здесь прямое сравнение неприемлемо. Описанный ранее 8051 — это исклю- чительно базовый, изначальный вариант. Он был выбран мной намеренно, поскольку этот производимый несколькими изготовителями контроллер яв- ляется, образно говоря, наименьшим общим знаменателем. Конечно же есть
3.3.AtmelAVR ■ 69 варианты микроконтроллеров 8051 со всеми теми периферийными устрой- ствами, которые вы можете обнаружить в семействе AVR, — вам надо только поискать. И скорее всего эти более соблазнительные чипы так же, как и AVR, выпускаются одним-единственным производителем. По энергопотреблению семейство AVR занимает средние позиции сре- ди недорогих 8-битных микроконтроллеров. В большинстве интегральных схем (ИС) имеется возможность выбора режима энергопотребления, список которых зависит от конкретной микросхемы, однако большинство из них основано на нахождении микроконтроллера в «спячке» до возникновения прерывания. Интересно, кстати, отметить: для получения наиболее точных результатов аналого-цифрового преобразования, осуществляемого посред- ством встроенного модуля АЦП, абсолютно необходимо использование этих режимов пониженного энергопотребления для того, чтобы ядро ЦПУ не вно- сило шумов в процессе преобразования аналогового сигнала. Во время написания этой книги фирма Atmel как раз анонсировала пред- стоящий выпуск новых серий AVR микроконтроллеров —picoPower. Это стан- дартные AVR с пониженным энергопотреблением, на что указывает добавлен- ный в конец обозначения чипа символ «Р». Первым должен был появиться микроконтроллер ATmegal69P. Работая при напряжении питания 1.8 В, это устройство потребляет ток 330 мкА при тактовой частоте 1 МГц и всего лишь 10 мкА при работе от часового кварца 32.768 кГц0. Даже с активным ЖК- дисплеем эта цифра возрастает только до 25 мкА. Эти микросхемы весьма явно нацелены на сектор рынка, занимаемый микроконтроллерами MSP430, и в рекламных листках фирмы Atmel сравниваются именно с ними. Микроконтроллеры AVR построены по гарвардской архитектуре с двумя главными адресными пространствами — памятью программ и памятью дан- ных. Память программ располагается по адресам от $0000 до $3FFF (32 К), а память данных — по адресам $0000...$085F. Адреса $0000...$001F в про- странстве памяти данных зарезервированы для регистров общего назначения. Адреса $0020...$005F занимают регистры ввода/вывода. Встроенное ОЗУ (2 К) расположено по адресам $0060...$085Е При поверхностном знакомстве с на- бором команд вы бы могли подумать, что имеется отдельное пространство ввода/вывода, поскольку для работы с областью регистров ввода/вывода име- 1) 350 и 20 мкА соответственно для более старых ATmegal69, не относящихся к классу «picoPower»; с активным ЖК-дисплеем микросхема потребляет 40 мкА.
70 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы ются специально предназначенные для этого команды IN и OUT. Но это не тот случай, и инструкции IN и OUT введены просто для удобства. В ATmega32 имеется также третье адресное пространство — EEPROM. Оно, однако, не адресуемо напрямую ядром. Подобно тому как это делается в боль- шинстве других микроконтроллеров со встроенной EEPROM, доступ к па- мяти осуществляется через 8-битное окно. Вы пишете адрес нужной ячейки EEPROM в регистр-указатель, а обмен данными с ней осуществляется через другой регистр. Заметьте, что у этого конкретного варианта AVR нет внешних шин адре- са и данных (хотя у некоторых есть). Так как AVR не может выполнять код, расположенный вне встроенной памяти, вы не можете подключить удаляе- мые внешние модули с программами (программные картриджи) и обращать- ся с ними, как с продолжением памяти программ с прямой адресацией. Вы также не можете добавить дополнительное ОЗУ с прямой адресацией. Если какая-то из этих функций важна в вашем проекте, следует или присмотреть- ся к старшим моделям AVR, в которых имеются внешние шины, или (в случае программных картриджей) рассмотреть вопрос написания интерпретатора, который сможет загружать и выполнять программы из внешних микросхем флэш-памяти с последовательным доступом. В ядре AVR имеется 32 8-битных регистра общего назначения (РОН), име- нуемые R0...R31. Эти регистры занимают 32 младших байта адресного про- странства памяти данных. Набор инструкций не полностью ортогонален по отношению к этим регистрам. R16...R31 интерпретируются слегка иначе, чем R0...R15. За исключением этой детали, команды работают более или менее одинаково со всеми регистрами общего назначения. На шесть верхних регистров возложена дополнительная специальная функ- ция. Для определённых команд, использующих режимы косвенной адресации и 16-битную арифметику, они могут быть интерпретированы как три 16-бит- ных регистра. При использовании они именуются X (R26, R27), Y (R28, R29) и Z (R30, R31). Во всех случаях регистр с меньшим номером содержит младшие биты 16-битного объединения. Заметьте, что это лишь терминологическая де- таль. Вы в любой момент можете обращаться к индивидуальным 8-битным регистрам, и они будут содержать нормальные 8-битные данные. Обратите внимание, что с точки зрения использования языков высокого уровня огра- ниченное количество 16-битных регистров оказывает примерно то же влия-
3.3.AtmelAVR ■ 71 ние, что и ограничение, связанное с DPTR в семействе 8051, то есть является чем-то вроде бутылочного горлышка. У AVR есть две небольших странности, и обе они относятся к программи- рованию микросхем. Первая заключается в том, что приходится программи- ровать три области памяти — память программ, EEPROM и конфигураци- онные ячейки (fuse bits) — отдельно. Общепризнанного способа собрать все эти данные в единый файл для «прошивки» за один шаг не существует. Путь, который обычно я сам использую, заключается в применении управляемого из командной строки ПО для «прошивки» (avrdude, чтобы быть точным; до- машняя страничка этого ПО с открытым кодом savannah.nongnu.org/projects/ avrdude/). Здесь я могу встроить опцию «прошивки» за один шаг в make-файл своего проекта. Вторая странность состоит в том, что, чтобы внутренний RC-генератор работал точно на своей номинальной частоте, требуется некая зависящая от микросхемы калибровка. Само по себе это не из ряда вон выходящая стран- ность для внутренних RC-генераторов микроконтроллеров. Необычность за- ключается в том, что фабричные калибровочные байты хранятся довольно странным образом, и непосредственно их использовать нельзя. Они располо- жены в области сигнатуры микросхемы, которая может быть считана только внешним программатором0. Используя биты конфигурации, вы можете вы- брать значение частоты RC-генератора — 1, 2, 4 или 8 МГц. Затем ваша про- грамма при подаче питания должна загрузить корректный для данного чипа калибровочный байт в регистр OSCCAL. Этот процесс выполняется автоматически, если выбрана частота 1 МГц. После сброса регистр OSCCAL автоматически инициализируется калибро- вочным значением для 1 МГц. На случай, если вы собираетесь использовать одну из более высоких частот, фирма Atmel заботливо вписала в чип коррект- ные калибровочные константы, но при этом у вашей программы нет никако- го способа добраться до них2). Рекомендуемый обходной маневр для решения этой проблемы — с помощью программатора считать данные из области сиг- натуры, извлечь подходящий для интересуемой частоты калибровочный байт и записать его в свободную ячейку программно-доступной EEPROM. Это 0 Область сигнатуры устройства — это всего лишь область зарезервированных ячеек EEPROM. Здесь хранятся фабричные калибровочные данные и байты сигнатуры, исполь- зуемые программатором для определения версии микроконтроллера. 2) Когда данная книга была в печати, фирма Atmel работала над исключением этой странности.
72 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы должно делаться индивидуально для каждого микроконтроллера, который вы программируете, так как калибровочные константы зависят от изменений в технологических процессах при производстве чипов. Затем после сброса по питанию ваша программа должна считать значение из этой ячейки EEPROM и записать его в регистр OSCCAL. Это действительно весьма раздражает. Мне бы хотелось, чтобы фирма Atmel или сделала микроконтроллер с автозагруз- кой корректного калибровочного байта для каждого режима RC-генератора, или, по крайней мере, обеспечила способ программного доступа в область фа- бричных калибровочных данных. Для работы с AVR имеется довольно узкий выбор инструментальных средств разработки. Очень простенькая макетная плата фирмы Atmel (в дей- ствительности скорее демонстрационная, чем макетная) AVR Butterfly прода- ется примерно за 20 долл., но часто раздается бесплатно на семинарах и пре- зентациях Atmel. На плате Butterfly находятся микроконтроллер ATmegal69 с маленьким буквенно-цифровым сегментным ЖКИ, литиевая батарейка, миниатюрный джойстик на четыре направления, подобный тем, что имеют мобильные телефоны, внешняя флэш-память объёмом 4 Мбит, температур- ный датчик (термистор), датчик уровня освещенности (CdS-фотоэлемент) и пьезоэлектрический громкоговоритель. У платы есть зажим для крепления на лацкан, так что вы можете прикрепить её к одежде и использовать в качестве именной таблички. Плата поставляется с заранее «зашитым» демонстрацион- ным ПО, включая загрузчик, поэтому она может быть перепрограммирована через стандартный последовательный порт; вам не надо иметь специальные аппаратные средства программирования. Тем не менее на плате есть разъём JTAG, и вы можете использовать её как дешевую оценочную платформу для ATmegal69. На ступеньку выше Butterfly находится макетная плата STK500, также непо- средственно от Atmel, которая стоит в розницу около 79 долл. Это рекомендуе- мая оценочная плата начального уровня для AVR серии, и ее я бы посоветовал вам приобрести, если вы только начинаете работать с этими микроконтрол- лерами. STK500 подключается к ПК через стандартный последовательный интерфейс0. На плате имеются панельки для большинства вариантов AVR 0 STK500 хорошо работает с большинством USB-адаптеров последовательного интер- фейса, которые я пробовал под Windows, Linux и Mac OS X. Это важное преимущество в наши смутные дни несовместимых компьютеров. Большинство самодельных программа- торов, подсоединяемых к последовательному порту, не работают должным образом через USB-конвертеры.
3.3.AtmelAVR ■ 73 микроконтроллеров в DIP корпусах, и вы можете запускать простые приложе- ния непосредственно на ней. Обратите внимание, что также доступны встав- ляемые в панельки переходники, так что вы можете использовать STK500 для работы с некоторыми старшими моделями микроконтроллеров AVR, которые не выпускаются в DIP корпусах. На STK500 имеется восемь светодиодов и восемь кнопок, а также кон- тактные колодки, позволяющие подключаться ко всем линиям ввода/вывода микроконтроллера. Вы можете просто вставить чип в подходящую панельку и подсоединить остальную часть схемы к контактным колодкам. Используя кабель с шестью выводами (входит в поставку), также можно использовать STK500 для внутрисистемного программирования микроконтроллеров AVR на ваших собственных платах. STK500 поддерживает как последовательное (SPI), так и параллельное программирование. Польза от этого в том, что если случайно отключить режим SPI-программирования в конфигурационных би- тах вашего целевого микроконтроллера, то можно использовать STK500, что- бы восстановить и перепрограммировать этот чип, если вы можете вытащить микросхему из вашей платы. Что вам не предоставляет STK500, так это поддержку отладки. Плата STK500 определённо полезна для проектирования по типу «прошивай и молись». Если вы хотите отлаживать код, то вам нужен или полный внутрисхемный эмулятор (для маломощных микроконтроллеров), или JTAG-эмулятор для более мощ- ных чипов с JTAG-интерфейсом. Внутрисхемный JTAG-эмулятор {JTAG-ICE) фирмы Atmel является подключаемым к последовательному порту устрой- ством, и он довольно дорог. Значительно дешевле покупать клоны JTAG-ICE фирмы ОНтех, среди которых есть как последовательные, так и USB разно- видности. Вариант с USB STK500 хорошо работает с большинством адаптеров USB-последовательный интерфейс, которые я пробовал под Windows, Linux и Mac OS X. Это просто последовательное устройство с встроенным чипом FTDI конвертера USB-COM. О фирме Olimex можно найти информацию на www.olimex.com. Они делают всякого рода оценочное аппаратное обеспече- ние, а также предлагают услуги по изготовлению недорогих прототипов пе- чатных плат. Изготавливаемая ими продукция распространяется в США ком- панией Spark Fun Electronics. Более новые микроконтроллеры Atmel также имеют исключительно остро- умный однопроводной отладочный интерфейс, называемый debugWire, кото- рый позволяет вам отлаживать программу, используя только линии «земли» и сброса, давая тем самым возможность использовать линии JTAG для задач
74 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы ввода/вывода. Интерфейс debugWire поддерживается внутрисхемным эмуля- тором JTAG-ICE Мк.П, заменившим первоначальный JTAG-ICE. С точки зрения разработки ПО несложно начать работать с AVR на ассем- блере, используя бесплатный пакет AVR Studio компании Atmel (работает только в Windows). Фактически под Windows имеется три разных ассемблера. Это собственно ассемблер фирмы Atmel, ассемблер Tom's Linux AVR tavrasm (www.tavrasm.org; несмотря на его название, вы можете установить и запускать этот ассемблер под Windows, используя Cygwin) и AVR-разновидность gas — GNU-ассемблер. Если вы намереваетесь заниматься программированием на ассемблере, я бы посоветовал пользоваться или tavrasm, или ассемблер Atmel. Ассемблер gas, хотя и полностью функционален, не будет ассемблировать го- товый код, написанный для среды разработки от Atmel. С другой стороны, tavrasm специально разработан, чтобы работать точно как ассемблер фирмы Atmel. Заметьте, что пакет AVR Studio — это полностью интегрированная сре- да разработки, состоящая из редактора исходного кода, ассемблеров и про- грамм для взаимодействия с аппаратными средствами «прошивки» и отладки. Также состав входит и программный симулятор. Если вы используете другой ассемблер — например, работаете под Linux или Mac OS, — вам потребует- ся отдельная программа для «прошивки» чипов. На данный момент наи- лучшим выбором является программа avrdude, о которой я упоминал ранее. Время от времени компания Atmel выпускает обновления встроенного ПО для своих аппаратных средств, таких, как STK500, JTAG-ICE и загрузочный кабель AVRISP. Эти обновления поставляются в более новых версиях паке- та AVR Studio. Когда вы подключаете аппаратные средства, интегрированная среда AVR Studio проверяет версию их встроенного ПО и при необходимо- сти автоматически производит обновление. Иногда такие обновления влекут радикальные изменения в протоколах, что совершенно нарушает работоспо- собность старых программ. Программа avrdude — наиболее соответствующая современным требованиям утилита-загрузчик с открытым исходным кодом. У этой программы существует хорошая поддержка, и она не остается нерабо- тоспособной долгое время, если Atmel что-нибудь изменяет. Другие альтерна- тивы, такие, как когда-то популярная программа uisp (www.savannah.nongnu. org/projects/uisp/), отстали со своими обновлениями и больше не работают с имеющимися в настоящий момент инструментальными средствами. Довольно четкая архитектура AVR и относительно аккуратный набор ко- манд делают это семейство определённо гораздо более дружелюбным к Си-
3.3.AtmelAVR ■ 75 компиляторам, чем 8051. Фактически базовая архитектура была разработана (двумя норвежскими студентами университета) именно с целью эффектив- ного выполнения Си-кода. Быстродействие хорошее, но размер откомпили- рованного объектного кода обычно не поражает воображение, в частности, при работе с 16- или 32-битной арифметикой. В настоящее время имеется не- сколько пакетов Си-компиляторов, предназначенных для AVR. Два из них, с которыми я больше всего знаком, — это gcc и коммерческий продукт компа- нии Rowley Associates (www.rowley.co.uk). Последний продукт представляет со- бой компилятор/отладчик, сделанный в стиле интегрированной среды разра- ботки. Он прост в использовании и обеспечивает возможность немедленного начала работы. Имеются версии как под Windows, так и под Linux. Инсталляция gcc составлена из отдельных компонентов: GNU-утилит, собственно самого gcc, Си-библиотеки для AVR (avr-libc доступна на www. savannah.nongnu.org/projects/avr-libc/), возможно, GNU отладчика gdb и ин- струмента для «прошивки», такого, как avrdude, не говоря уже о редакторе ис- ходного кода. В качестве редактора кода я использую Eclipse (www.eclipse.org), так как он имеет непротиворечивый пользовательский интерфейс для постро- ения любых моих проектов — для Linux, Mac OS, AVR, ARM и т. д. Обратите внимание, что есть уже укомплектованный набор готовых к запуску GNU- инструментов, называемый WinAVR, который можно загрузить со странички winavr.sourceforge.net. Я обычно предпочитаю загружать отдельные компонен- ты и собирать их самостоятельно, а не полагаться на укомплектованный ин- сталлятор, но это дело вкуса. Из доступных компоновок я обычно предпочитаю gcc, хотя он не выдает самый маленький или самый быстрый код. Поскольку я работаю с gcc на мно- жестве платформ, у меня будет меньше работы по переносу программ, если стандартизировать gcc везде, где это возможно. Это важно для меня, посколь- ку время ценно. Мне надо написать код, скажем, для AVR, и использовать его на ARM, по возможности с минимумом усилий. При использовании ин- струментария GNU, в лучшем случае, всё, что мне надо сделать, — поменять make-файл. Последнее замечание о средах разработки. Если вы преданный пользо- ватель ОС от Apple (OS X), то вам следует знать, что на настоящий момент семейство микроконтроллеров AVR является самым простым для обучения. Все программные инструменты с открытым кодом компилируют и работают под OS X без каких-либо проблем. Недорогие инструментальные средства разработки подсоединяются или через последовательные порты, или через
76 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы встроенные конвертеры USB-COM. Самое большее, что вам понадобится сде- лать, — найти кабель USB-COM стоимостью 10 долл. При работе под Mac OS с большинством других семейств микроконтроллеров у вас будут сложности того или иного рода. Получение работающего набора программных средств компоновки обычно не проблема. А вот найти способ загрузить ваш отком- пилированный код в микроконтроллер на макетной или вашей собственной плате может оказаться раздражающе сложно, так как в компьютерах Мае нет параллельных портов, а Linux-драйверы для эмуляторов с подключением к USB-порту не могут быть использованы в Mac OS. 3.4. MSP430 компании Texas Instruments Немного нечестно сваливать MSP430 в одну кучу с 8-битными микрокон- троллерами, так как это 16-битный контроллер в чистом виде. Но его исполь- зуют в тех же приложениях, что и 8-битные чипы, и поэтому он относится к этой главе, несмотря на тот факт, что по своей классификации семантически выбивается из рассматриваемого здесь ряда продуктов. По сравнению, скажем, с 8051 семейство MSP430 относительно моло- до — ему около 10 лет. Первые варианты были разработаны для применения в недорогих измерительных устройствах с низким энергопотреблением. Про- ектные решения, сделанные из расчёта использования в таких применениях, были перенесены на существующий в настоящий момент модельный ряд. MSP430 — это семейство микроконтроллеров с низким энергопотреблением и обычным набором энергосберегающих режимов «сна» с пробуждением по прерыванию. Также в MSP430 имеется очень гибкий программируемый мо- дуль аналого-цифрового преобразования. В некоторых микросхемах также имеются встроенные контроллеры ЖКИ. В состав микроконтроллеров вхо- дит программируемый модуль генерации тактового сигнала, который может тактировать все секции чипа от стандартного кварца 32.768 кГц. А сейчас невразумительный, но весьма признаваемый среди инженеров и компьютерщиков ритуал оценки архитектуры любого нового микроконтрол- лера на основе его подобия архитектуре PDP-110. Самым сильным выраже- нием в отзыве об апробации, который вы можете использовать для проекта 1) Если я когда-нибудь буду проектировать микропроцессор, то на верхней части кор- пуса нарисую полный чертеж передней панели PDP-11/20.
3.4. MSP430компании Texas Instruments ■ 77 ЦПУ, является фраза: «Это точно как PDP-11!» Не совсем ясно, почему дан- ное выражение является универсально признаваемой «хорошей штукой», но в любом случае это часто применяемый к MSP430 эпитет. Мне всегда каза- лось, что это того же рода утверждение, что и сказать: «Мой мерседес с откид- ным верхом 2007 года выпуска точно такой же, как и грузовичок International Harvester Scout 1965 года. И у того, и у другого есть пневматические шины и откидная крыша!» Думаю, эти люди хотят сказать, что у микроконтроллеров MSP430 очень хороший ортогональный набор команд и простая схема адре- сации памяти. «Прошивка» флэш-памяти и отладка ПО для большинства микросхем MSP430 выполняется с использованием встроенного JTAG-интерфейса. Компания TI предлагает относительно недорогой набор, содержащий FET (Flash Emulation Tool — инструмент эмуляции флэш-памяти — это простое переходное устройство с параллельного порта на JTAG) и бесплатную вер- сию программных средств IAR. Другие поставщики клонировали этот JTAG- переходник. Например, фирма Olimex продает его полностью совместимую версию стороннего производителя по цене, даже меньшей стоимости FET. Компании Texas Instruments и Olimex, а также Rowley предлагают подключае- мые через USB-порт JTAG-отладчики, которые работают гораздо быстрее, чем дешевые и отвратительные устройства, подключаемые через параллель- ный порт. Когда эту книгу надо было отдавать в печать, компания TI выпустила край- не дешёвую, подключаемую к USB демонстрационную/макетную плату под названием eZ430. Это крошечное устройство, внешне очень похожее на USB флэш-память. Даже ещё меньшая целевая плата подключается к колодке на противоположном от USB-разъёма конце. В настоящий момент компания TI продает eZ430 только как часть набора CZ430-F20131*, который содержит эму- лятор eZ430 и целевую плату с процессором MSP430F2013, местом для разме- щения разъёма на 14 выводов, чтобы вывести все линии процессора на вашу плату-прототип, и один светодиод. Кстати, USB FET, встроенный в eZ430, поддерживает все чипы серии MSP430F20xx; микроконтроллер MSP430F2013 просто наиболее мощный член этого семейства — у него 2 К флэш-памяти, 256 байт информационной памяти и 128 байт ОЗУ. Розничная цена этого на- бора — 20 долл. Хотя, как и в случае с платой Butterfly компании Atmel, набор раздается бесплатно, как рекламный подарок на семинарах Texas Instruments. 0 Для уточнения сегодняшнего состояния дел лучше всего обратиться к сайту TI www.ti.com и местным дистрибьюторам. — Примеч. науч. ред.
78 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы Если вы хотите изучить набор команд MSP430 и поэкспериментировать с платформой в целом, то eZ430, вероятно, является наилучшим из доступных сегодня готовым решением. Обратите внимание, что это не типовое JTAG- оборудование. Здесь используется двухпроводной отладочный протокол Spy Bi-Wire, и на сегодняшний день он работает только с несколькими избранны- ми микроконтроллерами. Ясно, что Spy Bi-Wire — это попытка ответа компа- нии TI на двухпроводной протокол debugWire фирмы Atmel. Это очень полез- ная вещь, когда нет необходимости растрачивать массу линий ввода/вывода на JTAG-интерфейс, и я с нетерпением жду того дня, когда Spy Bi-Wire будет присутствовать во всех микроконтроллерах компании TI. С точки зрения любителей или владельцев собственных мастерских, вы- полняющих небольшие заказы, у семейства MSP430 есть пара недостатков. Напряжение на линиях ввода/вывода у этих микроконтроллеров составляет 3.3 В, и они не выдерживают подачи 5 В. Это не совсем уж неожиданно, по- скольку данное семейство специально предназначено для применений с низ- ким энергопотреблением. Низкое напряжение ввода/вывода означает, что со- пряжение с типичными любительскими проектами (контроллеры двигателей, например) оказывается потенциально несколько более сложным делом, чем это было бы с микроконтроллером, работающим от 5 В. Дело в том, что серия MSP430 предназначена для устройств, питаемых от батарей или иных ограни- ченных по мощности источников. Для всякого человека, пытающегося быстро собрать и запустить какое- нибудь устройство, гораздо более раздражающей вещью является то, что весь выпускаемый ряд (не очень большой, кстати) микроконтроллеров семейства MSP430 доступен только в корпусах поверхностного монтажа с малым шагом выводов или в безвыводных вариантах корпусов (типа QFP). Из-за этого воз- никают сложности с ручной сборкой прототипа на матричной макетной плате. Единственное реальное решение здесь: или использовать для вашего устрой- ства заказную плату, или покупать готовые оценочные платы. К счастью, это не так дорого, как вы, возможно, думаете. Компания Olimex продает две раз- новидности оценочных плат для различных микроконтроллеров MSP430. Устройства, которые фирма Olimex называет прото-платами (proto-boards; в настоящий момент имеются для микроконтроллеров MSP430F1121, 123, 1232, 149, 169, 1611 и 2131)°, содержат соответствующий МК MSP430, име- !> Актуальный список выпускаемых компанией устройств на сайте www.olimex.com — Примеч. науч. ред.
ЗА. MSP430 компании Texas Instruments ■ 79 ют довольно обширную область макетирования со сквозными отверстиями с шагом 0.1" (2.54 мм). Также в их состав входит и некоторая полезная ин- фраструктура, такая, как источник питания, драйвер RS-232 со стандарт- ным 9-штырьковым разъёмом, кварц на 32.678 кГц, колодка JTAG и кнопка сброса. Так называемые контактные платы (header boards) — это просто сам чип на крошечной плате с идущими по краю с шагом 0.1" контактами, соеди- ненными со всеми выводами микроконтроллера. Вы можете вставить такую контактную плату непосредственно в плату-прототип, выполнить монтаж скруткой или впаять её в матричную макетную плату (хотя сам я бы предпочел установку в панельку, чтобы была возможность повторного использования). На контактной плате также имеется кварц 32.768 кГц, колодка JTAG и гнездо для высокочастотного резонатора, если вы пожелаете использовать таковой. Цены на контактные платы и просто чипы (в штучных количествах) отлича- ются в 2—2.5 раза, что действительно вполне приемлемо. Давайте ближе познакомимся с конкретным микроконтроллером MSP430F169, показанным на Рис. 3.3. В семействе MSP430 это один из чипов, обладающих наибольшими функциональными возможностями: 60 К флэш- памяти, 2 К ОЗУ и 48 линий ввода/вывода. Выпускается в корпусах с 64 выво- дами — или LQFP, или QFN. Мы, как и прежде, начнем с цоколевки. Из-за большого числа выводов я не буду описывать здесь все функции. Я бы просто хотел, чтобы вы увидели основные возможности микроконтрол- лера: • Шесть 8-битных портов ввода/вывода общего назначения, обычно со- вмещённые с другими функциями. Для портов 1 и 2 можно выбирать, будет ли прерывание возбуждаться по фронту или по спаду входного сиг- нала. • Аппаратный умножитель, выполняющий за один рабочий цикл опе- рации умножения 16x16, 8x8 и 16x8/8x16 бит. Этопозволяет быстро и эффективно реализовывать некоторые простые МАС-операции (опера- ции умножения с накоплением), используемые при цифровой обработке сигналов. Эта возможность есть не у всех микроконтроллеров MSP430, так как это периферийное устройство не является частью базового про- цессорного ядра. • Два универсальных синхронно-асинхронных приёмопередатчика (USART). Оба модуля USART поддерживают как SPI, так и стандарт- ный асинхронный последовательный протокол связи. USART0 также поддерживает высокоскоростной протокол 12С (при этом настоящий,
80 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы официально лицензированный, совместимый с протоколом 12С фирмы Philips), если необходимо, то через DMA (Direct Memory Access — кон- троллер прямого доступа к памяти). • Один 16-битный таймер — timer_A3 — с тремя регистрами захвата/срав- нения (подробнее об этом далее). • Один 16-битный таймер — timer_B7 module — с семью регистрами за- хвата/сравнения. • Один аналоговый компаратор —- comparator_A. • ADC 12 — 12-битный АЦП, поддерживающий восемь внешних аналого- вых каналов, а также встроенный датчик температуры. Вы можете так- же проводить преобразования сигналов с внешних источников опорного <§1 о DVCC Р6.3/АЗ Р6.4/А4 Р6.5/А5 P6.6/A6/DAC0 P6.7/A7/DAC1/SVSIN Vref+ XIN XOUT VeREF+ VREF-/VeREF- P1.0/TACLK Р1.1ЛА0 Р1.2ГГА1 P1.3/TA2 P1.4/SMCLK P 64 63 J 1 ]2 ]з ]4 ]5 ]б ]7 ]8 ]9 ] 10 ] 11 ]12 ] 13 ] 14 ]15 ]16 17 18 62 61 60 59 58 57 56 55 54 53 52 51 50 49 _ 48[ 47[ 46[ 45[ 44[ 43[ 42[ 41[ 40 [ 39[ 38[ 37[ 36[ 35[ 34[ 33[ 19 20 21 22 23 24 25 26 27 28 29 30 31 32 P5.4/MCLK P5.3/UCLK1 P5.2/SOMI1 P5.1/SIMO1 P5.0/STE1 P4.7/TBCLK Р4.6ЛБ6 Р4.5ЯВ5 Р4.4ЛГВ4 Р4.3ЛВЗ Р4.2ЯВ2 Р4.1ЛБ1 P4.0/TB0 P3.7/URXD1 P3.6/UTXD1 P3.5/URXD0 Рис. 3.3. Цоколевка MSP430F169.
3.4. MSP430компании Texas Instruments ■ 81 напряжения. Модуль ADC12 абсолютно экстраординарен в смысле гиб- кости, которой он обладает. Он может быть подключен к модулю DMA, чтобы производить преобразования без вмешательства ЦПУ (ЦПУ даже может быть переведен в спящий режим, чтобы снизить энергопотребле- ние), а фактический механизм преобразования может быть отлажен про- граммно до удивительного уровня. Это может помочь вам сэкономить на внешних компонентах подстройки. Итак, что значат все эти названия вроде timer_A3, comparator_A и так далее? Семейство MSP430 имеет модульную внутреннюю структуру, что весьма оче- видно из документации компании Texas Instruments. У каждого модуля пери- ферии, который может быть присоединён к ядру MSP430, есть название, отра- жающее его функцию. Техническая документация (datasheet) на определённый чип сообщает вам, какие в нем имеются модули, а само ядро документиро- вано в общем руководстве, которое не является специфичным для какого-то одного микроконтроллера MSP430. Таким общим руководством является до- кумент #SLAS368D компании Texas Instruments под названием «MSP430xl5x, MSP430xl6x, MSP430xl61x MIXED SIGNAL MICROCONTROLLER». Из-за этого явного подобия перенос кода между разными микроконтроллерами се- мейства MSP430 оказывается необычайно простым делом. Если вы перехо- дите на другой чип и он содержит нужную вам периферию, вам надо только привести в соответствие вводы/выводы и перекомпилировать программу0. Внутренняя архитектура ядра MSP430 очень аккуратна, как я и говорил ра- нее (хотя некоторые люди всё же жалуются, что набор команд архитектуры заявлен как RISC, & реализован как CISC). Имеется шестнадцать 16-битных регистров общего назначения R0...R16, которые идентично интерпретиру- ются набором команд. Хотя я называю их регистрами «общего назначения» (поскольку они так названы в технической документации), первые четыре ре- гистра имеют предопределённые функции: R0 — программный счётчик, R1 — указатель стека, R2 — регистр состояния и R3 — генератор констант. Вся эта система очень дружественна к языку С и приятна с точки зрения програм- мирования. Ядро MSP430 построено по традиционной архитектуре фон Неймана. В не- которых литературных источниках это считают недостатком, что не вполне понятно, поскольку с точки зрения уменьшения энергопотребления нет ни одной характеристики микроконтроллера, которая бы заметно улучшилась от 0 Если совместимость внутри семейства AVR довольно хорошая, то в MSP430 она про- сто превосходна.
82 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы перехода на гарвардскую архитектуру. Память программ, ОЗУ данных, «ин- формационная память» (два маленьких идентичных блока флэш-памяти, про- граммируемые в приложении и используемые для той же цели, что и EEPROM в других микроконтроллерах, т. е. для хранения параметров) и регистры ввода/ вывода расположены в едином адресном пространстве. Ортогональность на- бора команд совершенно восхитительна (см. Табл. 3.2). Таблица 3.2. Виды адресации Название Регистровая Индексная Символьная Абсолютная Косвенно- регистровая Косвенно- регистровая с автоинкре- ментом Прямая (непосред- ственная) Синтаксис Rn X(Rn) ADDR &ADDR @Rn @Rn+ #N Источник Да Да Да Да Да Да Да Получатель Да Да Да Да Нет Нет Нет Значение Содержимое Rn является операндом Операнд — ячейка памяти, на которую указывает значение (Rn+X) Операнд — ячейка памяти, на которую указывает (ADDR), относительная адресация. Заметьте, что это фактически закодировано какХ(РС) Операнд — ячейка памяти, на которую указывает (ADDR), абсолютная адресация Операнд — ячейка памяти, на которую указывает содержимое регистра Rn Операнд — ячейка памяти, на которую указывает содержимое регистра Rn. После выполнения команды содержимое Rn автоматически инкрементируется (на 1 — для байтовой команды и на 2 — для команд-слов) Источником является непосредственно 16-битная константа. Это реализовано как @РС+, т. е. особый случай косвенного регистрового режима с автоматическим инкрементом Любая инструкция может использовать любую правильную комбинацию режимов адресации. Например, абсолютно законно использовать содержимое регистра в качестве аргумента инструкции CALL, как CALL R5. Даже лучше использовать CALLX(R5), чтобы направить выполнение программы через та- блицу переходов. Требуется какое-то время, чтобы привыкнуть ко всей этой
3.4. MSP430компании Texas Instruments ■ 83 гибкости, если вы переходите от микропроцессоров с более традиционной (т. е. менее гибкой) моделью программирования, особенно с причудливо огра- ниченными архитектурами, такими, как PIC. Карта памяти также спланиро- вана в очень аккуратной манере (Табл. 3.3). Таблица 3.3. Распределение памяти Диапазон 0x0000...0x000F 0x0010...0x00FF 0x0100...0x01FF 0x0200...0x09FF 0x0C00...0x0FF 0xl000...0xl0FF 0xll00...0xFFDF 0xFFE0...0xFFFF Содержимое 8-битные регистры специальных функций 8-битные периферийные модули 16-битные периферийные модули 2 К ОЗУ 1 К ПЗУ — область программы автозагрузки 256 байт информационной памяти в двух 128-байтных блоках. Эта доступная из пользовательской программы энергонезависимая память используется для хранения калибровочных констант и других подобных данных 60 К (без 32 байт) флэш-памяти программ Область векторов прерываний (флэш-память программ) Информационная память работает немного иначе по сравнению с энерго- независимыми устройствами хранения большинства других 8-битных микро- контроллеров, что в некоторых приложениях, возможно, вызовет у вас досаду. Она реализована в виде двух 128-байтных блоков флэш-памяти0, называемых сегментами А и В. Стирание можно осуществлять только целыми блоками. Операции чтения и записи могут выполняться побайтно или пословно. При этом необходимо помнить: вы можете только поменять «1» на «0», но не нао- борот; каждый раз, когда вы осуществляете запись в какую-либо ячейку бло- ка, то растрачивается суммарное время приложения напряжения программи- рования к блоку. Если это суммарное время становится слишком большим, то вам придётся стереть и переписать весь блок. Конечно, для массива памяти имеется также общее гарантированное количество циклов записи/стирания. Недостаток системы в том, что реализация энергонезависимого хранения часто обновляемых данных (счётчики аудита торговых автоматов, таймеры продолжительности работы и так далее) оказывается довольно утомительным делом. Вам надо считать весь сегмент в ОЗУ, обновить значение, которое вы хотите изменить, стереть версию, имеющуюся во флэш-памяти, и записать 0 В некоторых микроконтроллерах MSP430 информационная память поделена на 64-байтные блоки. Однако большинство чипов имеют парные 128-байтные блоки.
84 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы весь сегмент обратно. Разделение информационной памяти на два блока не- обходимо для того, чтобы вы могли реализовать схему избыточного хранения на случай сбоя по питанию или других ошибок во время выполнения опера- ций стирания или записи. Сравните это с традиционной встроенной EEPROM, которая имеется в большинстве других микроконтроллеров, применяемых для того же круга задач. Традиционный метод позволяет вам считывать, стирать и записывать байты индивидуально (хотя работать с этими чипами не так уж легко, так как обычно в них не весь массив энергонезависимой памяти расположен в адресном пространстве процессора). Если вашему приложению необходимо хранить как часто обновляемые данные (такие, как счётчики аудита), так и редко обновляемые (серийные номера, пароли и т. д.), то вам следует разраба- тывать алгоритм сохранения с особой тщательностью, принимая во внимание ограничения MSP430. Также очень внимательно изучите данные, касающиеся ресурса по количеству циклов записи во флэш-память выбранного микрокон- троллера, и сравните его с тем, насколько часто вы собираетесь осуществлять операции стирания и записи информационной памяти. Встроенный загрузчик (BSL — bootstrap loader) в ПЗУ — удобная функция, позволяющая вам перепрограммировать флэш-память, используя трехпрово- дной последовательный интерфейс (Р1.1, Р2.2 и «земля»). Использование BSL описано в фирменной документации компании Texas Instruments #SLAA089 «Features of the MSP430 Bootstrap Loader» («Особенности загрузчика MSP430»). Вкратце вы можете перепрограммировать чип по одному блоку за раз, исполь- зуя простой последовательный протокол со скоростью передачи 9600 бит/с, управление может осуществляться с ПК или другого внешнего устройства. За- грузчик MSP430 может быть также защищен паролем, чтобы не дать случай- ным людям возможности влезть в ваш код. Если вы собираетесь писать программы для MSP430 на ассемблере, то уре- занный пакет IAR Workbench, предоставляемый компанией Texas Instruments бесплатно, более чем адекватен для небольших проектов. И пока вы работаете на ассемблере, а в качестве платформы разработки используете Windows, я не вижу никаких серьёзных причин, по которым вы бы захотели перейти на что- то более «продвинутое». Тем не менее для микроконтроллеров MSP430 есть несколько Си- компиляторов, которые значительно разнятся между собой. Очевидно, есть полнофункциональная версия от компании IAR. Если вы пользуетесь ограни-
3.4. MSP430компании Texas Instruments ■ 85 ченной версией, то её модернизация (upgrading) до полной версии увеличит ваш инструментарий настолько, насколько это возможно. Я должен, впрочем, сказать, что от пакета IAR не получил ничего, кроме разочарования. Почти всё отрицательное, что мне приходится говорить в разделе 3.8, применимо к истории моих взаимоотношений с продуктами компании IAR. Поэтому я не могу рекомендовать вам идти по этому пути. Точно так же, как и для семейства AVR, компания Rowley создала альтерна- тивные версии ассемблера CrossWorks, Си-компилятора и интегрированной среды разработки, предназначенные для семейства MSP430. Они становятся интуитивно понятными в использовании, стоит вам потратить день или два на знакомство со всеми опциями. А цена и условия лицензирования гораздо менее обременительны, чем у пакета фирмы IAR. Коды, генерируемые эти- ми двумя пакетами, сравнимы. Более того, вам не придётся выполнять мно- го работы, чтобы перенести исходную программу, сделанную в пакете IAR, в пакет CrossWorks, так как синтаксис зависящих от компилятора подключае- мых функций очень похож. CrossWorks поддерживает FET-эмулятор компа- нии Texas Instruments (и его клоны от других производителей), а также другие аппаратные средства отладки. Фирма Rowley также предлагает собственный USB-отладчик. Впрочем, для своих личных проектов я опять же предпочитаю использовать gcc. Разновидность gcc для MSP430 (и сопутствующие инструменты) доступ- на с mspgcc.sourceforge.net. Вам обязательно надо прочитать ответы на часто задаваемые вопросы (FAQ) по этому продукту на mspgcc.sourceforge.net/faq/, так как есть некоторые тонкости, на которые вы, возможно, не сразу обратите внимание, особенно если не привыкли к использованию высокоуровневого языка при разработке встраиваемых систем. Итак, подведем итоги. MSP430 — это простая для понимания, очень гиб- кая и обладающая довольно хорошими характеристиками архитектура, раз- работанная специально для чувствительных к энергопотреблению приложе- ний. Главные недостатки её в том, что это семейство микроконтроллеров не очень большое (вам, возможно, придётся покупать более мощный микро- контроллер, чем вы хотите, просто для того, чтобы иметь определённую функцию), и эти чипы не очень хорошо подходят для любителей из-за от- носительной сложности макетирования. Впрочем, данные микроконтрол- леры популярны как в коммерческих, так и в любительских приложениях, в частности в тех, где существенна работа при питании от химических или солнечных батарей.
86 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы 3.5. PICmicro компании Microchip В семейство PICmicro0 компании Microchip входит множество разнообраз- ных микроконтроллеров. С одной стороны, в его составе есть поставляемые в крошечном шестивыводном корпусе SOT23 чипы PIC10F, используемые вме- сто связующей логики или для генерации сигналов сброса. С другой сторо- ны в то же семейство входит серия мощных 16-битных микроконтроллеров PIC24. Где-то посередине находятся процессоры цифровой обработки сигна- лов dsPIC, но это не чипы PIC в чистом виде, поэтому мы не будем их здесь рассматривать. Многие любители программирования для встраиваемых приложений, включая меня самого, широко используют микроконтроллеры PIC при работе и над любительскими, и над коммерческими проектами. Фактически я рабо- тал с этими микроконтроллерами ещё до того, как впервые занялся MSP430 или AVR. Вы можете взглянуть на архивированные страницы с парой моих древних любительских проектов на микроконтроллерах PIC (Picxie и Picxie 2) по адресу www.zws.com/products/. Помимо проникновения на рынок выпу- скаемых крупными сериями устройств (компания Visteon2), например, была одно время крупным покупателем чипов PIC; некоторые модели микрокон- троллеров используются в передатчиках брелоков дистанционного управле- ния), чипы PIC компании Microchip также довольно широко используются для образовательных целей. Давайте взглянем на экземпляр микроконтроллера PIC и сравним его с другими чипами, уже рассмотренными нами. На Рис. 3.4приведена цоколевка микроконтроллера PIC16F84A3) в корпусе DIP или SOIC с 18 выводами. 0 PIC — это акроним от Programmable Interface Controller (контроллер с программируе- мым интерфейсом) или от Programmable Intelligent Computer (программируемый интеллек- туальный компьютер) в зависимости от того, насколько вы углубитесь в историю. Впрочем, Microchip не говорит о том, что наименование является акронимом. Согласно официаль- ной терминологии компании они называются PICmicro, хотя все называют их PIC. 2) Компания, отпочковавшаяся от Ford Motor Company. Visteon разрабатывает автомо- бильную электронику, фокусируясь главным образом на оборудовании для навигации и развлечений. 3) Пожалуйста, обратите внимание, что этот конкретный микроконтроллер не реко- мендован для новых разработок. Более современный выбор — PIC16F627 или PIC16F628. Впрочем, большая часть из того, что будет мной здесь сказано, остаётся верным. Кроме того, микроконтроллер PIC16F84A был настолько популярен, что он просто отказывается умирать!
3.5. PICmicro компании Microchip ■ 87 RA2 RA3- RA4/T0CKI • гаеш- Vss- RBO/INT - RB1 - RB2- RB3- •1 2 3 4 5 6 7 8 9 2 о О) 2 > 18 17 16 15 14 13 12 11 10 -RA1 RAO -0SC1/CLKIN • 0SC2/CLK0UT -VDD RB7 RB6 -RB5 RB4 Рис. З.4. Цоколевка PIC16F84A в корпусе DIP-18. Описание выводов достаточно простое: • RA0...RA4 — пять доступных линий ввода/вывода общего назначения 8-битного порта. • T0CKI — вход внешнего тактового сигнала для таймера 0 (мультиплек- сирован с RA4). • RB0...RB7 составляют второй 8-битный порт ввода/вывода общего на- значения с программируемым подключением подтягивающих резисто- ров (слабых). Старшие четыре вывода порта могут использоваться для возбуждения прерываний при изменении подаваемого на них сигнала. Линии RB6 и RB7 также используются для внутрисхемного программи- рования; RB6 — тактовая линия, RB7 — линия данных. • INT — может использоваться как вход внешнего аппаратного прерыва- ния (совмещён с RB0). • _MCLR — вход внешнего сброса с низким активным уровнем. • OSC1 и OSC2 используются для подключения внешнего кварцевого или керамического резонатора, RC-генератора или внешнего источника так- тового сигнала. Очевидно, что по сравнению с другими чипами, которые обсуждались мной до сего момента, это гораздо менее мощный микроконтроллер как в смысле размера программы, так и в смысле количества линий ввода/вывода. Он так- же не предлагает чего-то серьёзного в смысле периферии. Я выбрал этот чип в какой-то степени из-за того, что с ним знаком, но в основном потому, что исторически он был одним из самых популярных чипов PIC, используемых любителями. Вы найдёте буквально тысячи проектов на базе этого микро- контроллера! Также обратите внимание, что не следует полностью отвергать
88 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы сопоставления, которые я буду здесь делать, как искусственные конструк- ции, сравнивающие яблоки с апельсинами. Все три других описанных в этой главе семейства микроконтроллеров масштабируются примерно до размера PIC16F84A (или даже меньшего), в то же время не выказывая его странностей. Например, в семействе 8051 есть чипы с 1 К памяти программ в корпусе SOIC на восемь выводов (например, P89LPC903 фирмы Philips), в которых всё ещё сохраняется почти та же самая модель программирования. MSP430F2001 — микроконтроллер с 1 К флэш-памяти в корпусе на 14 выводов, и он всё ещё обладает полноценным элегантным ядром MSP430 и той же архитектурой памяти. Таким образом, только малый размер не может быть объяснением странностей. Итак, вы спросите, что за странности свойственны семейству PIC? Имеет- ся целый список. Начнем с того, что большинство 8-битных моделей PIC ми- кроконтроллеров, включая описываемый, фактически имеют 14-битные сло- ва команд. Доступно несколько 8-битных ядер, одно ядро с 12-битным, одно с 14-битным и два ядра с 16-битным словом — серии PIC16 и PIC17. Характери- стики этих семейств различны. Компания Microchip всегда приводит размер памяти программ в словах, поэтому 1 К для 14-битного чипа PIC фактически составляет 1.75 К реального пространства флэш-памяти. Эта в действительно- сти не так уж важно, если вы не пытаетесь проанализировать необработанный НЕХ-файл. Но это немного необычно и может привести к путанице, в част- ности, из-за того, что в большом количестве документации (главным образом сторонних фирм) ужасно небрежно путают «байты» со «словами» в таких ме- стах, где вы часто не можете разобрать, о чем именно там говорят. Есть пара первоочередных ограничений, с которыми мы можем разобрать- ся сейчас. У данного варианта микроконтроллера есть только один 8-битный регистр общего назначения, для ссылки на который используется буква W (Working register — рабочий регистр). Раньше этому регистру приписывали букву «А» (от accumulator— аккумулятор). Каждый байт данных, который вы будете обрабатывать в микроконтроллере, должен быть пропущен через этот регистр. Также набор команд, строго говоря, не имеет никаких команд услов- ного перехода. Есть только команды «пропустить следующую инструкцию по условию». Хотя это и не совсем неожиданно — в семействе AVR тоже имеются такие команды, — но это источник ошибок для программистов, не обладаю- щих опытом в подобном стиле программирования, поскольку такая логика отличается от той, которую люди привычно считают бинарной.
3.5. PICmicro компании Microchip ■ 89 PIC — это выдающийся образчик гарвардской архитектуры с четырьмя от- дельными адресными пространствами: памяти программ, памяти данных и регистров периферии (документация Microchip говорит о встроенном ОЗУ как о «регистровом файле», подразумевая, что это в действительности специ- альный случай встроенных регистров), EEPROM и стека. Подробнее о стеке чуть позже, а сейчас давайте посмотрим на два других адресных простран- ства. Память программ достаточно проста. Вектор сброса находится по адресу OOOOh, а вектор прерываний от периферии — 0004h. Основное программное пространство занимает область от 0008h до 03FFh. Обратите внимание, что всё это адреса слов. Каждый адрес относится к 14-битной ячейке, а не к байту. Возможно, это немного тяжело ухватить, если вы привыкли работать с более мощными архитектурами, в которых можно, используя адрес 000lh, получить доступ к половине 16-битной инструкции, находящейся по адресу OOOOh. Вам, вероятно, лучше уйти от этого, просто считая, что каждая инструкция в ми- кроконтроллерах PIC является байтом. Слова в памяти программ являются неделимыми сущностями, и в любом случае ваша программа не может иметь к ним доступ. Программный счётчик в чипе PIC16F84A состоит из двух частей. Младшие 8 бит доступны для чтения и записи в регистре PCL, а старшие 5 бит доступ- ны только для записи через регистр PCLATH (PCLATH — Program Counter LATcH, защёлка программного счётчика). Просто запись в регистр PCLATH не приведёт немедленно к тому, что ЦПУ начнет выполнение программы с нового места, — это своего рода область хранения старших бит программного счётчика. Команды CALL и GOTO дают вам только 11 бит для адреса назначе- ния. Если вы осуществляете дальний переход, то вам надо сохранить рабочий регистр W, загрузить в него желаемое значение регистра PCLATH, сохранить его в PCLATH, восстановить W, затем выполнить команду CALL или GOTO для перехода в необходимую точку. Звучит запутанно, но так оно и есть! Это вообще-то незаметно непосредственно в PIC16F84A (начнем с того, что его память программ состоит всего из 1024 слов), но действительно вызывает до- саду в более мощных микроконтроллерах того же вида. Следующая странность относится к памяти данных, размер которой равен 256 байтам и которая в микроконтроллере PIC16F84A разбита на два банка по 128 байт (в более мощных микросхемах банков больше). Текущий исполь- зуемый банк памяти данных выбирается с помощью двух битов в статусном регистре (RP0 и RPl; RP1 в PIC16F84A фактически ни для чего не использу- ется, его следует всегда оставлять равным нулю, хотя физически он и реали-
90 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы зован в ядре, и некоторые программы используют этот бит в качестве флага). В Табл. 3.3 приведена карта памяти данных. Таблица 3.3. Распределение памяти данных для обоих банков Банк 0 Olh Наименование | TMRO Наименование OPTION_REG Банк1 81h 05h 06h 07h 08h 09h PORTA PORTB He реализован EEDATA EEADR TRISA TRISB He реализован EECON1 EECON2 85h 86h 87h 88h 89h 0Ch...4Fh 68 байт рабочей ОЗУ Отображение 0Ch...4Fh 8Ch...CFh Я выделил серым цветом те регистры, которые отображены в обоих банках, и не вьщелил область рабочей ОЗУ, поскольку это лишь счастливая случай- ность — из-за неполного адресного декодирования, — что в PIC16F84A дан- ная область оказалась доступной в обоих банках. В микроконтроллерах PIC с большим ОЗУ вы не можете полагаться на такое зеркальное поведение. Всякий раз, когда вы используете прямую адресацию (команды MOVWF и MOVF, которые пересылают байт из регистра W в ячейку памяти данных и со- ответственно наоборот), вы точно определяете, в каком «регистровом файле» (используя терминологию компании Microchip) адрес является источником или назначением. Задающие банк биты при этом игнорируются. Банк ста- новится важным только тогда, когда вы используете косвенную адресацию. В микроконтроллерах PIC за косвенную адресацию отвечают регистры FSR (File Select Register — регистр выбора файла) и INDF (INDex File — индекс файла). Вы загружаете указатель в регистр FSR, и он устанавливает ячейку для косвенных операций чтения/записи. Фактически вы осуществляете доступ к данным, индексированным через INDF, который является фиктивным реги-
3.5. PICmicro компании Microchip ■ 91 стром. Он ссылается на ту ячейку ОЗУ, куда указывает FSR вместе с битами, определяющими регистровую страницу. Реализация поисковых таблиц (lookup tables) в памяти программ в этом се- мействе микроконтроллеров также весьма необычна. Здесь нет команды или режима адресации, позволяющих вам считывать данные непосредственно из памяти программ. Вместо этого для чипа PIC16F84A предлагается альтерна- тивная версия инструкции RETURN (возврат из подпрограммы), называемая RETLW (Return and Load W — возврат с загрузкой регистра W). Эта инструк- ция длиной в одно слово загружает 8-битную константу в регистр W и пере- дает управление вызывающей программе. Таким образом, любая поисковая таблица, которую вам надо иметь в ПЗУ, будет фактически представлять собой длинную цепочку инструкций RETLW. Чтобы получить доступ к таблице, вам надо подсчитать нужное значение и загрузить его в PCLATH, затем высчитать младшие 8 бит адреса желаемой записи и записать их в регистр PCL, чтобы выполнить длинный переход в таблицу данных. Это довольно причудливо, не говоря уж о том, что ужасно неэффективно. Следуя по списку странностей, мы приходим к тому, как в семействе PIC реализован стек. Я не могу сказать практически ничего хорошего об этой си- стеме. Почти во всех других микропроцессорных архитектурах, с которыми вы можете столкнуться, указатель стека, если таковой есть, представляет со- бой регистр, который, используя тот или иной механизм (иногда довольно за- путанный), указывает на область общей рабочей ОЗУ. Часто имеются специ- альные правила относительно того, где может располагаться стек и насколько большим он может становиться. Обычно это определяется ограничениями на число доступных в регистре-указателе битов. Но тем не менее стек с фактиче- скими данными почти всегда расположен в обычной памяти данных. Микроконтроллер PIC16F84 совершенно отличается от нормы. У него име- ется 8-уровневый 13-битный аппаратный стек (13 бит необходимы, поскольку это размер программного счётчика), а указатель стека абсолютно недоступен для вашего кода. Вы можете только вталкивать и выталкивать данные, исполь- зуя команды CALL и RETURN; прерывания, конечно, тоже используют стек. Так как нет ни механизма исключений, ни набора флагов, то у вашего кода нет возможности избежать, обнаружить или нейтрализовать проблемы, свя- занные с переполнением стека. Единственным «преимуществом» этой весьма необычной системы является то, что неконтролируемо растущий стек не мо- жет залезть в память данных или программ. Однако если ваша программа мо-
92 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы жет вылететь в гиперпространство в результате получения при выталкивании фиктивного адреса возврата, то это довольно спорное преимущество. В то время как более мощные микроконтроллеры PIC не столь причудли- вы, как меньшие микросхемы, даже при работе с ними остаётся всепрони- кающее ощущение, что вы в действительности работаете с крошечной микро- схемой, у которой есть большие ОЗУ и флэш-память, трансплантированные в неё посредством каких-то квази-франкенштейновских операций. Я не могу не предположить, что где-то в лабораториях компании Microchip сидит инже- нер, который провел несколько дней, пакуя десятифутовые коробки с продук- цией в пятифутовую тару, и в результате немного свихнулся. Хотя реализация надёжных приложений на микроконтроллерах PIC возможна, работа с ними раздражает настолько сильно, что я, по большому счёту, предпочитаю рабо- тать с другими ядрами, если нет существенных аргументов (цена, лицензия на алгоритм, соответствие определяемым приложением требованиям и т. п.), которые толкают меня к конкретному чипу PIC. Раз уж я начал ворчать по поводу этих микроконтроллеров, позвольте мне высказать ещё одну жалобу: довольно малое число микросхем семейства PIC имеют встроенный интерфейс отладки. У некоторых новейших микрокон- троллеров все же есть JTAG, а другие чипы поддерживают функцию диагно- стической отладки (bond-out){\ используя внутрисхемный отладочный модуль MPLABICD 2. Это означает, что обычно единственными доступными метода- ми отработки программ являются способ «прошивай и молись» или приобре- тение полнофункционального внутрисхемного эмулятора. Это, возможно, не слишком тяжкий груз для любителей (за исключением расходов на внутрис- хемный эмулятор), но использование микроконтроллеров в коммерческих приложениях, где время разработки — деньги, может оказаться очень неудоб- ным. В некоторых приложениях (в частности, в приборах с радиопередатчи- ками — область, в которой я в настоящий момент работаю) очень сложно про- изводить отладку, если вам приходится подключать огромный эмулятор, из- вергающий радиочастотные помехи. JTAG довольно плох, но с ним несколько 0 Чипы являются специальными отладочными версиями микроконтроллеров. У них есть дополнительные контакты, соединённые с внешними выводами. В имеющихся в роз- ничной продаже микроконтроллерах эти контакты обычно не выводятся во внешний мир. Отладочный интерфейс микроконтроллеров фирмы Microchip задействует те же самые вы- воды портов, которые используются для внутрисхемного программирования; вы не можете использовать отладочный интерфейс, если используете эти выводы для других функций. Однако у отладочных чипов имеются дополнительные физические контакты, которые вы- водят линии отладки к назначенным точкам подсоединения.
3.5. PICmicro компании Microchip ■ 93 проще уменьшить этот шум. С другой стороны, следует располагать ваш эму- лятор физически близко к плате, чтобы избежать нежелательных паразитных эффектов от длинных проводов, тянущихся от эмулятора к месту, где должен быть микроконтроллер. Что касается разработки аппаратной части, то на рынке имеется множе- ство программаторов микроконтроллеров PIC от сторонних производите- лей, среди которых есть как простые любительские устройства, подключае- мые к параллельному или последовательному порту, так и высококачествен- ные групповые программаторы. PonyProg, упоминавшийся мной ранее, также поддерживает некоторые модели чипов семейства PIC. Компания Microchip предлагает PICstart Plus — простой программатор для новичков. Это малень- кий, недорогой, подсоединяемый к последовательному порту прибор, имею- щий разъём с нулевым усилием (ZIF) для установки микроконтроллеров в DIP-корпусах. С этим программатором вы можете прошивать большинство популярных моделей PIC, хотя вам понадобится сделать самодельный адаптер, чтобы выполнять внутрисхемное программирование. Компания Microchip также выпускает несколько других программаторов, обладающих различными возможностями, а также работающие в реальном режиме времени внутрис- хемные эмуляторы, такие, как ICE2000 и ICE4000. Сторонние фирмы (напри- мер, Vikon — www.vikon.com) также делают внутрисхемные эмуляторы, кото- рые немного дешевле, чем фирменные продукты от Microchip. С точки зрения создания ПО архитектура семейства PIC, вероятно, наи- менее дружелюбна к языкам высокого уровня из когда-либо разработанных архитектур. Эти микроконтроллеры лучше всего программировать на ассем- блере, в частности, если вы жестко ограничены в размере кода или пытаетесь достичь оптимальных временных параметров. Впрочем, для семейства PIC имеются коммерческие Си-компиляторы, предлагаемые среди прочих таки- ми компаниями, как Byte Craft Limited (www.bytecraft.com), CCS Inc. (www. ccsinfo.com), Hi-Tech Software (www.htsoft.com). У компании Hi-Tech Software также есть свободно распространяемый продукт PICC Lite, который с некото- рыми ограничениями поддерживает десять наиболее используемых любите- лями микроконтроллеров PIC (ограничения зависят от того, какой контрол- лер вы применяете; может и не быть никаких ограничений или могут быть ограничения по использованию ОЗУ/ПЗУ). Чтобы найти бесплатные средства разработки, вам лучше всего зайти на сайт www.gnupic.org, который имеет ссылки на многочисленные ведущиеся проекты по созданию инструментария проектирования с открытым кодом.
94 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы Вы найдёте несколько проектов Си-компиляторов, которые в настоящий мо- мент пригодны для использования, а также три компилятора с языка Forth, компилятор с языка Phyton и прочее. Есть даже транслятор с Java на PIC- ассемблер, называемый Aino, который доступен на сайте www.personal.eunet. fi/pp/jokinen/. Когда я обсуждал этот последний продукт с коллегой, для ко- торого английский не является родным языком, он выдал комментарий: «Та- туировки не создают свинью» («tattoos do not make the pig»). Это утверждение таинственно и немного странновато, но полностью соответствует моей реак- ции на идею всунуть Java-код в PIC. Все вышесказанное приводит меня к выводу, что семейство PIC лучше всего подходит для относительно маленьких проектов, предпочтительно на ассемблере0. Хотя я осознаю, что на микроконтроллерах PIC были созданы некоторые совершенно восхитительные вещи, я всё же скажу, что это впустую потраченные усилия, если только нет каких-нибудь весьма особых обстоя- тельств, которые сделали чип PIC правильным выбором: цена, какая-нибудь очень специфическая комбинация функций и т. д. Хотя нельзя сказать, что семейство PIC ужасно не подходит для целей обучения, всё же есть другие ва- рианты, с которыми начинающему проще иметь дело. Следовательно, я бы не рекомендовал вам начинать путь в область встраиваемых систем с этого се- мейства, несмотря на его очевидную вездесущность. Это довольно странно, но у некоторых микроконтроллеров PIC есть кло- ны. Известное имя в этой сфере — компания Ubicom, бывшая Scenix. Периоди- чески появляются маленькие азиатские компании с несколькими микрокон- троллерами, которые подозрительно похожи на какой-нибудь вариант PIC. Но эти производители, кажется, всегда прекращают своё существование через довольно короткое время. 3.6. Менее распространенные специализированные архитектуры В разделах, предшествующих этому, мы едва начали перечислять имеющи- еся 8-битные (и меньшие) архитектуры. Вот ещё некоторые, с которыми вы можете столкнуться в реальной жизни: 0 Этот комментарий неприменим к нескольким предназначенным для специальных целей чипам, таким, как микроконтроллеры igPIC и семейство dsPIC.
3.6. Менее распространенные специализированные архитектуры ■ 95 • Цифровые сигнальные процессоры (DSP) всех разновидностей. • Высококачественные процессоры «типа Z80» компании Rabbit Semiconductor. • 68НС09 компании Freescale (урождённая Motorola). • Варианты для встраиваемых приложений процессора Z80 компании Zilog. • СОР компании National Semiconductor. • Серии 78К компании NEC. • Специальные микросхемы для говорящих игрушек и дешёвых ЖКИ или видеоприставок для игр (многие из них сделаны на основе вариантов ядра 65С02 или 65С8160). Есть разнообразные, определяемые спецификой соображения и эвристи- ческие методы, которые могут сразу же заставить вас избрать или отвергнуть какое-нибудь определённое семейство микроконтроллеров. Поскольку все эти правила отражают факторы, специфичные для требуемого приложения, то оказывается в той или иной степени невозможным представить их как стройную Великую теорию выбора микроконтроллеров. Это просто набор во- просов, которые вы должны задать сами себе, а затем взвесить ответы, чтобы прийти к тому или иному выводу: • Использовали ли вы эту архитектуру прежде ? Это кажется очевидным, но люди всё же слишком часто недооценивают это соображение. Если у вас уже есть опыт работы с базовой архитектурой, то возможность восполь- зоваться ею является сильным аргументом в выборе предпочтений. • Достаточно ли опубликованной технической информации, чтобы тща- тельно оценить фактическое соответствие микросхемы вашим потреб- ностям? Если нет, то может ли служба поддержки заполнить лакуны? Весьма неприятно узнать после восьми месяцев работы над проектом, что выбранный вами микроконтроллер недостаточно быстр или гене- рирует чуточку больше радиочастотных шумов, чем это приемлемо для вашего приложения. • Есть ли обеспечивающие прямую замену варианты микроконтроллера, с большими ресурсами (ПЗУ, ОЗУ, большая тактовая частота и т. д.)? 1} 65С816 — обратно совместимая 16-битная версия 65С02. Этот микроконтроллер ис- пользовался в приставке для видеоигр Super Nintendo, в компьютере Apple Ilgs и в некото- рых других домашних компьютерах и/или в приставках для видеоигр.
96 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы При всем желании вы не всегда можете достоверно оценить требования к ПО, к тому же отдел маркетинга обязательно будет умолять вас доба- вить ещё хотя бы одну функцию. Это приятная подстраховка — знать, что в случае выхода за пределы памяти данных или памяти программ вы можете просто модифицировать систему, поставив более мощную, но совместимую по выводам версию чипа. • Используют ли другие люди это семейство в разнообразных приложени- ях? Некоторые микроконтроллеры разработаны специально для кон- кретного узкоспециализированного приложения (скажем, управления сервоприводом CD-плееров). Вы можете увидеть один из этих чипов и решить, что он идеально подходит для вашей новой клюшки для гольфа с лазерным наведением. И чип к тому же дешевый, поскольку в Китае выпускают по десять миллионов CD-плееров в день. Проблемы, одна- ко, появятся, когда основные потребители микросхемы перейдут на что- нибудь другое из-за технологических изменений в их отрасли. Объёмы покупок вторичными потребителями вроде вас, возможно, окажутся недостаточными, чтобы производитель продолжил выпуск этих чипов. По меньшей мере, вы можете ожидать, что число микросхем в семействе будет уменьшено, так как от непопулярных чипов будут избавляться. Цены, вероятно, тоже подпрыгнут. • Был ли микроконтроллер общедоступен в течение нескольких лет? Кому- то приходится ходить по лезвию ножа, испытывая новые чипы в день их появления на рынке. Но пока вам не платят за исследования этих чипов, вы же не хотите быть этим кем-то. • Много ли мест, где можно получить средства разработки? Если сред- ства разработки можно получить только из одного места, то это крас- ный флажок, говорящий о том, что производителю чипа пришлось за- ключить контракт на создание этого инструментария, или (что зачастую ещё хуже) все инструментальные средства разрабатываются только са- мим производителем. Это редко можно считать положительным знаком, если только вы не выбрали действительно новый чип. В таком случае вам должно быть стыдно за саму мысль использовать этот чип, если только на рынке нет буквально ничего иного, что может выполнить требуемую задачу. • Не предназначен ли этот выпускаемый в Азии микроконтроллер для их до- машнего рынка? Слишком часто азиатские производители полупрово-
3.6. Менее распространенные специализированные архитектуры ■ 97 дников бросают взгляд на свою линейку предназначенных только для местного рынка микросхем и решают, что настало время для продажи этих чипов в Соединённых Штатах. Они используют какую-то произ- вольную процедуру при принятии решения о том, какие именно микро- схемы следует отправить за океан, и совершенно внезапно местный представитель азиатской фирмы звонит вам, пытаясь продать какие- нибудь «совершенно новые» чипы. Я не один раз обжигался на такого рода вещах. Документацию на английском языке и средства разработки зачастую едва успевают подготовить к «часу X», а ваш местный сервис- инженер, с огромной долей вероятности, не будет вообще ничего знать об этих чипах. Обратите внимание, я не жалуюсь на азиатские микросхе- мы в целом. Я абсолютно определённо указываю здесь на те чипы, кото- рые исторически были доступны только местным потребителям в Япо- нии и Китае. Сложно угадать причины, по которым у этих микросхем столь отвратительная поддержка в Соединённых Штатах0. Моя догадка заключается в том, что инженеры, использующие эти микросхемы в тех географических регионах, где они и появились, очень хорошо контак- тируют с разработчиками чипов. Следовательно, многие «племенные» знания передаются из уст в уста — от производителей полупроводников к местным потребителям. Эта информация просто никогда не пишется в технической документации и уведомлениях об исправлениях и опреде- лённо никогда не переводится на английский язык. Что касается средств разработки, то моё самое терпимое объяснение таково: возможно, что их англоязычные версии не модернизируются так же быстро, как японские и/или китайские. • Действительно ли этот специализированный чип способен выполнить решаемую вашим устройством задачу за наименьшие деньги? Исполь- зуемые в игрушках микроконтроллеры, с которыми я очень близко знаком, довольно уникальны. Обычно их возможности ограниченны, а средства разработки почти шокируют. Как вы, возможно, догадывае- тесь, набор команд этих чипов не очень богат. В общем случае у них есть команды загрузки в регистр константы, инкремента/декремен- та содержимого регистра, установки состояния выходных выводов, безусловного перехода через регистр и выполнения различных услов- 0 Европейским читателям следует обратить внимание, что я говорю здесь исключи- тельно о рынке США. Приведённые мной в этом разделе комментарии не всегда примени- мы к европейским рынкам, там некоторые дистрибьюторы обеспечивают очень хорошую поддержку.
98 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы ных переходов в зависимости от состояния на входе. В этих чипах, по крайней мере в их дешевых вариантах, часто вообще нет ОЗУ, за ис- ключением нескольких регистров. Отсутствует стек, и единственный способ реализовать подпрограмму — сохранить адрес возврата в реги- стре. Если вы программируете эти микроконтроллеры, то забудьте всё, чему вас учил ваш профессор на занятиях по компьютерным наукам. Здесь единственным способом написать, программу является исполь- зование частокола операторов GOTO, а в случае нетривиального про- екта — обычно написать большой, сильно избыточный код. Однако они всё же представляют собой наилучший выбор для применения в игрушках, поскольку обычно игрушки не требуют многого в смысле сложной логики (следовательно, вы не потратите много времени на программирование и отладку) и чрезвычайно чувствительны в цено- вом отношении. • Является ли владельцем прав на ядро этого микроконтроллера маленькая фирма-разработчик без собственных производственных мощностей? Это обстоятельство не вычеркивает мгновенно микроконтроллер из списка претендентов. Но если все права на микроконтроллер не просто кому- то принадлежат, а принадлежат небольшой компании, не имеющей соб- ственного производства, то это должно быть для вас предупредительным сигналом — желтым флагом. Если у фирмы-разработчика возникнут трудности с партнером-производителем, то у вас будут проблемы с по- ставками0. Этот фактор требует пристального внимания, если вы разра- батываете продукт массового производства и, в частности, рассчитываете на выпуск в течение долгого времени (например, в эту категорию может попасть оборудование систем отопления и вентиляции). Если выделаете что-то для производства в небольшом количестве или в течение неболь- шого срока, то вам, вероятно, следует уделить больше внимания удоб- ству — насколько легко вы можете получить микроконтроллер со всеми необходимыми функциями и предпочтительно с уже разработанными библиотеками драйверов. Продукция компании Rabbit Semiconductor 0 Довольно свежим примером этого являются потрясения, имевшие место с чипами компании ZF Micro Solution. Это совместимые с х86 системы-на-кристалле, производимые ранее на фабриках фирмы National Semiconductor. Рассказывают несколько версий того, почему отношения между компаниями испортились, но в конечном счёте всех заказчиков этих чипов трясло какое-то время в лихорадке, пока не был подписан новый контракт на их производство. Если вы ведете разработку на подобных фирменных микросхемах, то вы вручаете свою судьбу в руки вашего поставщика — похожего на этого или нет.
3.6. Менее распространенные специализированные архитектуры ■ 99 служит примером семейства, которое вы, вероятно, не выбрали бы для массовых приложений. У этих чипов имеется хорошая поддержка, на- правленная на быструю разработку, и набор функций, реализация кото- рых на других чипах потребовала бы значительных инженерных усилий. Однако с этими микроконтроллерами тяжело добиться повторного ис- пользования интеллектуальной собственности и масштабирования на широкий диапазон продукции (семейство очень маленькое, а среда раз- работки в своей основе защищена патентами), а ещё они относительно дороги. • Ядро доступно от единственного поставщика или лицензировано многими производителями? В наше время не у многих микроконтроллеров есть прямые замены, выпускаемые другим производителем, Даже в корпо- рациях, в которых строго соблюдается правило не применять микро- схемы, выпускаемые единственным производителем, от этого правила отказываются, когда дело касается микроконтроллеров. Однако, даже если вы не ищете тонную замену, есть определенная польза в выборе ядра, доступного от многих поставщиков. Если у вас возникли про- блемы с поставщиком А или он прекратил выпуск вашего любимого микроконтроллера, но то же самое ядро доступно у поставщика Б, то у вас, вероятно, будет меньше сложностей по переделке проекта на чип поставщика Б по сравнению с его полным переносом на новое, незна- комое ядро. Надеюсь, что к этому моменту вы вполне понимаете, почему нет какого- нибудь одного микроконтроллера, с которым вы должны познакомиться, чтобы войти в сферу встраиваемых систем. У вас должно также появиться некоторое понимание тех «за» и «против», что влияют на выбор чипа для реального проекта. Я также сделал всё, что было в моих силах, чтобы вкрат- це познакомить вас с характерными чертами и странностями нескольких наиболее популярных при обучении платформ. Если вы только начинае- те программировать для встраиваемых систем, то наилучший способ стать востребованным на рынке труда — взять любую из этих архитектур (или какую-нибудь другую, которая соответствует вашим интересам) и начать разрабатывать на ней реальные проекты. Неважно, какой именно микро- контроллер вы будете использовать для реализации вашей разработки, лишь бы он соответствовал предъявляемым проектным требованиям0. 1} В реальном мире эти требования, конечно, включали бы цену и время выхода раз- работки на рынок.
100 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы 3.7. Какой язык программирования мне следует выучить? C++, С и ассемблер в небольших встраиваемых системах Я бы хотел начать этот раздел показательным отрывком из текста, который изначально был размещён мной в Usenet в группе comp.arch.embedded в на- чале 2006 года. Я немного отредактировал его, но если вы любопытны, то ори- гинал можно найти в архивах Usenet. Чтобы не было недоразумений, обратите внимание на вложенную мной в процитированный здесь текст иронию. Первоначальное заявление, автор которого некто Elsevier: «В наши дни почти все используют С или С++»1). У меня есть небольшие возражения против мысли, что «все используют C++», и это особенно касается области встраиваемых систем. Я полагаю, что прошло несколько месяцев с тех пор, как эта идея была испепелена на угляхвс.а.е., поэтому, может быть, нам следовало бы просто скопировать и вставить сюда аргументы прошедшего спора, чтобы не тратить время. Я прозреваю подход, кажущийся более разумным и заключающийся в использовании в сложных проектах встраиваемых систем языка Java, a не C++ (язык, к которому питают отвращение все нормально думающие инженеры встраиваемых систем, работающие с какой угодно архитекту- рой; и, конечно, только исключительно изнуренный мазохист, потерявший номер телефона своей любовницы-тюремщицы или не имеющий боль- ше возможности оплачивать её услуги, будет применять C++ на 8-битных микроконтроллерах). Если вы готовы мириться с поглощающим ресурсы C++ и убеждены в том, что ваши приложения что-то приобретают от использования языка, в ко- тором есть объектно-ориентированные синтаксические элементы (как в С++Л а не просто возможности ООП (как в С), то использование вместо C++ языка Java может оказаться приятным сюрпризом. Среди различных преимуществ Java над C++ есть и такое — иногда можно найти кого-то, кто может дать полный и корректный ответ на вопрос, касающийся этого языка. Более того, очевидно, что на многие вопросы по Java в качестве ответов не предлагаются дискуссии по 5000 слов между сторонниками различных языков. Тогда как ни на один вопрос по C++ нельзя ответить без привлечения адвокатов других языков с противоположными точками 1) Пожалуйста, заметьте, что я намеренно использовал избранные цитаты из первона- чального текста, чтобы отклик получился юмористическим.
3.7. Какой язык программирования мне следует выучить ? ■ 101 зрения и/или разработки нового чернового стандарта, определяющего версию языка с требуемой функциональностью. Догма — чудесная вещь, не правда ли? Курсы по коммерции раньше включали предмет, называемый креативная бухгалтерия (creative accounting). Суть этого предмета такова. Ваша компа- ния за истекший год провела закупки на Хдолл., осуществила продажи на У долл. и получила 2долл. Ваш генеральный директор, акционер или ано- нимный друг по переписке хочет, чтобы компания показала прибыль Рдолл. Получить этот результат можно методом, совместимым с общепринятыми принципами бухгалтерии (GAAP — Generally Accepted Accounting Principles^. В прошлом я видел колоссальную практическую пользу от подобного для того, чтобы обосновать (или «зарубить») необходимые средства на инже- нерные проекты, навести тень на проектную стоимость компонентов или продемонстрировать, что отдел соответствует или не соответствует сво- ему бюджету. Но единственный и наиболее полезный факт, который я из всего этого вынес, заключается в том, что все показатели, не выводимые из доступных для измерения физических явлений, — это чепуха. И вирту- альные преимущества в стоимости/производительности/надёжности, по- лучаемые от перехода на C++, очень хорошо соответствуют вышесказан- ному. Переход от ассемблера кСв определённой (нечеткой) точке разме- ра/сложности кода может быть обоснован, исходя лишь из числа людей, которые чувствуют себя комфортно при программировании на этом языке (хотя я абсолютно убеждён, что здесь есть нечто гораздо большее, и боль- шинство читателей на этом форуме с этим согласятся). Переход на C++ в проектах встраиваемых систем* требует обоснований, которые обычно заканчиваются словами: «БОЖЕ МОЙ! ЗА ОКНОМ ЛЕТИТ РОЗОВАТО-ЛИЛОВЫЙ ДЕЛЬФИН НА ВЕЛОСИПЕДЕ!» Пока все выглядыва- ют в окно, жмете AH-F4 и закрываете PowerPoint. На этом презентация за- вершается. И как итог: «Вы должны делать то, что я говорю». ^Говорят об особых исключениях. Но они главным образом нелепы. Например, раз- работка не являющегося PDA (Personal Digit Assistant — персональный цифровой помощник, КПК) приложения на основе Windows СЕ. Инженеры очень любят поспорить, что хорошо показывает предыдущий отрывок. По вопросу о том, какой язык программирования представляет Единственную Истинную Религию создания встраиваемых систем, были вы- сказаны буквально миллионы изящно обоснованных технических аргумен- тов, сдобренных образцами кодов и частенько сопровождавшихся жуткими Вы не можете нарушать правила, если вы знаете, что они существуют.
102 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы ссорами. Я помогу вам увидеть правду здесь, в этом же разделе, сразу заявляя, что фактически не существует Единственной Истинной Религии, а ответ на вопрос, какой язык программирования использовать для встраиваемого при- ложения, определяется ситуацией. Естественно, есть множество людей, кото- рые оспорят это утверждение, так же как есть люди, которые будут защищать его до последней капли крови. Фактически, уже только исключив [вставьте сюда название любого языка программирования] из заголовка этого раздела, я навлек на свою голову громы и молнии. Решение о том, какой язык программирования использовать для проекта, основывается на следующих краеугольных камнях (порядок не важен): • Сложность проекта, которая обычно более или менее впрямую перево- дится в размер кода. • Предпочтения руководителя проекта, опыт и, к сожалению, ничем не обоснованные прихоти. • Политика компании. • Наличие в вашей организации опытных программистов для данного языка или инструментария. Хотя это не универсальная рекомендация, но мой опыт говорит, что сторонние программисты предпочитают вы- сокоуровневые языки, даже когда другие аспекты проекта решительно говорят в пользу ассемблера. • Доступность заслуживающего доверия инструментария для данной ап- паратной платформы. • Ресурсы (количество постоянной и оперативной памяти, мощность ЦПУ в лошадиных силах), имеющиеся в аппаратной платформе. Когда ресурсы исчерпываются, отлаживаемый вручную ассемблерный код ста- новится единственным жизнеспособным выбором. • Функциональные требования системы, в частности время отклика на воздействия. Чем дальше язык программирования абстрагирует вас от аппаратной части, тем сложнее гарантировать итоговое поведение си- стемы в режиме реального времени. • Требования к надёжности и безопасности, налагаемые надзирающими органами (могут потребоваться сертификационные испытания, и, воз- можно, чтобы доказать, что по своей конструкции система обеспечивает заданный уровень надёжности, придётся выпускать документацию). На- пример, для доказательства надёжности системы может оказаться необ- ходимым предъявить результаты испытаний на симуляторе.
3.7. Какой язык программирования мне следует выучить ? ■ 103 • Используемая во встраиваемом приложении ОС (если таковая есть). Этот пункт зачастую оказывается аргументом, перекрывающим любые другие соображения. Если к вашему приложению предъявляются от- носительно сложные требования (например, поддержка экзотических сетевых протоколов), то можно добиться огромной экономии времени при проведении разработки, используя готовую ОС, в которой реализо- вана поддержка требуемой функциональности. Однако в этом случае вам обычно приходится использовать язык, предопределённый данной ОС. Большинство из нас не занимается проектированием систем управления космических кораблей, дефибрилляторов или автомобильных подушек без- опасности. Люди же, работающие над такими системами, ограничены мно- жеством заранее принятых за них проектных решений в форме выпущенного надзорными агентствами или высшими должностными лицами компании списка предписаний, говорящих, что «вам следует использовать инструмен- тарий X и писать ПО в стиле ABC». Рискуя сделать пристрастное обобщение, я бы всё же сказал, что большинство инженеров по встраиваемым системам работают на другом конце спектра — над проектами, не имеющими или име- ющими очень небольшое число обязательных для исполнения требований, к которым мало что предъявляется в смысле безопасности0. Поэтому для инже- нера необходимо уметь разумно выбирать инструментарий или, по крайней мере, понимать, что стоит за этим выбором. Большинство моих крупных и средних проектов, так же как и большин- ство других проектов встраиваемых приложений в мире, написаны на смеси ассемблера и С. Небольшие проекты я обычно пишу на чистом ассемблере. Чрезвычайно грубое эмпирическое правило: я считаю, что граничная точка между «только ассемблер» и «может быть, перейти на С» лежит где-то между 4 К и 8 К объектного кода. Это правило, впрочем, настолько изобилует всяки- ми подводными камнями, что мне очень не хочется предлагать его вам. Область, которую должен занимать язык C++ в сфере встраиваемых си- стем, — это тема жарких споров, что вам, возможно, продемонстрировало на- чало этого раздела. Моя точка зрения (и на этот раз я говорю без иронии) заклю- чается в том, что для C++ вообще нет места в 8-битных разработках. Несмотря 0 Под этим я не подразумеваю, что в большинстве систем сознательно пренебрегают вопросами безопасности. Я имею в виду, что большинство этих систем таковы по своей природе, что самые катастрофические ошибки в программе, какие только можно вообра- зить, потенциально не приводят к угрозе безопасности. Если ваша плюшевая игрушка од- нажды утром перестанет с вами говорить, то маловероятно, что это приведёт к серьезным, несущим угрозу жизни или собственности последствиям.
104 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы на то во что нас пытаются заставить поверить специалисты-компьютерщики, объектно-ориентированный подход не ведёт к значительному или даже явно из- меримому увеличению производительности, удобству обслуживания или надёж- ности в замкнутых недорогих встраиваемых системах. Это верно, на мой взгляд, даже тогда, когда объектно-ориентированные свойства языка используются по- следовательно и корректно, чего почти никогда не бывает. Очевидно, что и дру- гие люди разделяют мою точку зрения, что видно из нижеследующей цитаты: [...] повторно использовать и интегрировать независимо разработан- ные встраиваемые C++ компоненты сложно по многим причинам. Во- первых, стандарт языка C++ предусматривает определённую свободу для инструментально-зависимых и инструментально-определяемых свойств языка, так что тип integer может быть 32-битным на одном процессоре и 64-битным на другом. Во-вторых, стандарт C++ не полностью определя- ет поведение стандартных библиотек шаблонов (STL — Standard Template Library) или лежащих в его основе функций ОС, он также не стандарти- зирует набор функций, которые должна предоставлять ОС. В-третьих, и язык C++, и стандартные библиотеки громоздки, сложны и довольно тя- желы для понимания. В-четвертых, C++не обеспечивает автоматической «сборки мусора». Если объединение компонентов совместно использует ссылки на объекты между компонентами, то системный интегратор дол- жен определять, когда разделяемые объекты могут быть ликвидированы и какой компонент должен затребовать память. Типичный компонент C++ прячет в себе сотни неявных зависимостей от це- левого процессора, компилятора C++, ОС и стандартных библиотек. Допу- щения редко документируются, и большинство программистов на C++ не понимают, что правильность их кода зависит от предположений, которые вовсе не обязательно верны во всех средах выполнения программы. Ти- пичный программист на C++ просто тестирует и отлаживает код до тех пор, пока тот не начнет работать в среде выполнения, используемой в тестах. Кевин Нильсон, «Java играет похоронный марш по C++» (Kevin Nilsen, Java Sounds the Death Knell for C++, Electronic Design, 26 мая 2005 года). Оригинал статьи доступен по адресу www.elecdesign.com/Articles/ArticlelD/10274/10274.html. И как итог — если бы вы задали вопрос: «Какой язык программирования мне следует изучить?», я бы сказал, что важно действительно тщательно про- штудировать язык С и ознакомиться хотя бы с одним ассемблером. В сфере 8-битных приложений весьма желательно разбираться в ассемблере настоль-
3.8. Немного возмущений по поводу защищенных от копирования средств проектирования ■ 105 ко хорошо, насколько это возможно, даже несмотря на то, что большинство своих программ вы, вероятно, будете писать на С. При работе с такого рода системами вам почти всегда будет необходимо, по крайней мере, умение про- читать выполненный вашим компилятором перевод на ассемблер и понять, что он делает. Ошибки в выпускаемых в небольших количествах компилято- рах встречаются довольно часто. Вы должны уметь обнаружить их, сообщить об этом и обойти возникшие проблемы. Но даже более важно умение при не- обходимости вручную оптимизировать свой код. Вам, возможно, также при- дётся модифицировать код инициализации, предложенный компилятором, или писать его для некоторых приложений самостоятельно. Имея абсолютно нулевые знания ассемблера, работать действительно невозможно (несмотря на все те сказки, что рассказывают поставщики компиляторов). В то время как быть в определённой степени знакомым с ассемблерами не- скольких разных микроконтроллеров полезно (просто для того, чтобы знать некоторые из способов, которыми какие-то вещи могут быть сделаны на раз- ных чипах), то в вопросах трудоустройства влияние этих знаний обычно незна- чительно. Я бы абсолютно точно не озабочивался перечислением в своём ре- зюме 50 разных микроконтроллеров, потому что после работы с несколькими разными архитектурами изучение ассемблера для нового процессора займет лишь пару дней работы с техническим описанием. Конечно, если только дан- ный чип не абсолютно необычен и/или не адаптирован для программирования вручную (как VLIW-архитектура0). Если вы перечислили в своём резюме четы- ре дюжины разных семейств, то работодатели подумают, что, составляя его, вы собрали всё, что смогли вспомнить. Ограничьтесь описанием микроконтрол- леров, на которых вы действительно выполнили свои главные проекты. Пред- полагаемые работодатели хотят видеть ваши достижения, а не пустые слова. 3.8. Немного возмущений по поводу защищенных от копирования средств проектирования Вопрос о том, что в целом предпочтительнее использовать — коммерче- ские инструменты проектирования с закрытым исходным кодом или инстру- менты с открытым исходным кодом, — чрезвычайно запутан и является темой 1} Very Long Instruction Words — архитектура с командными словами очень большой длины; в такой команде объединено несколько обычных команд, которые выполняются параллельно разными функциональными блоками процессора для повышения быстродей- ствия. — Примеч. ред.
106 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы многочисленных споров. Так как я питаю надежду, что сейчас вы полностью поглощены чтением этой страницы и внимаете каждому моему слову, то вос- пользуюсь возможностью привить вам доктрины Единственной Истинной Религии. Предпосылка, лежащая в основе того, что я намереваюсь сказать, следую- щая. Программы во встраиваемых системах обычно живут очень долго. Как только в некий микроконтроллер и/или определённую внутреннюю про- граммную архитектуру инвестируются средства, то, начиная с этого момен- та, количество желаемых изменений обычно нарастает по экспоненте, и во многих случаях источником этих требований являются прямые запросы по- требителей. Кроме того, встраиваемые системы — это главным образом авто- номные системы с изолированным кодом. В огромном большинстве случаев пользователь никогда не будет добавлять код в вашу систему, модернизиро- вать ОС или взаимодействовать с микропроцессором не через входы и выхо- ды, которые вы предоставили при разработке, а каким-то иным путем. Более того, многие встраиваемые системы являются устройствами с неопределён- ным сроком службы. У них нет осязаемого фактора «крутости», исчерпание которого лишает устройство всякой ценности. Сравните компьютерную игру, которую ваши дети забросят, как только захотят очередную «классную штуку», с компьютерным модулем управления силовой передачей в вашем автомоби- ле, которая будет продолжать выполнять свою прозаическую работу, пока не попадет под пресс вместе с авто. Следствием этих фактов является то, что никто не касается кода встраи- ваемой системы долгое время между первоначальным выпуском и последу- ющей модификацией. Жизненный цикл продуктов в большинстве областей потребительской электроники составляет около двух лет. Поэтому возможна ситуация, когда вы выпускаете продукт, убираете исходный код, программ- ные и аппаратные средства разработки в нижний ящик стола и переходите к следующей задаче. А пару лет спустя к вам приходят из отдела маркетинга со словами, что они хотят каких-то модификаций, для того чтобы продукт лучше вписывался в производственную линейку товаров этого года. Если вы обречены на работу с защищенными от копирования средствами проектирования, то это обычное дело, когда обнаруживается, что у постав- ленного вам год назад нового компьютера нет требуемых портов для общения с защитным электронным ключом-заглушкой, которым снабжен ваш старый компилятор. Или, возможно, новая ОС, которую вас вынудили установить, запускает ПО компилятора в «песочнице» виртуальной машины, где оно не
3.8. Немного возмущений по поводу защищенных от копирования средств проектирования ■ 107 имеет достаточных прав доступа к аппаратным средствам, чтобы удовлетво- рить собственным защищающим от копирования требованиям. Возможно, вам просто нужен новый магический код авторизации для переустановки ПО на компьютер, а может оказаться, что ключ-заглушку изгрыз ваш пёс. В любом случае это именно тот момент, когда вы звоните поставщику компилятора, ко- торый или прекратил своё существование (в этом случае у вас чудесный выбор: либо двигаться на восточноевропейские склады за программой-взломщиком, либо покупать совершенно другой инструментарий), или говорит, что вы ра- ботаете с версией, которая слишком стара для настоящего времени (как вам не стыдно!). И, кстати, период бесплатной поддержки вашего компилятора, естественно, уже истёк. В подобных ситуациях от вас обычно потребуют покупки самой последней версии компилятора, поскольку нельзя ожидать, что поставщик будет исправ- лять в старых компиляторах все ошибки, имеющие отношение к защите от ко- пирования. Так что вам не только грозит расставание с большой пачкой денег, но и наслаждение переделкой вашей программы под новую и непроверенную версию компилятора. Если перекомпиляция старой программы проходит нор- мально, то первым делом следует перекомпилировать её без внесения моди- фикаций и сравнить полученный двоичный код с тем, что вы получали, когда делали этот проект в прошлом, чтобы удостовериться, что все настройки, пути и файлы сконфигурированы корректно. Провести подобную профилактиче- скую проверку на новом компиляторе обычно невозможно, поэтому вы даже не будете знать, успешно ли воспроизвели настройки среды проектирования. Это ведёт к дополнительным затратам времени на инженерные работы и про- ведение проверок для обеспечения качества — и всё исключительно из-за дей- ствий поставщика компилятора. Рядом со мной такого рода вещи происходят постоянно, и мне сложно понять, почему люди не выражают своё недовольство более громко. Если я покупаю лицензию ПО на XYZ и в лицензии не сказано явно, что моё право использовать его заканчивается через год0, тогда у меня должна быть возмож- ность работать с ним до тех пор, пока у меня есть пальцы, чтобы стучать по клавиатуре, и машина, обладающая достаточными ресурсами для работы. Я не должен лишаться возможности использовать ПО только из-за того, что беспо- 0 Такое ПО, ограниченное годовым контрактом на использование, конечно, существу- ет. Если кто-то пытается втянуть вас в подобную сделку, бегите от него с пронзительными воплями.
108 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы лезное во всех отношениях охранное аппаратное или программное устройство начало сбоить или устарело. Ниже приведены способы защиты от копирования и схемы лицензирова- ния от наиболее до наименее ненавистных, которые вы можете встретить в программных средствах проектирования встраиваемых систем: • Аппаратные схемы защиты от копирования, главным образом ключи- заглушки. Довольно сильно раздражает, когда такого рода удивительно назойливые и притягивающие проблемы системы защиты от копирова- ния прилагаются к ПО, для работы которого в любом случае требуются специальные аппаратные средства. • Схемы прямой идентификации, требующие установления непосред- ственной коммуникационной связи между вашим компьютером и ком- пьютером в офисе поставщика ПО всякий раз, когда вы запускаете про- грамму (и зачастую периодически, когда вы её используете). • Схемы «запрос-ответ», в которых при каждой инсталляции ПО генери- рует новый, случайный «запрос». Для получения нового кода «ответа» вам надо звонить или писать поставщику при каждой повторной инстал- ляции ПО — даже на том же самом компьютере. • Схемы инсталляции «запрос—ответ», в которых «запрос» фиксируется, основываясь на каком-нибудь аспекте аппаратных средств вашего ком- пьютера. Если вы будете переустанавливать ПО на ту же самую машину, то вам не понадобится вновь контактировать с поставщиком. Вам потре- буется новый ключ, если только изменилось «железо». • «Клейменое» ПО, которое требует ключевой файл, содержащий ваше имя и другую информацию в зашифрованном виде. Любые сделанные копии этого ПО работают корректно, но показывают на экране подроб- ную информацию о вас, так что все будут знать, где была сделана копия. • ПО с закрытым кодом, но без защиты — может инсталлироваться где угодно и в любое время. • ПО с открытым кодом. Здесь вы вольны выбирать, когда и где будете инсталлировать программу. При необходимости вы можете заново ском- поновать его под новую ОС. Из предыдущих разделов этой главы вы знаете, что я ярый сторонник ин- струментария с открытым кодом. Консервировать интеллектуальную соб- ственность внутри ПО, которое вы, возможно, не сможете запустить на вашем следующем ПК, просто бессмысленно. Инструменты с открытым кодом —
3.9. Пример 8-битного проекта с использованием AVRu бесплатного инструментария ■ 109 это идеал, поскольку вы можете не только помещать их в архив (и при необ- ходимости передавать копии вашим заказчикам), но также в будущем заново компоновать их под новые и чужеродные ОС. Конечно, в некоторых случаях ПО с открытым кодом просто не будет ра- ботать. Иногда вы будете вынуждены использовать существующие библиоте- ки программ в патентованных форматах, а иногда вам потребуются особые возможности по оптимизации, имеющиеся только в каком-нибудь коммер- ческом продукте. Бесплатные компиляторы не имеют большой финансовой поддержки, для них не существует бесплатных оценочных образцов, и их не так быстро модернизируют, как коммерческие продукты (хотя это не всегда означает, что они хуже по своим характеристикам). Когда вы устроитесь на работу и вам понадобится выбрать инструментарий для проектирования, вы прочитаете множество аргументов, защищающих как коммерческие, так и свободно распространяемые программные средства. Я настоятельно рекомендую заранее подумать о том времени, когда вам пона- добится заняться поддержкой ваших программ, созданных с использованием компилятора, который к тому времени будет переведен в разряд древних, и отдать предпочтение ПО с открытым кодом. Поставщики, использующие в своём инструментарии возмутительные технологии защиты от копирования, играют в игры, ставкой в которых являются ваши будущие доходы. 3.9. Пример 8-битного проекта с использованием AVR и бесплатного инструментария В этом разделе я в иллюстративных целях опишу относительно небольшой учебный проект на микроконтроллере из семейства AVR. Большая часть тек- ста этого раздела впервые была опубликована на сайте developerWorks фирмы IBM. Вы можете найти оригиналы статей и скачать исходный код, воспользо- вавшись ссылкой www.larwe.com/technical.html. Я выбрал этот проект, потому что он демонстрирует многое из того, над чем вам придётся поразмышлять при создании своих собственных работ. Я бы хотел начать с определения на уровне блок-схемы того, что эта система должна делать. Эта разработка предназначена для проекта роботизированной подводной лодки, называемой Е-2, и построена на базе сетевого устройства хранения данных (Network Attached Storage — NAS) под названием Киго Box,
ПО ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы использующего микропроцессор PowerPC. Kuro Box — японское изобретение. Это, по сути, маленький одноплатный компьютер, работающий под управле- нием Linux. Первоначально Kuro Box продавалось как NAS-устройство и называлось LinkStation. Однако устройство оказалось столь популярным для хакерских целей, что производитель сейчас продает Kuro Box (по сути, это Link Station без жесткого диска) как отдельный продукт. Название означает «ящичек хаке- ра», отражая свою целевую группу потребителей. Устройство Kuro Box построено на микропроцессоре МРС8241 (ядро РРСбОЗе) с рабочей частотой 200 МГц. В устройстве есть 4 МБ флэш-памяти с последовательным интерфейсом, 64 МБ SDRAM (синхронного динамическо- го ОЗУ), FastEthernet контроллер, порт USB 2.0 и интерфейс IDE. В Соеди- нённых Штатах Kuro Box можно было приобрести за 160 долл. через аме- риканскую компанию Revolution (www.revogear.com), сейчас его вытеснило устройство Kuro Box HG WR за 149 долл. За эти деньги вы покупаете устрой- ство, почти готовое к эксплуатации. Вам надо только установить стандарт- ный IDE жесткий диск (3.5 дюйма) и запустить поставляемую продавцом утилиту инсталляции Windows, которая производит разбивку жесткого дис- ка на логические диски, форматирование и загрузку диска содержимым че- рез telnet-соединение. Так как вы, возможно, не знакомы с этим прибором, на Рис. 3.5 приведе- на блок-схема Kuro Box. Обратите внимание, что на рисунке показана не вся периферия микропроцессора МРС8241; здесь показаны только блоки чипа, принимающие участие в работе интерфейсов, использование которых я опи- сал в этом тексте. В микроконтроллере МРС8241 среди прочего есть встроенный РС1-мост, контроллеры SDRAM и флэш-памяти и два последовательных порта. Первый последовательный порт подсоединён к Л — это порт отладочной консоли. Размах сигнала здесь от О В до +3.3 В, и сигнал инвертирован для совместимо- сти со схемами сдвига уровня напряжения до стандартных значений RS-232. Второй последовательный порт подключен к ведомому микроконтроллеру (AT90S2313). Этот микроконтроллер управляет последовательностью пода- чи питания и обрабатывает сигнал обратной связи с тахометра вентилятора, а также обеспечивает МРС8241 сторожевым таймером. Предустановленное ПО Kuro Box включает программу-демон, которая периодически сбрасывает сторожевой таймер. CN1 на материнской плате — это стандартный исполь-
3.9. Пример 8-битного проекта с использованием AVRu бесплатного инструментария ■ 111 зуемый в Atmel AVR ISP-порт на 6 выводов, который подключен к ведомому микроконтроллеру. D720101 - контроллер USB2.0 I Микроконтрол,- |лер-супервиз L_ „ ... Рис. 3.5. Блок-схема устройства Kuro Box. На плате также имеется обычный отладочный COP/JTAG-порт, хотя с меньшим числом линий по сравнению с поставляемым Buffalo. Для исполь- зования этого порта вам следует добавить последовательно к вводам/выводам резистор R67 номиналом 10 кОм и сборку из четырех резисторов по 1 кОм RA11. Наименее затратный способ использовать СОР-порт — через вигглер (wiggler), подсоединённый к параллельному порту вашего компьютера. Са- мый дешевый коммерческий продукт для доступа к встроенным отладочным функциям микроконтроллера МРС8241 — Macraigor Wiggler. В тексте я буду использовать множество акронимов, специфичных для про- екта Е-2. Они документированы на моём персональном веб-сайте www.larwe. com/sub/glossary.html, но мне бы хотелось, чтобы вы запомнили первые два акронима: VCM (Vehicle Control Module — модуль управления двигателем) и SCM (Science Control Module — модуль управления научными приборами). В данном случае SCM — это Kuro Box, a VCM — работающая в режиме реаль- ного времени маленькая плата, которую я описываю в этой главе. На Рис. 3.6 приведена блок-схема, показывающая систему как единое целое. По сути, VCM — это всё, что не находится внутри Kuro Box, за исключением систем энергопитания.
112 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы RS232I USBI Микрокон- троллер ATmega32 RS232 Модуль регистрации технических параметров Модуль регистрации научных данных Kuro Box Ethernet» Внешний хост для настройки до выполнения задачи и выгрузки данных после ее выполнения Рис. 3.6. Блок-схема роботизированной подводной лодки. На этом рисунке используется следующий цветовой код: хранилище дан- ных, : В специальной версии устройства, созданной мной для developerWorks, я использую блок из батарей ёмкостью 7 А-ч (а именно две батареи 12 В/7 А-ч Powersonic PS-1270) и панель солнечной батареи с номинальной выходной мощностью 36 Вт. Этот вариант отладочной системы с удобством разместился у меня дома на рабочем столе. По существу, это уменьшенная модель системы энергопитания подводной лодки Е-2. Думаю, было бы неудобно, если бы ря- дом с моим рабочим столом стояли кислотно-свинцовые аккумуляторы, веся- щие сотни фунтов!
3.9. Пример 8-битного проекта с использованием AVR и бесплатного инструментария ■ 113 Для тех, кому это действительно интересно, вот ещё некоторые подробно- сти о том, как эта технология применяется в моём проекте подводной лодки. Если вы не конструируете своё собственное транспортное средство, то можете пропустить следующие несколько разделов. Хотя аппаратная часть, которую вы здесь видите, очень похожа на систему управления в подводной лодке, есть одно важное архитектурное отличие. В подводной лодке выполняющее боль- шой объём работы «железо» (в настоящий момент одноплатный х86 компью- тер Advantech PCM-5820 на базе процессора AMD Geode) не решает навига- ционных задач. Фактически в дневные часы подводная лодка переводится в режим минимального потребления энергии отключением практически всех систем, чтобы батареи могли достичь максимально возможного уровня заряд- ки. Реальное задание выполняется ночью. Это рационально, поскольку при нахождении под водой, чтобы увидеть что-то, представляющее интерес, вам понадобится освещение вне зависимости от времени суток, и притом дневное время вы можете тратить лишь на пополнение запасов энергии. В результате блок-схема подводной лодки Е-2 слегка отличается от того, что вы видите в этом тексте. В неё входят те же самые блоки, но GPS-приёмник (Global Positioning System — глобальная система позиционирования) под- ключается непосредственно к ATmega32. Благодаря маленькой аппаратно- программной хитрости один универсальный последовательный приёмопере- датчик (UART) обслуживает как GPS, так и SCM. С концептуальной точки зрения другие серьёзные отличия состоят в том, что все программные петли обратной связи (например, управление глубиной погружения) замкнуты на микроконтроллер ATmega32, и к нему же непосредственно подсоединено устройство регистрации технических данных (EDL — Engineering Data Log). Устройство регистрации данных реализуется на стандартной SD или ММС карте, работающей в режиме SPI. Благодаря такому архитектурному решению мне не надо особо беспоко- иться о защите данных на стороне Linux (Kuro Box работает со стандартным выпуском Hard Hat Linux без специальных защитных расширений). При нор- мальном функционировании у работающего под Linux устройства Kuro Box просто нет прямого обмена информацией с внешним миром. Во время выпол- нения задания рабочие коммуникационные каналы устанавливаются только с блоком VCM, а они защищены настолько, насколько это необходимо. Обратите внимание, что в Е-2 есть ещё пара дополнительных функциональ- ных блоков, спроектированных для установления связи с подводной лодкой и помогающих обнаружить её в случае потери. В упомянутой серии статей ин-
114 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы формация о них не приводится. Эти модули будут со временем описаны под- робно на www.larwe.com в разделах, отведенных для публичной информации о Е-2. Один из модулей — буй аварийного восстановления (emergency recovery beacon), подобный акустическому бую° авиационного регистратора данных, а другой — промышленный спутниковый приёмник. С подводной лодкой Е-2 можно установить контакт и управлять ей, используя спутниковую службу ко- ротких сообщений (SMS — Short Message Service). Телеметрические данные могут передаваться через коммерческую спутниковую телефонную подсисте- му с регулируемой полосой пропускания. Достаточно отступлений, вернемся к нашей задаче и познакомимся с не- которыми проектными требованиями к плате. Многие необходимые для этого проекта исполнительные механизмы (электромагнитные клапаны, двигатели и т. д.) легко доступны с питанием от 24 В. Поэтому плату следует спроектиро- вать для работы от батарейного источника питания на 24 В. Отсюда вытекает первый интересный вопрос: как понизить 24 В, имеющиеся на шине питания, до необходимых микроконтроллеру 5 В? Будучи человеком довольно ленивым, я обычно предпринимаю обход- ной маневр и использую в подобных этому приложениях простой линейный регулятор. Но разница между 24 и 5 В слишком велика, применение линей- ного регулятора означало бы, что при относительно скромном токе нагрузки в 250 мА теряется около 5 Вт. Поэтому здесь обязательно следует использо- вать импульсный регулятор. И если вы посмотрите на схему, то увидите, что мной была использована очень дешевая микросхема импульсного регулятора МС32063А, схема включения которой в качестве понижающего преобразо- вателя была непосредственно срисована из её руководства по применению. С этой микросхемой не связано ничего особенного, так что если вы решите быстренько собрать макет, чтобы поэкспериментировать с кодом, о котором я здесь рассказываю, то спокойно используйте линейный стабилизатор типа 7805 или просто подайте питание на вашу плату от лабораторного источни- ка. Если вы используете стабилизатор 7805 при напряжении питания 24 В, то необходим солидный радиатор, причём микросхема должна быть в корпусе то-з. Выполнение шага 3 в упомянутых ранее целях требует практичного аппа- ратного интерфейса с соответствующим программным протоколом для обмена 1) Устройство, которое передает короткие звуковые сигналы через небольшие интерва- лы времени. — Примеч. ред.
3.9. Пример 8-битного проекта с использованием AVRu бесплатного инструментария ■ 115 информацией между VCM и SCM. Есть множество возможных вариантов, но мной был выбран асинхронный последовательный интерфейс с уровнями сигна- ла, совместимыми с RS-232. Прошу заметить, что это не было бы идеальным выбором для реальной интегрированной системы. Если бы вы делали её с нуля, используя, например, «голый» микропроцессор МРС8241, то правильно было бы просто использовать вместо этого какую-нибудь схему преобразования ло- гических уровней с 3.3 В в 5 В и подсоединяться непосредственно к одному из последовательных портов МРС8241. К сожалению, здесь нам приходится немного бороться с проектными решениями, заложенными в Kuro Box; один последовательный порт зарезервирован для вывода отладочной информации, а второй подключен к чипу супервизора/сторожевой схеме. Однако асинхронная последовательная связь хороша тем, что её можно «присобачить» почти на любую аппаратную платформу. В случае с Kuro Box вы можете или пробраться в него через отладочный последовательный порт, или подсоединить к микроконтроллеру стандартный преобразователь уров- ней сигнала и подключиться к Kuro Box через конвертер USB-COM. В данном случае мы следуем последнему способу, частично из-за того, что отладочный порт постоянно используется ядром, но главным образом потому, что в этом случае вы можете использовать то же самое аппаратное обеспече- ние VCM, чтобы общаться с машиной, работающей под Microsoft Windows, запуская Cygwin, или с обычным ПК, работающим под Linux, или почти с чем угодно, у чего есть последовательный порт. В этом проекте я использую адаптер USB-COM USA-19W Keyspan, потому что он оказался у меня под рукой. Есть множество других таких адаптеров, поддерживаемых Linux, а в стандартном ядре среди прочих (USB-COM адап- теров Belkin и FTDI) имеются и модули для адаптеров Keyspan. Единствен- ное, что вам, может быть, потребуется, — создать необходимые /dev/ttyUSB* узлы устройств. Кстати, отладочный последовательный порт Л — основной канал, соеди- няющий Kuro Box с внешним миром, так как этот порт по умолчанию являет- ся консолью для сообщений ядра и начального загрузчика, и он предоставляет самый простой способ для воздействия на ядро и отладки. По непонятным причинам этот порт не полностью реализован, и на него нет документации. Назначение выводов порта Л (отверстия просверлены с шагом 2.54 мм для стандартного однорядного разъёма, что довольно приятно, так как у боль-
116 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы шинства других разъёмов в устройстве шаг выводов равен 2 мм) показано в Табл. 3.4. Таблица 3.4. Назначение выводов порта Л Вывод 1 2 3 4 Назначение TxD (вывод данных из Kuro Box) RxD (ввод данных в Kuro Box) 3.3 В (питание из Kuro Box) Общий Как обычно для портов отладки на встраиваемых платах, уровни сигналов последовательного порта не соответствуют стандартным уровням RS232C, а равны уровням напряжения на вводах/выводах микропроцессора (3.3 В) и ин- вертированы по отношению к стандартным сигналам RS232C. Это означает, что для обеспечения интерфейса с нормальным ПК вам понадобится микро- схема инвертирующего сигнал последовательного приёмопередатчика, содер- жащая преобразователь питания с накачкой заряда. Это обычно приводит к необходимости быстренько что-то собрать на маленькой дешёвой макетной плате. Впрочем, есть более простой путь, также дающий вам комплексное реше- ние проблемы связи с компьютером. Большинство конвертеров USB-COM имеют в своём составе микроконтроллер, обеспечивающий USB интерфейс, и отдельный готовый чип-приёмопередатчик, осуществляющий преобразо- вание уровней сигналов. Как правило, напряжение на входах/выходах таких устройств равно 3.3 В, что согласуется с сигналами на линиях ввода/вывода микроконтроллера МРС8241. Для использования мной был выбран US В адаптер PalmConnect, изначаль- но предназначенный для подключения Palm III или mlOO к USB. На Рис. 3.7 показана печатная плата этого адаптера со стороны компонентов. Если у вас другой адаптер, то вы, разумеется, увидите другую плату и ми- кроконтроллер, но вероятно, что в качестве приёмопередатчика там будет установлена микросхема, очень близкая к ADM3311 компании Analog Devices, использованная в адаптере для Palm, если и не именно она. Первое, что вам следует сделать после того, как вы вытащили адаптер из корпуса, — проверить, что используемые внутри него логические уровни со- ставляют 3.3 В. Если логические уровни в адаптере составляют 5 В, то Kuro
3.9. Пример 8-битного проекта с использованием AVRu бесплатного инструментария ■ 117 Box не выйдет из строя благодаря токоограничивающим резисторам и способ- ности его линий ввода/вывода выдерживать напряжение 5 В, но, вероятно, ваш компьютер не будет получать никакую информацию. Чтобы узнать уро- вень напряжения внутренней логики, просто вставьте адаптер в USB-порт и подождите, пока он не будет определён компьютером. Затем воспользуйтесь мультиметром или осциллографом и измерьте напряжение на выводах пита- ния микросхемы приёмопередатчика — в случае ADM3311 это выводы 23 (об- щий) и 2 (питание). Рис. 3.7. Последовательный адаптер до модификации. Теперь надо выпаять чип приёмопередатчика. Я для этого наношу по ка- пельке припоя на все выводы на одной стороне чипа, затем вставляю лезвие тонкого скальпеля под корпус и, расплавив все капли паяльником, использую его как рычаг, чтобы приподнять эту сторону микросхемы. Затем повторяю данную операцию на другой стороне. Таким образом вы очень быстро выпа- яете микросхему из платы, только следите за тем, чтобы не оборвать каких- нибудь дорожек. Попрактикуйтесь, если необходимо, на каких-нибудь не- нужных платах. На Рйс. 3.8 показана плата после того, как приёмопередатчик был выпаян.
118 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы Рис. 3.8. Последовательный адаптер после удаления микросхемы. Далее надо определить, куда подать сигналы из Kuro Box. Чтобы сделать это, вам следует установить, какие части в приёмопередатчике ответственны за сигналы RxD и TxD, и подключиться к «другой» стороне этих частей. Для этого требуется проследить дорожки от выводов разъёма DB9 к контактным площадкам только что выпаянной вами микросхемы, а затем обратиться к техническим данным на чип приёмопередатчика и понять, где находятся эти «другие» стороны. Вывод 3 разъёма DB9 — это TxD, и в описываемом примере мы приходим к выводу 22 (T1OUT) приёмопередатчика. Соответствующий вход (T1IN) приё- мопередатчика выведен в данной микросхеме на контакт 7. Поэтому мы уста- навливаем проволочную перемычку, соединяющую вывод 2 (RxD) разъёма Л устройства Kuro Box и контактную площадку 7, на том месте, где раньше на- ходился приёмопередатчик. Вспомните, что здесь мы, в сущности, реализуем нуль-модемную схему, поэтому соединяем TxD с RxD и наоборот. Аналогично вывод 2 разъёма DB9 — это RxD, и в описываемом примере мы приходим к выводу 19 (Rl IN) чипа ADM3311. Ему соответствует выходной контакт 10 (R1OUT), поэтому мы соединяем проволочной перемычкой вы- вод 1 (TxD) отладочного порта Kuro Box и контактную площадку 10 посадоч- ного места приёмопередатчика.
3.9. Пример 8-битного проекта с использованием AVRu бесплатного инструментария ■ 119 И наконец, соединяем вывод 4 (GND) отладочного порта с любой удобной точкой заземления в адаптере USB-COM. Питание 3.3 В от Kuro Box подавать не надо, поэтому соответствующий вывод никуда не присоединяем. На Рис. 3.9 показан примерный способ прокладки кабеля. Подсоедините его со стороны пайки основной платы Kuro Box, используйте стандартный плоский кабель и выведите его через вытяжное отверстие вентилятора (ко- нечно, не стоит выводить его через сам вентилятор!). Между вентилятором и задней фальшпанелью есть зазор, где достаточно места для вывода кабеля та- ким образом, чтобы он не касался лопастей. Рис. 3.9. Прокладка кабеля последовательного интерфейса. На Рис. 3.10 приведён крупный план доработанной платы адаптера PalmConnect. Для установки этих проводков необходим пинцет. Также заметь- те, что я сохранил микросхему приёмопередатчика, приклеив её на липкую ленту внутрь пластикового корпуса (чёрный бугорок, который вы можете рас- смотреть на рисунке).
120 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы Рис. 3.10. Переделанная плата последовательного адаптера. Обратите внимание, что я оставил на плате разъём DB9, хотя он больше ни к чему не присоединён. Причина этого в том, что я всунул плату обратно в старый корпус, а чтобы удержать его половинки вместе, плотно обмотал кор- пус изолентой. Разъём DB9 действует как прижим для плоского кабеля и не позволяет оторвать его, что видно из Рис. 3.11. Есть ещё одна вещь, которую вам необходимо сделать. Как говорилось ранее, интерфейс позволит вам принимать сообщения ядра, но не позволит ничего передавать. В линии приёма имеется включаемый последовательно резистор (R76), который в компании Buffalo по какой-то причине решили не устанавливать на печатную плату. Компания Buffalo в другой линии (R75) использует резистор номиналом 10 кОм, поэтому для R76 я выбрал резистор такого же номинала, и он работает очень хорошо. Типоразмер этого резисто- ра 0603. Вам следует выпаять такой резистор из какой-нибудь старой ненуж- ной платы, если только в вашей лаборатории не хранятся бобины с SMD- компонентами.
3.9. Пример 8-битного проекта с использованием AVR и бесплатного инструментария ■ 121 Рис. 3.11. Вновь собранный последовательный адаптер. На Рис. 3.12 представлена фотография части платы Kuro Box со стороны компонентов вблизи разъёма Л, показывающая место, куда вы должны уста- новить этот резистор (помечено надписью R76). Рис. 3.12. Место установки резистора. Теперь вы готовы к работе. Включите вашу терминальную программу, ис- пользуя следующие параметры: скорость 57600 бод, 8 бит данных без контро- ля четности, 1 столовый бит без управления потоком. Вы должны видеть все
122 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы сообщения ядра, когда осуществляется загрузка или отключение устройства (а также при возникновении таких событий, как «горячее» подключение к USB). С этим портом связан постоянный процесс, поэтому вы можете входить локально. Порт может также использоваться для обмена информацией обще- го назначения, он доступен как узел /dev/ttySO. Вернёмся к проекту нашей схемы. В качестве ядра модуля VCM мной был выбран микроконтроллер ATmega32 производства компании Atmel, посколь- ку его программирование не вызывает у меня затруднений, и он может ра- ботать при напряжении 5 В. Следовательно, чип обеспечивает простой ин- терфейс со всей силовой электроникой (тогда как использование в подобных проектах, работающих от 3.3 В микроконтроллеров, может оказаться немного утомительным делом) и работает в широком температурном диапазоне. Для него также имеются очень хорошие бесплатные или дешевые аппаратные и программные инструменты разработки, и большинство из них работает под Linux. Почти всё это, за исключением фразы о рабочем напряжении, столь же верно и для микроконтроллеров серии MSP430. Если вы лучше знакомы с этими микроконтроллерами, то сможете без особых затруднений адаптиро- вать под них 75% приведённых здесь схемы и кода. На Рис. 3.13 приведена принципиальная электрическая схема устройства, с которой мы и будем работать. В ATmega32 имеется богатый набор периферии, полезной для такого рода проектов. Но как только вы начинаете использовать эти периферийные моду- ли, количество доступных линий ввода/вывода общего назначения неизбеж- но уменьшается. Поэтому, чтобы получить максимум удовольствия от широты спектра пери- ферии микроконтроллера ATmega32, вам надо разделить потребности в линиях ввода/вывода по категориям. Сначала следует выделить те периферийные бло- ки, с помощью которых можно выполнить (или ускорить выполнение) нуж- ных функций. Затем зарезервировать выводы, связанные с чисто программ- ной реализацией функций, для которых существуют временные ограничения. Например, приёмную часть радиоканала, при реализации которого требуется соблюдать жесткие временные ограничения, было бы лучше всего подключить непосредственно к выводу микроконтроллера (лучше всего к выводу, измене- ние уровня входного сигнала на котором может вызывать прерывание). Затем, чтобы преодолеть дефицит линий ввода/вывода микроконтроллера, понадобится разработать устройства расширения. Вы можете добиться этого многими способами. Вот три основных метода:
3.9. Пример 8-битного проекта с использованием AVR и бесплатного инструментария ■ 123 • Использовать внешние защёлки (например, 74НС373) для удержания выходных данных и буферы с тремя состояниями (например, 74НС244) для сканирования входных линий. • Использовать для управления внешними расширителями встроенный в контроллер ATmega32 блок интерфейса SPI. • Использовать для управления внешними расширителями встроенный 12С-модуль (TWI-модуль). У каждого из методов есть явные достоинства и недостатки, которые стоит рассмотреть. Использование внешней логики — самый простой путь. Он также предпо- лагает самые низкие возможные задержки. Сложность, однако, в том, что при его реализации потребляется относительно большое число линий ввода/вы- вода самого микроконтроллера. К примеру, если вы захотели добавить в ваше устройство 24 дополнительных линии ввода/вывода, то могли бы поставить три микросхемы 74НС373 и три буфера 74НС244. Входы защёлок 74НС373 и выходы буферов 74НС244 сформировали бы общую шину данных, подклю- ченную к восьми выводам микроконтроллера. Но вам также понадобится линия выдачи строба при операциях чтения/записи и, по меньшей мере, три адресных линии, т. е. в результате требуется 12 линий ввода/вывода микро- контроллера. При использовании метода простой внешней логики также невозможно обеспечить прерывание по изменению уровня входного сигнала, что может быть важно в некоторых приложениях. Конечно, вы могли бы различными способами сконструировать внешние интерфейсы, используя сложную логи- ку, но такое проектирование и отладка чреваты головной болью, и часто рабо- та по разводке печатной платы не будет простой. Расширители линий ввода/вывода, подключаемые по последовательно- му интерфейсу, гораздо эффективнее используют линии микроконтроллера. Такие микросхемы обладают способностью генерировать прерывания по из- менению уровня входного сигнала, а также обычно являются программируе- мыми устройствами, поэтому вы можете назначать линии ввода и вывода в со- ответствии с вашими потребностями, производя изменения программно, без необходимости заниматься физической разводкой. Принимая во внимание все вышеизложенное, можно сказать, что последовательное расширение — это тот путь, по которому стоит идти.
124 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы GND Изолированные входы (С) COPYRK3H1 PROJECT REVISION DRAWN BY REV1EWEOBY 2006 LEWIN A R W EDWARDS HTTP /ЛЛЛЛ/W 2WS COM/ 399 VEHICLE CONTROL MODULE PUBLIC FEB 26 2006 LARWE LARWE PUBLIC PUBLIC PUBLIC GND Интерфейс шагового двигателя GND C24 S 100л oVOUT о Jj МРХНЙ4С a ЮАСОТ1 C26 „ "47p * Л PRSAAI GND GND C25 100n GND Датчики давления GND GJD ЦПУ и согласующие логические схемы
3.9. Пример 8-битного проекта с использованием AVR и бесплатного инструментария ■ 125 ADXL322JCP-HS Ж GND Датчик положения GND С5 S tOOn GND НУП 12 VCC QUO T1IN TIOtJT T^N ТЛО1Л R1OUT RUN MOW R^IN Интерфейс RS 232 Датчики температуры GND GND Рис. 3.13. Схема нашего приложения.
126 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы Двумя самыми популярными синхронными последовательными интер- фейсами (с низкой скоростью передачи) для обмена информацией в пределах платы являются I2C (Inter-IC Communication — обмен информацией между микросхемами) и SPI (Serial Peripheral Interface — последовательный интер- фейс периферийных устройств). Однако сейчас в ходу приводящая к неболь- шой путанице терминология. Фирма Atmel использует для своего 12С интер- фейса название TWI (Two-Wire Interface — двухпроводной интерфейс). Многие другие производители называют 12С интерфейс 2-Wire, a SPI — З-Wire. Причи- на тому — права на интеллектуальную собственность. 12С — это торговая мар- ка, зарегистрированная фирмой Philips, a SPI — торговая марка, зарегистриро- ванная компанией Motorola. Всякий, кто реализует совместимый интерфейс без выплаты лицензионных отчислений, вынужден применять маскировку в виде альтернативного названия. Время от времени вы будете сталкиваться с действительно патентованной последовательной топологией, но это далеко не обыденный случай. SPI обычно описывается в светской литературе как трехпроводной интер- фейс, но в любой системе, имеющей более одного периферийного устройства, такие описания только напускают тумана. В действительности требуется че- тыре линии: тактового сигнала, входа данных, выхода данных и выбора пе- риферийного устройства. Вся SPI-периферия подключается к общим линиям тактового сигнала, входа и выхода данных, но для каждого периферийного устройства выделяется своя собственная линия выбора. Названия двух ли- ний данных MOSI и MISO — акронимы соответственно от Master Out Slave In (данные из ведущего устройства в ведомое) и Master In Slave Out (данные из ведомого устройства в ведущее). Для обращения к SPI-устройству вы уста- навливаете соответствующий уровень на его выводе _SS (Slave Select — выбор ведомого) и начинаете потактовую передачу данных с вывода MOSI ведущего микроконтроллера. По тому же самому тактовому сигналу происходит пере- дача данных из ведомого периферийного устройства на вывод MISO ведуще- го, так что через восемь тактов вы одновременно и передадите, и получите байт. Транзакция оканчивается, когда вы освобождаете вывод _SS. Интерфейс SPI очень прост в использовании, особенно если надо реали- зовать его чисто программным путем. Но требование индивидуальных линий _SS означает, что вам понадобится добавить дополнительную связь (и ис- пользовать дополнительную линию ввода/вывода) для каждого периферий- ного устройства, т. е. это не истинно «шинная» архитектура. Следовательно,
3.9. Пример 8-битного проекта с использованием AVR и бесплатного инструментария ■ 127 разводка сложных шин между SPI-устройствами оказывается немного более сложной задачей. Интерфейс 12С преодолевает это ограничение и позволяет вам добавлять на шину дополнительные блоки периферии простым их подключением па- раллельно существующим устройствам. Это достигается за счёт некоторого усложнения реализации. 12С — двухпроводной интерфейс, сигналы именуют- ся SCL (Serial CLock — тактовый сигнал) и SDA (Serial DAta — последователь- ные данные). Периферийные 12С-устройства имеют 7-битный адрес. Обычно некоторая часть адреса является фиксированной для данного устройства, а оставшиеся биты конфигурируются посредством резисторной обвязки или за- писи конфигурации в EEPROM. Протокол, к сожалению, довольно запутан- ный, со множеством имеющих свою интерпретацию состояний и переходов между состояниями. К счастью для нас, практически вся необходимая магия реализуется аппаратно внутри TWI-модуля микроконтроллера ATmega32. Это тот случай аппаратной поддержки, когда вы действительно затрачиваете го- раздо меньше времени на проектирование и отладку. Все, что вам нужно сде- лать, — добавить два подтягивающих резистора, выбранных в соответствии с ёмкостной нагрузкой вашей 12С-шины и желаемой максимальной скоростью обмена данными, и соединить параллельно все ваши устройства. Принципиальный недостаток 12С заключается в сложности осуществления передачи на большое расстояние в условиях «зашумлённости». Поскольку ли- ния данных (а в системах с несколькими ведущими также и линия тактового сигнала) является двунаправленной, вы не можете улучшить сигнал, исполь- зуя простой буфер. Интерфейс 12С был разработан для передачи информации в пределах одной платы или узла, и лучше всего он работает именно здесь. Данный интерфейс широко используется в телевизорах, материнских платах компьютеров, аккумуляторах лэптопов (и других типах «интеллектуальных» батарей) и другой бытовой аппаратуре. У меня есть скрытый мотив использования 12С-интерфейса, а именно огромное разнообразие периферийных устройств, предполагающих подклю- чение к шине 12С. Практически любые датчики, о которых вы могли бы поду- мать как о представляющих интерес для встраиваемых приложений, имеются в продаже в вариантах, поддерживающих интерфейс 12С. Например, датчики температуры, давления, контроллеры зарядки аккумуляторов, управляющие интерфейсы формирователей изображения, формирователи экранных меню в телевизорах и даже такие сложные узлы, как магнитные компасы, гироско-
128 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы пы и GPS-приёмники. Хотя некоторые из этих датчиков доступны и с SPI- интерфейсом, всё же шина 12С пользуется более широкой поддержкой. Как вы видите, согласно схеме для использования мной был выбран рас- ширитель линий ввода/вывода МСР23008 компании Microchip. Этот чип под- держивает три стандартных скорости передачи данных по шине 12С: 100 кГц, 400 кГц и 1.7 МГц. Обратите внимание, что существуют и другие микросхемы аналогичного назначения, такие, как чипы фирмы Philips серии РСА95хх, ко- торые при примерно той же стоимости, что и МСР23008, обеспечивают боль- шее количество линий. В данном демонстрационном проекте я использую микросхему компании Microchip, поскольку она поставляется в двухрядном DIP-корпусе, что упрощает макетирование. Чипы серии РСА95хх выпускают- ся только в корпусах SOIC и (T)SSOP. Впрочем, переход на одну из микросхем с большим числом выводов является тривиальной задачей, как в смысле «же- леза», так и кода. Выходы МСР23008 подключаются ко входам драйвера ULN2803A (матрица из восьми транзисторных ключей, соединённых по схеме Дарлингтона), кото- рый я использую для управления двумя четырёхфазными шаговыми двигате- лями. Превосходный материал для предварительного знакомства с шаговыми двигателями можно найти на doc.ic.ac.uk/~ih/doc/stepper/. Там же имеются некоторые полезные советы о том, как идентифицировать шаговые двигате- ли, извлеченные из компьютерных периферийных устройств. Кстати, я со- брал огромную коллекцию шаговых двигателей, просто забирая выставляе- мые моими соседями на тротуар ненужные струйные принтеры и планшетные сканеры в «день хлама». Поскольку сейчас дешевле купить новый принтер с картриджами со свежими чернилами, чем покупать набор картриджей для за- мены, за неделю я обычно нахожу два-три выброшенных принтера, каждый из которых — кладезь двигателей и механических частей, пригодных для раз- нообразных экспериментов. Для более формальных проектов вы можете купить у многих поставщиков новые, снабжённые документацией шаговые двигатели. Интернет-магазин eBay также относится к богатым источникам новых шаговых двигателей, на которые обычно предоставляется документация, хотя здесь вам часто прихо- дится покупать по несколько штук за раз. Обратите внимание, что микроконтроллер ATmega32 позволяет вам вы- полнять операции обмена по шине 12С асинхронно, используя прерывания (хотя написание подпрограммы обслуживания прерываний, учитывающей
3.9. Пример 8-битного проекта с использованием AVRu бесплатного инструментария ■ 129 все нюансы, может оказаться довольно сложным делом, если вы используете несколько разных периферийных устройств, имеющих радикально отличаю- щиеся протоколы). Представляемый мной здесь код использует более простой метод, в котором задействован опрос. Обратите внимание, что в этом коде интерфейса 12С не предусмотрены повторные вызовы! Если вы планируете пользоваться модулем TWI как из подпрограммы обработки прерываний, так и из главной программы, то вам следует возвести подходящие барьеры, чтобы исключить попытки подпрограммы обработки прерываний воспользоваться интерфейсом 12С в те моменты, когда с ним взаимодействует главная програм- ма. Созданное мной ПО тщательно спроектировано на предмет недопущения такого рода конкуренции. Рассмотрим, что блок VCM говорит по последовательной связи блоку SCM (см. Табл. 3.5). Таблица 3.5. Формат пакета данных 12С Название STRT CSUM TXSN IRSN CMND BLEN BODY Размер Байт Байт Байт Байт Байт Байт Переменный Описание Начальный символ, Т Контрольная сумма без знака всех байтов в пакете от CSUM+1 до конца BODY (или все байты, за исключением STRT и CSUM) Порядковый номер передачи (см. далее) "В ответ на (In Response To)" порядковый номер (см. далее) Идентификатор команды или данных Число байтов в BODY или ноль, если BODY отсутствует Дополнительные данные, если требуются Каждое оконечное устройство для начала буферизации данных ожидает символа Т. Пакет считается полным после получения требуемого числа бай- тов BODY. Байты, не поместившиеся в буфер последовательно принимаемых данных, отбрасываются. Поскольку стартовый символ может появиться сре- ди реальных передаваемых данных, то для проверки того, что полученный блок данных действительно является полным пакетом, используется поле CSUM. Но что такое «порядковые номера», упомянутые мной? Они являются сред- ством идентификации определённых пар «вопрос—ответ» в потоке передавае- мых данных, а также средством обнаружения выпавших пакетов. При подаче питания и модуль VCM, и Kuro Box инициализируют свои внутренние счёт-
130 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы чики порядковых номеров единицей (0 — зарезервированное значение). Ког- да одно оконечное устройство на линии хочет послать пакет, оно записывает в поле TXSN текущее значение порядкового номера, а затем инкрементирует счётчик порядковых номеров (если происходит переполнение счётчика, то он сбрасывается не в 0, а в 1). Если посылаемый пакет запрашивает ответ, то, отве- чая, абонент помещает в поле IRSN значение TXSN из того пакета, на который он отвечает. У «изначального» пакета или пакета, который не является ответом на запрос абонента на другом конце линии, в поле IRSN записан 0. Эта очень простая система позволяет абоненту и вести учёт запросов, ожи- дающих данных, и отслеживать, к каким выставленным запросам какие отве- ты относятся (а также, при необходимости, реализовывать тайм-ауты и снова отправлять пакеты, на которые ответ просто не пришёл). Это очень легко иллюстрируется примером. Предположим, вы определили, что команда #99 означает «Получить текущую ориентацию подводной лодки», а команда #100 — «Получить текущие координаты от GPS». Далее, предпо- ложим, что текущий порядковый номер в модуле VCM был равен 56, а в Киго Box — 80. И, скажем, Киго Box желает узнать текущие положение и координа- ты лодки настолько быстро, насколько это возможно. Киго Box мог бы быстро послать друг за другом следующие пакеты: • Пакет с CMND = 100 (получить координаты от GPS), TXSN = 80, IRSN = 0, без BODY. • Пакет с CMND = 99 (получить ориентацию), TXSN = 81, IRSN = 0, без BODY. На получение координат от GPS модулю VCM может понадобиться какое- то время, поэтому данные об ориентации вполне могут оказаться готовы к передаче раньше, чем данные о координатах. Если предположить, что именно такой сценарий имеет место, то VCM ответил бы следующим образом: • Пакет с CMND = 99 (получить ориентацию), TXSN = 56, IRSN = 81 и данные о положении в BODY. Заметьте, что не равное нулю поле IRSN явным образом указывает, что это ответ, а не запрос. • (Позднее, когда появляются данные GPS.) Пакет с CMND = 100 (по- лучить координаты), TXSN = 57, IRSN = 80 и данные о координатах в BODY Если по какой-то причине модуль VCM не ответил одним из этих пакетов, то Киго Box может сделать запись о том, какие порядковые номера выпали, и по истечении некоторого времени вновь повторить запрос. Обратите внима-
3.9. Пример 8-битного проекта с использованием AVRu бесплатного инструментария ■ 131 ние, что работоспособность этой системы нарушается, если происходит сброс счётчика порядковых номеров при переполнении с последующим возвратом к порядковому номеру, идентичному номеру ранее выставленного запроса. По этой причине ваш код установки периода времени для выдачи повторного за- проса должен также срабатывать в такой ситуации. Прежде чем переходить к работе с программой, вам следует понять, что она делает и каким образом должно быть выполнено подсоединение шагово- го двигателя (двигателей). На страничке, ссылка на которую была упомянута мной ранее, подробно описываются конструкция шагового двигателя (син- хронный двигатель постоянного тока) и способы управления им. А вот суть приводимого там материала в упрощенном виде. Шаговый двигатель состоит из фиксированных катушек и ротора, выполненного из постоянного магнита. У двигателей, выбранных мной для использования с модулем VCM, имеется четыре обмотки (фазы). Один конец каждой обмотки соединён с общим про- водом, а другой выведен наружу (общий провод также выведен наружу). При возбуждении заданной фазы она проворачивает ротор до определённого по- ложения. Четыре фазы физически расположены таким образом, что если вы будете возбуждать их в повторяющейся последовательности (1, 2, 3, 4, 1, 2, 3, 4, 1,...), то ротор двигателя будет непрерывно поворачиваться в заданном на- правлении. Точки подключения шаговых двигателей на плате модуля VCM обозначе- ны метками SAP1-SAP4 (Stepper A Phase I through 4 — шаговый двигатель А, фазы 1-4) и SBP1-SBP4 (Stepper В Phase I through 4 — шаговый двигатель В, фазы 1-4). Вам следует подсоединить выходы фаз к соответствующим лини- ям SxPx, а общий провод (провода) вашего двигателя (двигателей) — к шине +24 В. В модуле VCM для подключения к этим сигналам вне платы я исполь- зую контактную группу на 9 выводов. Обратите внимание на резисторы, включенные последовательно в цепи управления шаговыми двигателями. Вставленные мной резисторы нулево- го сопротивления — это исключительно указатели места установки. Вместо них вам следует установить подходящие токоограничивающие резисторы, выбранные в зависимости от напряжения управления, активного сопротив- ления обмоток шагового двигателя и указанного номинального тока в об- мотках. Данная программа и «железо» спроектированы так, чтобы обеспечить очень простое управление двумя четырехфазными униполярными шаговыми
132 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы двигателями А и В. Команды на осуществление очередного шага поступают от реализованного программно таймера с частотой 100 Гц. Это умеренная ско- рость для списанных в утиль шаговых двигателей, и с моей стороны она была выбрана главным образом из соображений надёжности. Впрочем, аппаратная часть способна обеспечить значительно более высокие скорости. При жела- нии увеличить скорость вам следует задуматься над следующими вопросами: • Не углубляясь в подробную механику этого явления, отметим, что ша- говый двигатель не может стартовать с нуля и мгновенно заработать на максимально допустимой частоте, приведённой в техническом описа- нии. Если вы намереваетесь выжать всё из имеющихся у вас двигате- лей, вам понадобится реализовать профили ускорения. Говоря кратко, это означает, что если вам надо изменить скорость вращения двигателя, то вместо простого резкого («прыжком») перехода на новый уровень сле- дует плавно изменять скорость до необходимого значения. Профили ускорения должны быть откалиброваны для заданного двигателя и пере- мещаемой им нагрузки. • Когда вы увеличиваете скорость следования шагов, момент на валу уменьшается. Искусно спроектированная аппаратная часть обязательно «выжимает» максимальные параметры из заданного двигателя. Конкретно этот проект никоим образом не приближается к максимальным параметрам. Например, у вас достаточно пространства для маневра в части увеличения частоты следования шагов. Обратившись к файлу stepper.c, вы увидите, что программа следит за аб- солютным положением ротора каждого шагового двигателя, осуществляя проверку на каждом интервале совершения шагов. Если положение, предпи- сываемое модулем Kuro Box, не совпадает с текущей позицией, то осущест- вляется поворот ротора соответствующего двигателя вперёд или назад. ПО по- следовательного интерфейса ожидает пакетов «перейти в ...» и обновляет со- ответствующие значения. Программа модуля VCM предполагает, что роторы каждого двигателя после подачи питания находятся в положении своего абсо- лютного нуля. Нахождение нулевой точки обычно осуществляется с помощью введения аппаратного детектора нулевой позиции, устанавливаемого на валу двигателя (или на механизме, который он приводит в движение). Например, в дисководах для гибких магнитных дисков в качестве датчика нулевого трека используется оптический прерыватель или (в совсем старых приводах) микро- переключатель, который нажимается головкой, когда она оказывается на ну- левом треке.
3.9. Пример 8-битного проекта с использованием AVRu бесплатного инструментария ■ 133 В директории vcm_399 есть два типа пакетов (CMD_STEP_A и CMD_ STEP_B, определены в vcmpacket.h), поддерживаемые ПО модуля VCM. Если вы скомпилируете демонстрационную программу в директории scmd, то уви- дите, что Kuro Box выводит на печать статусную информацию из модуля VCM и один раз после каждых четырех статусных пакетов посылает ему команды перевести оба шаговых двигателя в случайные позиции. Пожалуйста, заметь- те, что код на стороне блока Kuro Box неряшлив, потому что написан на ско- рую руку. Это пробная программка, так как в данном проекте фокус внимания перенесен на ПО модуля VCM. Ниже приведён образец выходных данных из программы scmd: root@KURO-BOX:/mnt/share/article8/scmd# ./scmd IBM developerWorks Kuro Box to VCM Demo Applet #2-Stepper Demo Waiting for VCM to start sending... Rx packet (TXSN 0x01, BLEN 0x05)-MTIME 0x000005b8, FLAGS1 0x00 Rx packet (TXSN 0x02, BLEN 0x05)-MTIME 0x00000b70, FLAGS1 0x00 Rx packet (TXSN 0x03, BLEN 0x05)-MTIME 0x00001128, FLAGS1 0x00 Rx packet (TXSN 0x04, BLEN 0x05)-MTIME 0x000016e0, FLAGS1 0x00 Tx 2 packets: CMD_STEP_A->00000167, CMD_STEP_B->FFFFFF97 Rx packet (TXSN 0x05, BLEN 0x05)-MTIME 0x00001c98, FLAGS1 0x00 Rx packet (TXSN 0x06, BLEN 0x05)-MTIME 0x00002250, FLAGS1 0x00 Rx packet (TXSN 0x07, BLEN 0x05)-MTIME 0x00002808, FLAGS1 0x00 Rx packet (TXSN 0x08, BLEN 0x05)-MTIME 0x00002dcP, FLAGS1 0x00 Tx 2 packets: CMD_STEP_A->FFFFFFAF, CMD_STEP_B->0000004A Rx packet (TXSN 0x09, BLEN 0x05)-MTIME 0x00003378, FLAGS1 0x01 Rx packet (TXSN OxOa, BLEN 0x05)-MTIME 0x00003930, FLAGS1 0x00 Rx packet (TXSN OxOb, BLEN 0x05)-MTIME 0x00003ee8, FLAGS1 0x00 Rx packet (TXSN 0x0c, BLEN 0x05)-MTIME 0x000044a0, FLAGSl 0x00 Tx 2 packets: CMD_STEP_A->FFFFFED7, CMD_STEP_B->FFFFFF46 Rx packet (TXSN OxOd, BLEN 0x05)-MTIME 0x00004a58, FLAGSl 0x00 Rx packet (TXSN OxOe, BLEN 0x05)-MTIME 0x00005010, FLAGSl 0x00 Rx packet (TXSN OxOf, BLEN 0x05)-MTIME 0x000055c8, FLAGSl 0x00 Rx packet (TXSN 0x10, BLEN 0x05)-MTIME 0x00005b80, FLAGSl 0x00 Tx 2 packets: CMD_STEP_A->FFFFFE0E, CMD_STEP_B->000001E3 Rx packet (TXSN 0x11, BLEN 0x05)-MTIME 0x00006138, FLAGSl 0x02 Rx packet (TXSN 0x12, BLEN 0x05)-MTIME 0x000066f0, FLAGSl 0x00 Rx packet (TXSN 0x13, BLEN 0x05)-MTIME 0x00006ca8, FLAGSl 0x00 Заметьте, что модуль VCM каждый раз отправляет статусную информа- цию, сообщая Kuro Box, занят ли он переводом двигателей в новые позиции. Эта информация содержится в FLAGSl в пакете CMD_STATUS__REPORT. Установленный нулевой бит FLAGSl означает, что во время формирования
134 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы статусного пакета осуществлялся перевод шагового двигателя А. Аналогично установленный первый бит означает, что осуществлялся перевод шагового двигателя В. Итак, теперь у вас есть почти всё для управления рулями глубины и направ- ления. Но чтобы от устройства была польза, ему также нужны датчики. Мы начнем со скромнейшего из датчиков — простого переключателя. Воз- можно, вам понадобится пара этих переключателей, чтобы ограничить ход руля. Или, если вы делаете что-то иное, а не роботизированную подводную лодку, вам захочется установить кнопки на переднюю панель (хотя к PowerPC их можно приладить и лучшими способами). Переключатели настолько про- сты, что фактически я обсуждаю их здесь по той единственной причине, что от них я могу плавно перейти к более сложной 12С-конфигурации, чем схе- ма, с которой вы имели дело ранее. Я предполагаю, что состояние этих пере- ключателей нужно будет считывать относительно редко (скажем, с частотой порядка 50—60 Гц). С такой скоростью считывания можно без проблем спра- виться, подключив переключатели к 12С-расширителю портов ввода/вывода. Однако все линии расширителя ушли у нас на шаговые двигатели. Каким об- разом можно добавить другой блок вводов/выводов? К счастью, всё, что вам нужно сделать, — подключить очередную микро- схему МСР23008 к шине 12С. У микросхемы 7-битный 12С адрес, четыре бита этого адреса фиксированы, а оставшиеся три могут быть сконфигурированы посредством внешних подтягивающих резисторов, подключенных к линиям А0...А2, что позволяет вам подключать без каких-либо сложностей к одной шине 12С до восьми чипов МСР23008. Это, кстати, весьма распространенный способ устройства 12С-периферии, по экономическим причинам производи- тели очень редко выводят наружу больше нескольких адресных линий. Рас- ширитель, к которому подключены шаговые двигатели, располагается по ну- левому адресу (его полный двоичный адресный байт 01000000, где младший бит фактически является флагом чтения/записи). Мы предоставим второму расширителю адрес 1 (полный двоичный адресный байт этого второго чипа 01000010). Программа, записанная в файле i2c.c, обеспечивает трансляцию логического адреса (0...7) в физический адресный байт. Чтобы расставить все точки над i: если вы взглянете на то, как я сканирую эти переключатели, то увидите довольно существенное упрощение в моём ал- горитме борьбы с дребезгом контактов. Я просто осуществляю сканирование с периодически повторяющимся интервалом и смотрю, изменилось ли состо-
3.9. Пример 8-битного проекта с использованием AVRu бесплатного инструментария ■ 135 яние на входе. Если изменение есть, то новое значение остается в состоянии ожидания вплоть до следующего интервала сканирования. В этот раз, если из- менение в состоянии сохранилось, новое значение защёлкивается в статусном буфере. Это не очень прогрессивный антидребезговый алгоритм, но в услови- ях лаборатории он вполне адекватно справляется со своей задачей (по край- ней мере, если поведение переключателей не выходит за рамки разумного). Если вам интересно, пройдите по ссылке www.ganssle.com/debouncing.pdf, где можно прочитать очень подробную статью о технологиях борьбы с дребезгом контактов с обилием фактических данных. На случай, если вы захотите реа- лизовать более продвинутый метод борьбы с дребезгом: я соединил линию за- проса прерывания от микросхемы МСР23008 с одной из линий портов ввода/ вывода микроконтроллера. Так как эта линия может быть сконфигурирована как выход с открытым стоком, вы можете добавить дополнительные расшири- тели вводов/выводов и просто соединить все их линии запроса прерывания в одной и той же точке по схеме «монтажное И». Во внешнем подтягивании нет необходимости, поскольку у микроконтроллера ATmega32 имеются встроен- ные подтягивающие резисторы. В данную схему мной была добавлена ещё одна тонкая вещь — оптическая изоляция входных линий, выполненная очень просто с помощью стандарт- ного оптрона в корпусе DIP-6 и пары резисторов. Эта дополнительная схема служит двум целям. Во-первых, она защищает микроконтроллер от непри- ятных внешних событий, таких, как неправильно распаянные разъёмы или электростатические разряды. Во-вторых, она обладает способностью согла- совывать уровни сигналов. Можно подавать на вход оптронов сигналы прак- тически любого уровня. Вы испытаете чувство глубокой признательности к этой изолирующей схеме, если когда-нибудь случайно коснетесь одного из входов проводом от нерегулируемой батареи — перепаять оптрон гораздо про- ще и дешевле, чем микроконтроллер! Пожалуйста, заметьте, если вы хотите получить все прелести гальванической развязки, нужно, чтобы у какой-либо находящейся вне модуля VCM штуки имелся отдельный (или, по крайней мере, изолированный от VCM) источник питания. Иначе электромагнитная помеха от вашего внешнего оборудования пройдет в модуль VCM по общим шинам питания, существенно уменьшая преимущества, которые дают оптро- ны. Обратите внимание, что номинал последовательного резистора, выбран- ного мной для фотодиода оптрона, рассчитан на внешний источник питания +12 В. Понадобится подобрать другой номинал, если вы работаете при другом напряжении.
136 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы Далее, вы, возможно, хотите отслеживать температуру в некоторых точках подводной лодки. В настоящей подводной лодке Е-2 для меня представляли интерес несколько температур: было установлено по датчику на два приво- да шаговых двигателей и на каждый аккумулятор. Другой датчик температу- ры термически связан с окружающей средой, поэтому я могу до некоторой степени судить о температуре воды. Сообразуясь с целями данной работы, я буду использовать только два из этих датчиков. В данном приложении мной используется 12-битный температурный 12С-датчик МРС9801 компании Microchip. Добавление дополнительных точек измерения достигается просто установкой датчиков в тех местах, где они вам нужны, и подключением их к шине 12С. Как и в микросхеме МСР23008, у этого датчика температуры име- ется три конфигурируемых пользователем адресных бита. Полный адресный байт микросхемы — lOOlxxxR, где ххх — адресные линии А2...А0, a R — бит чтения/записи. Обратите внимание, что коллизия в пространстве адресов с микросхемами МСР23008 здесь невозможна вне зависимости от того, какую адресную комбинацию А2...А0 вы выберете. Если из интереса вы обратитесь к техническим данным чипов серии МСР9800, то увидите, что поставляется не- сколько разновидностей этих микросхем, которые имеют 5-выводный корпус форм-фактора SOT23 (Surface Mount Transistor — транзистор поверхностно- го монтажа). В этом крошечном корпусе нет места для вывода наружу линий выбора адреса, поэтому компания Microchip предлагает одну разновидность чипов, в которой жестко установлен адрес, равный 000, и другую разновид- ность с адресом 101 (двоичный). Повторю ещё раз: такая практика весьма рас- пространена с датчиками, подключаемыми к шине 12С. Чип МСР9801 также может работать в режиме термостата (такая опция часто добавляется в цифровые устройства измерения температуры). Для реа- лизации этого режима используется один выход с открытым стоком, который становится активным, если измеряемая температура выходит за запрограм- мированные пределы. При этом реализация данной функциональности со- вершенно не зависит от 12С логики, поэтому вы можете использовать данный режим в качестве аппаратной защиты даже в случае выхода микроконтрол- лера из строя. Ещё важнее то, что ради сохранения энергии вы можете даже полностью отключить микроконтроллер, а микросхему датчика температуры оставить работающей, чтобы отключать подсистемы и «будить» микрокон- троллер, если возникают выходящие за заданные границы флуктуации тем- пературы.
3.9. Пример 8-битного проекта с использованием AVRu бесплатного инструментария ■ 137 В реальной подводной лодке Е-2 я использую режим термостата чипа МСР9801 для отключения зарядного тока, если аккумуляторы становятся слишком горячими, для остановки двигателей привода и компрессора, если они нагреваются свыше номинального температурного порога, для приоста- новки компрессора при наполнении баллона сжатым воздухом высокого дав- ления, а также для выключения мощных галогеновых ламп, если температу- ра корпусной части вокруг рефлектора лампы становится слишком высокой (это может говорить о том, что вода сильно замутнена илом; в рассмотрен- ной мной ситуации — включение ламп, засунутых прямо в грязь, — проис- ходила генерация невероятного количества тепла). Обратите внимание, что, хотя указанная функция в технической документации других производите- лей обычно обозначается словом «термостат» и я свободно использую данное слово в тексте, в действительности эта микросхема не подходит для управ- ления термостатом без внешнего «интеллектуального помощника». Функция извещения о превышении температурного порога (temperature alert feature), как её обозначает компания Microchip, разработана скорее для выдачи сиг- нала отключения или предупреждения, а не для полностью автономной не- контролируемой работы. Далее вам понадобится возможность измерения давления. Для этого мной был выбран датчик МРХН6400АС6Т1 фирмы Freescale, измеряющий давление в диапазоне от 3 до 58 PSI (фунтов на квадратный дюйм) и имеющий интегри- рованный штуцер для подключения гибкой трубки. Этот датчик предназначен для автомобилей, но хорошо работает в диапазоне умеренных давлений, ха- рактерных для проекта Е-2. И опять-таки в реальной подводной лодке изме- рения надо проводить в немногих местах. Меня интересовало наружное дав- ление, которое можно использовать для определения глубины погружения, а также различные давления в воздушных магистралях, идущих от баллона со сжатым воздухом к балластным танкам и к паре пневматических линейных приводов. В представленной ранее схеме используются только два датчика, но, как и прежде, их количество легко можно нарастить до требуемого в вашем приложении. Обратите внимание, что серия МРХН6400А тестируется только в условиях сухого воздуха. Впрочем, вы можете применять чипы и для измерения внеш- него водяного давления, используя воздушную прослойку (пузырь) за гибкой диафрагмой. Эта фраза звучит наукообразно, поэтому я честно признаюсь, что фактически «гибкой диафрагмой» является пластиковая бутылка из-под
138 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы газированной воды. Я высверлил в днище отверстие, вклеил в него трубку, а также плотно приклеил эпоксидной смолой крышку, удалив предварительно резиновую прокладку. Эта конструкция выдержала испытания при давлениях до двух атмосфер и, возможно, прошла бы тестирование и при немного боль- ших давлениях. Указанные датчики давления имеют аналоговый выход. Мы считываем их выходные сигналы в довольно медленном темпе, используя каналы АЦП, встроенного в ATmega32L. Базовая программная фильтрация удаляет шум. Мы не ожидаем здесь очень быстрого изменения показаний. Соответствую- щий код можно найти в main.c. Последним и наиболее сложным датчиком, который мы будем исполь- зовать, является акселерометр ADXL322 компании Analog Devices, относя- щийся к классу MEMS-устройств (Micro Electromechanical Systems — ми- кроэлектромеханические системы). MEMS-технология стирает грань между «действительно маленькими машинами» и нанотехнологией. Наиболее рас- пространенными MEMS-устройствами, с которыми вы столкнетесь, рабо- тая в сфере робототехники, являются акселерометры и гироскопы. Такого рода устройства среди прочих производителей предлагают Analog Devices, Freescale, ST и Kionix. Кстати, используемый нами датчик давления также является MEMS-устройством. Если поглубже «покопаться» в Интернете, то обнаружится, что на рынке есть ещё несколько очень интересных MEMS- устройств, как датчиков, так и исполнительных механизмов (актуаторов). Меня, в частности, интригует возможность постройки электрического дви- гателя диаметром с человеческий волос, хотя я пока не могу придумать, как можно было бы задействовать такое устройство в каком-нибудь из проектов, над которыми я работаю. Чип ADXL322 — двухосевой акселерометр, работающий в диапазоне ±2 g. Он может измерять ускорение в двух плоскостях, которые находятся под пря- мым углом друг к другу. Выходной сигнал входит в насыщение при ±2 g. Дру- гие типичные рабочие диапазоны акселерометров — ±5 g и ±10 g. Чипы с бо- лее широкими диапазонами ускорений используются в таких приложениях, как автомобильные подушки безопасности, которые должны уметь отличать столкновения на высокой и низкой скорости (то, как ведут себя автомобиль- ные подушки безопасности второго и последующих поколений, зависит от се- рьезности и направления удара).
3.9. Пример 8-битного проекта с использованием AVRu бесплатного инструментария ■ 139 Обсуждаемый мной здесь 2§-акселерометр обычно используется для из- мерения наклона транспортного средства вдоль поперечной (крен) и про- дольной (тангаж) осей или в контроллерах приставок для видеоигр. К при- меру, вы могли бы применить такой датчик в схеме автоматического вы- равнивания авиамодели. Акселерометр надо было бы установить так, чтобы одна ось (назовём её ось X) была параллельна линии, идущей от кормы к носу авиамодели, а другая ось (в данном случае Y) шла от правого борта к левому (Рис. 3.14). -ч- , Акселерометр +Х Рис. 3.14. Установка акселерометра. Датчик ADXL322 дает на выходе два аналоговых напряжения, соответству- ющих векторам ускорения по осям X и Y. Когда датчик расположен парал- лельно поверхности Земли, величины выходных аналоговых сигналов соот- ветствуют середине шкалы. Если вы наклоните акселерометр в направлении Х+, выходной сигнал, соответствующий вектору X, станет ближе по величине к напряжению питания. Отклоните назад в направлении X—, и выходной сиг- нал станет ближе к О В. Для оси Y имеет место аналогичная картина. В общем величина крена и тангажа (если датчик установлен так, как было описано ра- нее) дается соотношениями:
140 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы Тангаж = sirT^X), Крен = sirT^Y). Здесь X и Y — числа, нормированные от уровней напряжений, выдаваемых чипом, к шкале от—1 до +1. Из-за колебаний или шума X и Y могут превышать 1.0, вам следует предусмотреть эту возможность. Возможно, сразу не очевидный, но важный момент. По показаниям двухо- севого акселерометра можно определить угол отклонения вашего устройства от вертикали по направлениям X и Y, только если он меньше 90°. Выдаваемую информацию невозможно однозначно преобразовать в данные об ориентации устройства. Посмотрите на две ситуации, показанные на Рис. 3.15, где я сна- чала наклоняю лодку на 15°, а затем поворачиваю её ещё на 150° (обратите внимание, что на этих эскизах лодка показана со стороны кормы). Ватерлиния Крен 15° на правый борт Крен 165° на правый борт sin 15e = sin 165е Без дополнительной информации эти положения неразличимы Рис. 3.15. Ограничения двухосевого акселерометра. Как вы можете видеть, выходной сигнал, соответствующий крену, одина- ков в обеих ситуациях. Сигнал, отражающий положение лодки относительно оси Z, если бы мы имели способ его измерять, изменил бы знак. Но с двухосе- вым датчиком эти два варианта просто неразличимы. Другой момент, который иногда, кажется, очень сложно донести до со- знания, состоит в следующем. Акселерометр всегда измеряет единый век- тор ускорения (в данном случае у нас имеется вектор, разложенный на две составляющие; трехосевой акселерометр дал бы третью составляющую, но конечным результатом был бы всё равно один вектор). Тяготение вносит свой вклад в вектор ускорения. Ваша рука, толкающая датчик через стол, вносит свой вклад. Движущий вас реактивный двигатель, стол, положение датчика в пространстве — всё вносит свои составляющие в вектор ускоре-
3.9. Пример 8-битного проекта с использованием AVR и бесплатного инструментария ■ 141 ния. Вы не можете разделить эти составляющие, просто глядя на выходной сигнал акселерометра. Другими словами, если вы установили датчик так, как было ранее мной описано, то максимум, который вы можете получить (даже с трехосевым акселерометром), — один-единственный вектор, кото- рый вбирает в себя все линейные ускоряющие силы, воздействующие на подводную лодку. Из-за этого, а также из-за отсутствия информации по оси Z и того фак- та, что используется сенсор с низкой предельной величиной G, обсуждаемая здесь схема совершенно не подходит для инерциальной навигации. Созда- ние схем так называемой инерциальной навигационной системы счисления и разработка ПО для неё — задачи весьма серьезные. Чтобы рассчитать вектор движения объекта по записям о его векторе ускорения, вы должны обеспе- чить проведение высокоскоростных измерений с интегрированием (числен- ным) по времени. Чтобы рассчитать итоговое перемещение (определить ко- ординаты) объекта, вы снова должны проводить интегрирование — на этот раз вектора движения. Ошибки в процессах накапливаются. Потребительские товары, в которых вы с большой долей вероятности найдёте подобные схемы, — это GPS-приёмники высокого класса. До тех пор пока это возможно, данные приборы пытаются отследить своё место- положение, используя GPS-сигналы. Если спутники временно скрыты (например, когда вы едете в тоннеле), прибор отслеживает ваше текущее местоположение со сниженной точностью, используя инерциальную нави- гацию. Показания MEMS-датчика, точно так же как и показания датчиков дав- ления, поступают на один из каналов АЦП. Здесь есть небольшой нюанс, связанный с согласованием импедансов. Для осуществления такого согла- сования вам необходимо между микроконтроллером и датчиком поставить операционный усилитель, включенный по схеме повторителя напряжения. В программе вы увидите несколько калибровочных констант; вы должны выставить нулевой уровень (на плоском столе) и напряжения, соответствую- щие ±lg, на обоих выходах. Из-за отличий в ориентации подложек MEMS- датчиков внутри их корпусов, различий в угле установки корпусов на печат- ных платах и других случайных факторов эти константы будут меняться от прибора к прибору. Типичный способ калибровки таких приборов — исполь- зование эталонной платформы. Вполне подходящей эталонной платформой является лист фанеры с регулируемыми по высоте ножками или большими болтами в каждом углу и установленным на ней пузырьковым уровнем. После
142 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы установки лодки на эталонную платформу проводится калибровка нуля, за- тем для калибровки граничных диапазонов лодку наклоняют на 90° вправо, влево, вперёд и назад. Измеренные таким образом константы вы можете со- хранить в EEPROM. Они будут правильными, пока не будет произведён ре- монт устройства и ориентация акселерометра по отношению к поверхности лодки не изменится. Мы многое сказали об аппаратной части, а как обстоят дела с ПО? Что- бы «прошить» новую программу в AVR-микроконтроллер, вам понадо- бится какой-нибудь внутрисхемный программатор, например, такой, как загрузочный кабель Atmel AVR-ISP, или плата разработчика STK500, или какой-нибудь другой инструментарий от сторонних фирм. Вам, очевидно, также понадобится компилятор и линкер. Здесь мой выбор в пользу avrgcc. Хотя я работаю под Linux, для вас не составит труда осуществить установ- ку инструментария AVR GNU под Windows, используя эмулирующую среду cygwin, которую можно бесплатно загрузить с www.sourceware.org/cygwin/. Cygwin работает под Windows 95/98/Me/NT/2000 и ХР (и предположительно Vista, хотя мной это не было опробовано). Она эмулирует большую часть си- стемы Linux и позволяет непосредственно в Windows работать со многими UNIX-программами (включая XII-программы). Если хотите, вы также мо- жете использовать предварительно скомпилированный инструментальный пакет WinAVR. Я обычно предпочитаю создавать цепочку инструментов «под себя», но если вы ищете способ быстро приступить к работе, то пакет WinAWR представляет собой именно такую возможность. Если вы предпочитаете собрать инструментарий самостоятельно, то на первом шаге вам следует загрузить gcc и binutils с ftp.gnu.org и avr-libc с www. nongnu.org/avr-libc. Сначала распакуйте, откомпилируйте и инсталлируйте binutils (предполагается, что вы используете версию 2.16, которой в настоя- щий момент в разработках на AVR я пользуюсь сам): tar zxvf binutils-2.16.tar.gz cd binutils-2.16 ./configure —target=avr —program-prefix="avr-" make make install Далее распакуйте, сконфигурируйте и инсталлируйте gcc (опять же пред- полагается, что вы используете версию 4.0.2):
3.9. Пример 8-битного проекта с использованием AVRu бесплатного инструментария ■ 143 tar zxvf gcc-4.О.2.tar.gz mkdir gcc-build cd gcc-build ../gcc-4.О.2/configure —target=avr —program-prefix="avr-" —enable- languages=c make make install И наконец, распакуйте, сконфигурируйте и инсталлируйте RTL-библиотеку avr-libc (я использую версию 1.4.4): tar zxvf avr-libc-1.4.4.tar.gz ./configure —build='./config.guess' —host=avr make make install Примечание. Символ — это одинарная кавычка, а не апостроф. На стандартной 104-клавишной клавиатуре он находится под тильдой С). Кстати, если вы загрузили .Ьг2-версии этих файлов, то вместо использова- ния синтаксиса tar zxvf filename.tar.gz вам следует использовать bunzip2 -с filename.bz2 I tar xvf - Это лишь примерное руководство по компиляции и инсталляции ин- струментальных компонентов GNU. За более подробной информацией обращайтесь, пожалуйста, к имеющейся в сети документации или просто раздобудьте экземпляр моей первой книги. Даю вам слово, что не пытаюсь разрекламировать эту книгу. Я просто очень устал заниматься переписыва- нием материала, который поместил в неё. Для меня гораздо проще просто написать что-то один раз, а потом сказать людям, где я разместил нужную им информацию! Вы, может быть, также захотите инсталлировать утилиту программиро- вания микроконтроллера с управлением через командную строку. Однако будьте осторожны! Время от времени компания Atmel изменяет коммуника- ционный протокол, используемый её инструментами последовательного про- граммирования. Когда вы загружаете и запускаете новую версию AVR Studio for Windows, эта программа часто предлагает вам модернизировать встроенное
144 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы ПО вашего набора STK500, не предупреждая вас о последствиях. Один из та- ких «радостных дней» случился совсем недавно, и в результате все инструмен- ты сторонних фирм для работы совместно с STK500 оказались неработоспо- собными. Насколько я знаю, в настоящий момент единственной из программ с открытым кодом, способной использовать новый протокол связи с STK500, является бета-версия avrdude. Более старые программы, такие, как uisp, со- вершенно бесполезны. Если у вас есть рабочая система на базе инструментов от сторонних компаний, то я советую никогда не запускать AVR Studio при подсоединённой плате STK500 (или кабеле AVRISP)! Чтобы скомпилировать ПО для AVR, предполагая, что вы уже должным образом инсталлировали avrgcc, просто извлеките исходный файл tarball (до- ступен Hawww.zws.com/publications/downloads/ibm-article9.tar.gz; я не печатаю его здесь, чтобы не занимать понапрасну место) и запустите утилиту make в директории vcm_399. Потратьте немного времени на просмотр структуры программы. В частности, обратите внимание на то, как устроен синтаксис, обеспечивающий обработку прерываний. По умолчанию в библиотеке avrlibc все прерывания направляются на обработчик, который ничего не делает. Для перенаправления прерывания вы не пишете нормальную именованную функ- цию, а используете макрос SIGNAL с аргументом, называющим векторизуе- мое прерывание, а далее сразу же должен быть вставлен обрабатывающий программный блок. Например, в программе serial.c вы можете видеть обра- ботчик прерывания по приёму байта последовательным портом, объявленный следующим образом: SIGNAL(SIG_USART_RECV) { // здесь должен быть код } Предупреждение: определения имен в макросе SIGNAL не на 100% иден- тичны для разных микроконтроллеров AVR, и иногда это может приводить к путанице. Поэтому программа, написанная на С, которая использует преры- вания, не обязательно окажется переносимой без всякой переделки с одного AVR-микроконтроллера на другой, даже если интересующие вас генерирую- щие прерывания аппаратные части у обоих этих микроконтроллеров одинако- вы. Если ваши прерывания необъяснимым образом отказываются запускать- ся, посмотрите на соответствующий заголовочный файл в директории /usr/ local/avr/include/avr (предполагается, что вы везде использовали предлагаемое
3.9. Пример 8-битного проекта с использованием AVRu бесплатного инструментария ■ 145 по умолчанию место инсталляции) и убедитесь, что вы используете коррект- ное наименование прерывания для применяемого вами чипа. Из-за этой потенциально возможной путаницы я настоятельно рекомен- дую, чтобы, принимаясь за новую разработку, вы выделяли линию ввода/вы- вода для использования в качестве флага прерывания. Прежде чем вы начнете чесать в затылке, разбираясь с запутанными вопросами, касающимися прио- ритетов прерываний, просто выполните небольшую профилактическую про- верку. Заставьте ваши прерывания сработать и убедитесь, используя осцилло- граф, что вы попадаете в нужную часть программы. Другой интересный момент, в котором вы, возможно, захотите разобрать- ся, — это код в eeconf.c, отвечающий за работу с электрически перепрограм- мируемой постоянной памятью (EEPROM). Хотя там нет ничего, что бы ис- пользовалось этой маленькой демонстрационной программой, в конечном из- делии EEPROM используется для сохранения некоторых важных калибровоч- ных констант (например, значений калибровки акселерометра относительно нулевых уровней крена и тангажа). Код в eeconf.c задействует простейший контроль целостности с использованием контрольной суммы. Библиотека avrlibc предоставит в ваше распоряжение удобный инструмент для записи/ считывания в/из EEPROM. Если к вашей программе предъявляются более высокие требования и вы хотите, чтобы запись в EEPROM осуществлялась с использованием механизма прерываний, то вам придётся разработать такой код самостоятельно. Полезный совет: для быстрой оценки степени использования ПЗУ и ОЗУ в своей avrgcc-программе, используйте утилиту avr-objdump, чтобы посмотреть на заголовки секций. В данном случае команда avr-objdump -h 399.elf покажет всё, что вам нужно знать (смотрите на колонку Size и не обращайте внимания на .stab и .stabstr, которые представляют собой символьные таблицы, не загру- жаемые в память микроконтроллера). Вам следует понимать, что библиотека avrlibc не очень эффективна в пла- не размера генерируемой программы. Например, если вы будете использовать функцию printf, то получите код огромного размера (это обычная проблема во встраиваемых системах). Есть урезанные версии функции printf, которые вы можете использовать, или можно просто написать самостоятельно подобную функцию, реализующую только то, что вам необходимо. Поскольку моему приложению не надо преобразовывать выходные данные в форматы, удобные для считывания человеком, мной был выбран последний способ. Примеры та-
146 ■ Глава 3. Учимся сами, снизу вверх. Маленькие встраиваемые системы кого кода вы найдёте, взглянув на utils.c (эти функции не используются про- граммой, я включил их просто ради полноты рассмотрения). Если вы прочитали эту главу (и, надеюсь, просмотрели примеры исходных программ и make-файл), то у вас появилось представление о том, решения какого рода задач требует такой довольно хорошо специфицированный, но неформальный проект. Добавление подобной работы в список выполненных проектов существенно повысит вашу цену на рынке труда.
ГЛАВА 4 УЧИМСЯ САМИ, СВЕРХУ ВНИЗ. БОЛЬШИЕ ВСТРАИВАЕМЫЕ СИСТЕМЫ 4.1. Целевая аудитория Предыдущая глава была предназначена для людей, имеющих опыт работы с аппаратными средствами и желающих научиться программированию ми- кроконтроллеров, т. е. имела дело с приближением к встраиваемым системам «снизу вверх». На другом конце спектра мы встречаем людей, обладающих со- лидным опытом в части написания пользовательского ПО на языках высокого уровня, которые сейчас хотят получить дополнительные знания, касающиеся встраиваемых систем. Обычно эти люди обладают квалификацией, которую я бы описал термином «IT» {программирование баз данных, HTML-дизайн, раз- работка приложений на Java и т. д.), и не имеют опыта инженерной работы. Довольно часто в эту категорию попадают старшекурсники, специализирую- щиеся в области компьютерных наук. С адаптацией таких людей к реалиям встраиваемых систем немедленно возникают сложности, связанные с тем, что чисто программные проекты для массовых ОС (Windows, Mac OS и т. д.) обычно разрабатываются с учётом того, что характеристики продукта будут сильно меняться в зависимости от вариа- ций аппаратных средств пользователя. Более того, аппаратные средства ПК до некоторой степени расширяемы и недороги, так что совершенно обычной является практика, когда разработчик ПО требует, чтобы пользователь обе- спечил наличие специальных аппаратных средств, таких, как дополнительная память, ЗО-видеокарта с аппаратным ускорением и т. д. Во встраиваемых си- стемах выдвижение таких требований неприемлемо.
148 ■ Глава 4. Учимся сами, сверху вниз. Большие встраиваемые системы Разработчик ПО для встраиваемых систем должен уметь: 1. Точно определять ресурсы, необходимые ПО, и управлять их распреде- лением. Это умение определять, какой объём ОЗУ и внешней памяти потребуется ПО при всех мыслимых условиях выполнения с полной гарантией того, что не произойдет выхода за эти границы при каких- нибудь необычных комбинациях входных сигналов. В большинстве случаев также необходимо дать некие гарантии, относящиеся к параме- трам работы в реальном масштабе времени (хотя здесь границы часто настолько свободны, что на них не заостряют внимание). 2. Разрабатывать ПО, эффективно использующее доступные системные ресурсы. 3. Разрабатывать ПО, которое при заданных входных условиях не имеет неопределённостей в выполнении (является детерминированным). Ни одно из этих умений, очевидно, не пользуется большим спросом в сфе- ре разработки ПО для современных потребительских приложений0. Следова- тельно, им не особо обучают на университетских курсах компьютерных наук. Заметьте, что выражение «программное обеспечение» в данном контексте явно включает в себя и ОС, работающую на целевом устройстве. И наоборот, для разработчиков приложений для ПК ситуация, когда они должны гаранти- ровать нормальное поведение ОС, ненормальна. Десять-двенадцать лет назад (как я жаловался во введении этой книги) разрыв между разработкой встраиваемого и массового пользовательского ПО был значительно уже. Программисты, съевшие собаку на написании игр и других программ для ПК Commodore Amiga или (что даже лучше) для его 8-бит- ных предшественников, таких, как Sinclair ZX Spectrum и Commodore 64, были хорошо подготовлены к тому, чтобы окунуться в разработку ПО встраиваемых систем, работающих в режиме реального времени. В этой главе вы познакомитесь с несколькими вариантами, на основе ко- торых можно разрабатывать 32-битные (или даже 64-битные) встраиваемые системы с широкими функциональными возможностями. Обратите внима- 0 У инженеров вообще весьма специфичный взгляд на прискорбное состояние отрас- ли создания потребительского ПО. Это одна из причин того, почему непропорционально большое число инженеров работают с ОС с открытым кодом. В них, как и в коммерческих продуктах, есть ошибки, но они, по крайней мере, дают пользователю возможность эти ошибки исправить (несмотря на то, что у большинства инженеров никогда нет свободного времени, чтобы начать подправлять исходный код).
4.2. Встраиваемые системы на основе х86 ■ 149 ние на присутствующий здесь определитель «широкие функциональные воз- можности (high-end)». Некоторые 32-битные микроконтроллеры (например, ARM и SuperH) доступны и в значительно урезанных модификациях (обычно без шин подключения внешней памяти), которые предназначены для дешевых систем на одном чипе. Другие 32-битные ядра, многие из которых патентова- ны, встроены в ASSP (специализированные стандартные продукты), такие, как используемые в DVD-плеерах. Эти категории микросхем и применений скорее относятся к главе 3. В данной главе я специально переношу фокус на сложные встраиваемые системы, где уровень приложения существенно аб- страгирован от аппаратной части. Для таких приложений обычно приходится писать сложный код пользовательского интерфейса, часто с элементами гра- фического пользовательского интерфейса (GUI — Graphical User Interface). В качестве примера таких систем можно назвать торговые автоматы (ATM — Automatic Trade Machine), электронные витрины, управляемые встроенным компьютером, карманные ПК (PDA — Personal Digital Assistant), автоматизи- рованные машины по продаже билетов на киносеансы или компьютеризиро- ванные информационные табло на железнодорожных вокзалах и в аэропор- тах. Обратите внимание, что я намеренно исключаю из этого списка системы реального времени с жесткими ограничениями на время отклика, к которым просто были предъявлены столь высокие требования по производительности, что в них пришлось использовать 32-битный микропроцессор. Подобно предыдущей главе, я вкратце познакомлю вас с возможностями нескольких популярных мощных платформ. Опять же этот материал не заду- мывался как вводный курс по реальному проектированию систем на основе данных платформ. Цель данной главы — пролить свет на сильные и слабые стороны более мощных семейств микроконтроллеров, что поможет вам сде- лать осознанный выбор в вопросе, в каком приложении вы можете сами на- чать эксперименты с этими семействами. 4.2. Встраиваемые системы на основе х86 Люди, наиболее комфортно себя чувствующие при разработке приложений под Windows или Linux, вполне вероятно, будут тяготеть к Intel-совместимым х86 системам просто потому, что они им знакомы. Хотя во многих встраивае- мых приложениях отчётливо видны недостатки х86, эту платформу не следует
150 ■ Глава 4. Учимся сами, сверху вниз. Большие встраиваемые системы отвергать в применениях, в которых можно получить выгоду от совместимо- сти с имеющимися на рынке готовыми аппаратными средствами и ПО. Предыдущее предложение написано не случайно. Несложно объяснить, почему х86 не очень хорошая кандидатура для многих встраиваемых систем. Распространённые х86-совместимые семейства (за немногими исключения- ми, которые вы можете спокойно проигнорировать) применяются только как часть более или менее полной PC-совместимой аппаратной архитектуры. Эти процессоры и их микросхемы поддержки большие по размеру и чрезвычайно энергоёмкие. В проектах на х86 почти наверняка требуется активное охлаж- дение, а также предпочтительно питание от сети. При проведении разработок, в основе которых лежит х86, превалирующим фактором оказывается необхо- димость обеспечения обратной совместимости (как для ядра ЦПУ, так и для других схем поддержки на материнской плате), и, несомненно, большинство людей, читающих этот текст, знакомы с историей, стоящей за этим утверж- дением. Огромные усилия были затрачены (некоторые немилосердные люди сказали бы «растрачены») на модернизацию ЦПУ и всей системной архитекту- ры, но даже имеющиеся на сегодняшний день 64-битные архитектуры до неко- торой степени ограничены по соображениям совместимости. Имеется доволь- но небольшое число истинных систем-на-кристалле (SoC — System-on-Chip), базирующихся на х86-совместимом ядре, из чего следует, что в х86-системах практически всегда требуется значительное число внешних схем0. Следует также заметить, что в отличие от огромного большинства предназначенных для встраиваемых систем контроллеров чипам х86 недостает встроенного JTAG или иного аппаратного интерфейса отладки. Это делает процесс отлад- ки критических низкоуровневых функций довольно сложным делом. Разработчиков встраиваемых систем х86 привлекают в нескольких ситуа- циях: 1. Вам надо добиться чрезвычайно высокого показателя «цена— характеристика» для очень сложного проекта с многофункциональной аппаратной частью при малых объёмах выпуска. Поскольку во встраи- ваемых системах на х86 большинство составных частей представляют собой готовые устройства, предназначенные для массовых ПК, цена Х) Из этого правила есть исключения. Например, не очень сложно вести разработку на основе i386EX и некоторых вариантах 80186. Но чтобы соответствовать заявленным целям этой главы, я говорю исключительно об х86-системах с широкими функциональными воз- можностями. Для тех выходных характеристик, которые обеспечиваются этими процессо- рами, имеются гораздо лучшие альтернативы.
4.2. Встраиваемые системы на основе х86 ■ 151 такого устройства ниже цены специально разработанного для данной цели аналога. Если вы закажете сотню одноплатных компьютеров, вы- пускаемых массово такими компаниями, как Dell, Gateway и т. д., то их цена будет даже ниже, чем стоимость входящих в них компонентов, ку- пленных по розничным ценам. 2. Вы создаёте продукт, используя некий набор функций, которые уже су- ществуют в виде, пригодном для их использования на готовой ОС (та- кой, как Windows XP). При этом вашему изделию не задают жестких па- раметров работы в режиме реального времени. 3. Вам надо провести проектные работы в максимально сжатые сроки: вы хотите разработать модель программы на обычном ПК, затем перенести её на целевую систему с минимально возможными затратами времени на портирование и отладку. Этот положительный фактор значительно увеличивает свой вес, если у вас есть доступ к команде компетентных программистов, пишущих на уровне приложений. Встраиваемые системы на основе х86 могут принимать самые разнообраз- ные формы. Наиболее легко узнаваемый метод встраивания процессора х86 заключается в следующем. Берется покупной ПК и встраивается в шкаф, в котором находится всё, чем вы хотите управлять. Управляемые пользователем станции сканирования и печати фотографий, которые часто можно встретить в торговых центрах и аптеках, сделаны именно таким образом, и это абсолют- но нормальные встроенные системы. Одно из главных преимуществ такого подхода состоит в том, что ваше приложение может быть — как с точки зрения программной части, так и физически — изолированным от конкретных аппа- ратных устройств, которыми наполнен ящик. Это Божья милость, посколь- ку тенденция такова, что составляющие обычных ПК имеют очень короткий жизненный цикл по сравнению с устройствами, специально предназначен- ными для встраиваемых приложений. С другой стороны, можно сделать собственную полностью заказную плату на базе какого-нибудь х86-совместимого процессора. Однако уровень слож- ности такой задачи угнетающе высок. Эту работу действительно лучше все- го оставить компаниям, которые специализируются на такого рода проектах. Уверяв вас, даже просто взять предлагаемую производителем чипов выверен- ную принципиальную схему включения и развести под неё плату, отвечающую вашим требованиям по геометрической форме, — непростая задача. По мень- шей мере вам понадобится лицензировать и отладить BIOS (Basic Input/Output System — базовая система ввода/вывода), чтобы корректно инициализировать
152 ■ Глава 4. Учимся сами, сверху вниз. Большие встраиваемые системы контроллер памяти на вашей плате. Имеются тонкие временные параметры, которые в высокоскоростных подсистемах памяти должны настраиваться с учётом конфигурации платы. По существу, вам надо будет обеспечить свою временную диаграмму для каждой линии данных, принимая во внимание то, что длины дорожек и задержки распространения сигналов у них разные. Про- ведение тестовых проверок и нахождение набора временных параметров, ра- ботоспособных при всех конфигурациях памяти, которые вы намерены под- держивать, является весьма трудной задачей. Сложно добиться, чтобы такая штука вообще работала, и чрезвычайно сложно удостовериться, что ваш проект будет корректно работать при всех комбинациях температур, инсталлирован- ных типах памяти, имеющихся радиочастотных шумах и т. д. Между этими двумя крайностями находится большое количество разно- образных промышленно выпускаемых х86-совместимых одноплатных ком- пьютеров, объединительных плат и процессорных/логических базовых моду- лей, разработанных для интеграции с заказными системными платами. Наиболее популярные х86-совместимые процессоры выпускаются ком- паниями Intel, AMD и Via Technologies, В прошлом компания National Semiconductor также производила ряд процессоров, подобных Pentium, под общей маркой Geode, но эта производственная линейка была продана AMD. До сих пор вы можете встретить чипы, имеющие на корпусе логотип National Semiconductor. Другим крупным игроком является компания Transmeta, кото- рая выпускает инновационные эмулирующие х86 чипы с пониженным энер- гопотреблением (Crusoe и Efficeon), используемые в некоторых ноутбуках и одноплатных компьютерах0. Выпускаемые для массового потребителя чипы (те, которые вы видите в обычных настольных и портативных ПК) компаний Intel и AMD — это наилучшие «рабочие лошадки». В качестве грубого обоб- щения можно сказать, что более своеобразные компоненты, такие, как Geode и процессоры компаний Via и Transmeta, разработаны под специальные зада- чи: пониженное энергопотребление (Via Eden, Transmeta), недорогие встраи- ваемые системы для компьютерных приставок и подключаемых к Интерне- ту приборов (изначально серия Geode была предназначена для захвата части именно этого сектора рынка) и т. д. Будьте готовы к тому, что перед выбором поставщика придётся протестировать ваше приложение на нескольких вариан- тах аппаратных средств. Может случиться так, что получение оценки, пока- зывающей, насколько хорошо будет обеспечено соответствие заданных требо- ваний на определённой PC-совместимой платформе, окажется практически 0 К настоящему времени выпуск процессоров Transmeta прекращён. — Примеч. ред.
4.2. Встраиваемые системы на основе х86 ■ 153 невозможным делом. Декларируемая производительность естественным об- разом соотносится с деятельностью обычных потребителей, т. е. с офисными приложениями или играми. Таким образом, по ней будет сложно с достаточ- ной степенью точности сказать о соответствии платформы требованиям для большинства встраиваемых приложений. Если вы не собираетесь втиснуть в ваше оборудование целый ПК, то са- мым дешёвым и, в некотором смысле, наиболее гибким методом встраивания х86-платформы является использование в качестве ядра системы компьютер- ной материнской платы стандартного форм-фактора. На тот случай, если вы давно не разбирали ПК, сообщу, что на современных материнских платах все внешние подключения к расположенной на них периферии (видео, последо- вательных портов, USB, аудио и так далее) производились с задней панели корпуса. Материнская плата поставляется со смонтированной на ней платой, на которой установлены разъёмы. Эта плата разъёмов входит в стандартный вырез на задней стенке корпуса и препятствует выходу радиочастотного из- лучения через область подключений. Поскольку расположение монтажных винтов, размер и форма этой платы стандартизованы0, то для вас не составит труда спроектировать корпус, подходящий практически для любой современ- ной материнской платы. Впрочем, у этого метода есть недостатки, препятствующие его приме- нению во многих приложениях. Возможно, наихудшим из них является то, что для питания компьютерной материнской платы вам нужен довольно сложный и дорогой источник питания. Самые маленькие покупные блоки питания, имеющие все необходимые разъёмы для подключения к стандарт- ной материнской плате, предназначены для устанавливаемых в Ш-стойку серверных корпусов (ширина, глубина и высота приблизительно составля- ют 16.8x25.6x1.7 дюймов). Размеры источников питания обычно находятся в районе 5.5x10 xl.5 дюймов, плюс имеются небольшие выступы. Это сразу же устанавливает нижнюю границу на общий размер и форму вашего устройства. Добавьте относительно большой размер стандартной компьютерной мате- ринской платы, и окажется, что корпус для проектируемого вами устройства не будет радикально отличаться от обычного узкого компьютерного корпуса. Вам также придётся решать множество других вопросов. Например, в таком 1} Для получения подробностей по этому вопросу посетите (и внесите в избранное) стра- ничку www.formfactors.org. Она вам понадобится в случае проектирования аппаратуры на базе материнской платы ПК. Там есть спецификации на все — от требований к источникам питания до размеров монтажных отверстий.
154 ■ Глава 4. Учимся сами, сверху вниз. Большие встраиваемые системы ограниченном пространстве охлаждение может оказаться проблемой. Венти- ляторы на центральном процессоре и в блоке питания генерируют помехи и представляют собой потенциальные источники отказов. Поскольку про- изводители и поставщики используемых материнских плат могут меняться, вам придётся формировать поставляемый с вашей конструкцией пакет про- грамм так, чтобы набор драйверов соответствовал всем возможным вариан- там. Кроме того, из-за этого могут возникнуть проблемы у конечного поль- зователя, поскольку затруднительно требовать от него адекватных действий, в то время как вы сами большинство модернизаций производите в тайне от потребителей. Действительно неприятно, когда приходится задавать пользо- вателям вопрос о том, какое «железо» они используют, и поддерживать не- сколько отдельных версий программ модернизации для отличающихся друг от друга версий аппаратных средств. Следующий по гибкости вариант — взять определённую материнскую плату, всё ещё относящуюся к разряду довольно обычных, но которая предна- значена для встраиваемых приложений или широко в них используется. Ли- дирующие позиции здесь занимает производящее материнские платы подраз- деление компании Via (www.viapsd.com). Они оказались на гребне волны, пер- выми введя форм-фактор Mini-ITXb серии материнских плат Epia. И сейчас у них есть несколько различных форм-факторов, специально разработанных для встраиваемых систем. Серия Epia первоначально была предназначена для любительской мультимедийной аппаратуры на базе ПК и других подобных встраиваемых приложений. Недостаток этих плат в том, что вы определён- но замыкаетесь на единственном поставщике, хотя и выказывающим весьма сильную приверженность к сохранению своих старых плат в производстве в течение разумного срока1*. Преимущество — платы меньше большинства обычных компьютерных материнских плат, поэтому вы можете поместить ваше устройство в корпус меньшего размера. Также вы можете более точно рассчитать требования к питанию и, следовательно, использовать заказной блок питания меньшей мощности и габаритов, поскольку не надо беспоко- иться о том, что в будущем придётся переходить на материнскую плату с суще- ственно большим энергопотреблением. В некоторых платах, разработанных на основе центрального процессора Via Eden, даже не требуется его активное охлаждение. 1} В настоящее время платы этого форм-фактора выпускают и другие компании, в том числе Intel, Gigabyte и другие, причём рассчитанные как на установку стандартных процес- соров для ПК, так и новейших процессоров с малым энергопотреблением типа Intel Atom, которые не требуют активного охлаждения. — Примеч. ред.
4.2. Встраиваемые системы на основе х86 ■ 155 Вы можете не беспокоиться, что производство выбранных вами плат будет прекращено, и это является большим преимуществом вступления на дорожку «потребительских встраиваемых материнских плат». Для выпуска своей про- дукции вы можете купить любую самую дешевую материнскую плату (под- ходящую по физическим размерам и соответствующую требованиям охлажде- ния). Вы гарантированно не окажетесь в кошмарной ситуации, когда вы про- водите испытания на устаревшей плате и одновременно заново проектируете корпус своего прибора, чтобы втиснуть туда новую материнскую плату. Следующий шаг — использование одноплатного компьютера. Здесь имеется большое разнообразие форм-факторов. Больше всего я работал с продукцией таких компаний, как Advantech (www.advantech.com), ВСМ Advanced Research (www.bcmcom.com) и ICP America, Inc. (www.icpamerica.com). Есть, конечно, и множество других фирм, но обратите внимание, что многие из поставщиков просто ставят свой фирменный знак и перепродают продукцию других. На этом сегменте рынка вы встретите следующие распространенные форм- факторы: • Карты (обычно ISA или PCI) центрального процессора, предназначен- ные для подключения к системной объединительной плате. Обратите внимание на часто задаваемый вопрос: «Могу ли я построить мульти- процессорную систему, установив на системной объединительной пла- те несколько процессоров?» Ответ: «Вероятно, нет». Поскольку многие из этих карт спроектированы в предположении, что на системной плате они будут единственным ведущим (master) устройством. При этом дру- гие слоты должны либо оставаться пустыми, либо быть заняты стандарт- ной компьютерной периферией, такой, как сетевые карты и т. д. Ино- гда объединительная плата только выполняет функцию распределения питания. В этом случае вы можете поставить несколько процессоров, но понадобится каким-то образом объединить их сетью (обычно применя- ется Ethernet) и разработать своё собственное ПО мультипроцессорных коммуникаций, если вы хотите использовать всё устройство в качестве единой мощной машины. Имеется очень небольшое число процессор- ных карт, спроектированных для работы в среде с несколькими ведущи- ми устройствами, которые могут общаться друг с другом на объедини- тельной системной плате. Однако опять же, чтобы всё это заработало, требуется специальное ПО. Впрочем, обычно эти карты не предназна- чены для приложений с распределённой обработкой данных. Их типо- вое применение — телекоммуникации и сетевая маршрутизация, когда у
156 ■ Глава 4. Учимся сами, сверху вниз. Большие встраиваемые системы вас к каждой индивидуальной процессорной карте подключается группа низкоскоростных интерфейсов, а для маршрутизации общего трафика между этими интерфейсами используется быстрая системная плата. • Мезонинные компьютеры 2.5" (2.5" biscuit PCs), разработанные таким образом, что площадь их поверхности такая же, как и у 2.5" жесткого диска. Из-за чрезвычайно ограниченного пространства для этих плат обычно требуется использовать на всех разъёмах стандартные жгуты. Во избежание проблем с перегревом они также обычно сделаны на базе процессоров, выделяющих при работе довольно малое количество тепла (т. е. медленных). • Мезонинные компьютеры 3.5", разработанные таким образом, что их площадь поверхности соответствует площади поверхности 3.5" жесткого или гибкого диска. Данный форм-фактор обеспечивает хороший пока- затель «цена—производительность»-. Доступны платы, соответствующие компьютерам от i486 до среднего класса Pentium. На этих платах обыч- но имеется один или два Ethernet MAC, VGA-выход, один или два IDE канала, диск DiskOnChip или CompactFlash с возможностью загрузки и различные другие интерфейсы. Форм-фактор 3.5" в действительности недостаточно велик для нормальных шин расширения ISA или PCI, поэ- тому в большинстве одноплатных компьютеров этого форм-фактора ис- пользуется интерфейс РС/104 (это, в сущности, шина ISA, переведённая на колодки 0.1" таким образом, что для получения различной функцио- нальности вы можете устанавливать платы периферии друг над другом поверх центрального процессора). ОЗУ на этих платах почти всегда под- ключается в SODIMM разъём (так же, как и в ноутбуках). • Мезонинные компьютеры 5.25". Похоже, что этот форм-фактор сейчас отвергается, хотя такие модели ещё можно приобрести. Предоставляемые этими платами функциональные возможности подобны тем, что могут вам предоставить одноплатные компьютеры с форм-фактором 3.5", за исклю- чением того, что благодаря большей площади на данных платах вы обыч- но увидите слот PCI и, возможно, обнаружите интегрированную ОЗУ. Существует несколько преимуществ использования мезонинных компью- теров. Во-первых, требования по электропитанию. Для работы большинства этих плат необходимо только +5 В, хотя некоторым также требуется и +12 В. Вы можете обеспечить эти напряжения, используя относительно недорогие одно- или двухканальные бескорпусные источники питания, или, при необ- ходимости, спроектировать собственный блок питания. Это также упрощает работу с батареей резервного питания, если оно требуется в вашем проекте.
4.2. Встраиваемые системы на основе х86 ■ 157 Во-вторых, такой форм-фактор гораздо лучше форм-факторов стандартных компьютерных материнских плат подходит для размещения вашего оборудо- вания в аккуратном маленьком корпусе. В-третьих, поставщики промышлен- ных компьютеров обычно предоставляют такие маленькие радости, которых вы не найдёте на потребительском компьютерном рынке. К ним относятся гарантированные рабочие температурные диапазоны, явная поддержка Linux, более длительное время выпуска этих изделий с упреждающим уведомлением о снятии их с производства (эти платы часто выпускаются в течение 4...8 лет, сравните с 6 месяцами, характерными для обычных материнских плат), нали- чие встроенных сторожевых таймеров, наличие, помимо стандартного интер- фейса RS-232, также и интерфейсов RS-422/RS-485 и т. д. Если для создания своего устройства вы выберите какую-нибудь из опи- санных встраиваемых компьютерных систем, вы также, постепенно набираясь опыта, доберётесь до написания собственного ПО для этих закрытых «чёрных ящиков». Как минимум, вы, вероятно, захотите, чтобы ради предотвращения тупиковых ситуаций в вашем ящике присутствовал сторожевой таймер (осо- бенно если используемая вами ОС не разрабатывалась специально для приме- нения во встраиваемых системах). У большинства одноплатных компьютеров уже имеется встроенный аппаратный сторожевой таймер, но если вы исполь- зуете материнскую плату широкого применения, то вам, возможно, понадо- бится сделать свой собственный. Простейшее сторожевое устройство — это автоматический выключатель, ожидающий повторяющегося сигнала уста- новки в исходное состояние. Таким сигналом может служить поступление на последовательный порт какого-нибудь символа или периодическое измене- ние уровня на статусной линии. Если требуемый сигнал не появился в течение некоего определённого периода времени, сторожевое устройство прерывает подачу питания на несколько секунд, производя тем самым жесткий сброс всей системы. Есть более «продвинутые» сторожевые таймеры, доступные в виде карт для распространенных шин, таких, как PCI, и обычно интегриро- ванные непосредственно на промышленных одноплатных компьютерах. Они ожидают подачи специального кода на порт ввода/вывода или ряд портов0 и в случае истечения тайм-аута удерживают сигнал на линии сброса ведущей си- Х) Один из производителей карт сторожевых таймеров для компьютерных приложе- ний — Berkshire Products, Inc. (www.berkprod.com). PCI-карты этого производителя снабже- ны различными дополнительными средствами, включая аналоговый/цифровой вход, DIP- переключатель и/или программно конфигурируемое время, после которого сторожевой таймер выдает сигнал сброса, восемь цифровых портов ввода/вывода, два реле, устройства подключения температурных датчиков и многое другое.
158 ■ Глава 4. Учимся сами, сверху вниз. Большие встраиваемые системы стемы в течение какого-то времени. Эти карты обычно обеспечивают также и выполнение других полезных функций, относящихся к поддержанию рабо- тоспособности системы, таких, как зонный мониторинг температуры. В не- которых случаях вам захочется реализовать собственный сторожевой таймер, в частности если у вас есть внешняя механическая часть, например лесопил- ка, которую надо немедленно переводить в безопасное положение, если было определено, что имел место сбой в программном обеспечении управляющего компьютера. Следует чётко понимать, что у сторожевых таймеров в одноплатных ком- пьютерах время тайм-аутов удивительно большое (секунды или минуты) по сравнению с тайм-аутами в маленьких микроконтроллерных системах (мил- лисекунды). В некоторых экстремальных случаях сторожевой таймер может выдавать сигнал сброса только по истечении пятиминутного интервала. Столь длительная задержка — необходимость, если сторожевой таймер работает по- стоянно; она дает время загрузиться большой ОС и набору прикладных про- грамм после подачи питания на аппаратуру. Лучшей идеей здесь было бы вы- брать сторожевой таймер, который включается только определённым дей- ствием программы и/или имеет однократный программируемый тайм-аут. Идя этим путем, вы сможете минимизировать длительность бездеятельного ожидания после программного сбоя. Вам следует также принять во внимание тот факт, что сторожевой таймер, обеспечивающий при запуске внезапный сброс и последующую подачу пита- ния, определённо не годится для некоторых типов аппаратных средств. В част- ности, карты CompactFlash (их часто используют в проектах на базе одноплат- ных компьютеров х86) разработаны таким образом, что не могут нормально справиться с исчезновением питания. Если вы отключите электропитание в тот момент, когда производится запись на CompactFlash, то можете вывести всю карту из строя. Такая ситуация вполне возможна, если, например, у вас открыт на запись журнал регистрации событий (log file) и во время возникно- вения какого-то изменения срабатывает сторожевой таймер. Вам также понадобится обдумать вопрос, касающийся связи вашего при- ложения с внешним миром. В наши дни стремительно меняющихся ПК при- ладить к компьютеру самодельную периферию сложнее, чем это было. Рань- ше самым простым способом подсоединения такой цифровой периферии, как кнопки и реле, было подключение их к параллельному порту компьютера. Са- мым простым способом связать плату ведомого контроллера с компьютером было использование последовательной связи (RS-232). Поскольку оба ин-
4.2. Встраиваемые системы на основе х86 ■ 159 терфейса сдают свои позиции на рынке потребительских компьютеров, вам, возможно, придётся поискать другие методы. Обратите внимание, что рынок одноплатных компьютеров значительно более дружелюбен к потребностям разработчиков встраиваемых систем. Практически на всех одноплатных ком- пьютерах параллельные и последовательные порты всё ещё входят в стандарт- ную комплектацию. Тем не менее идея по возможности избегать использова- ния устаревших интерфейсов наилучшим образом проявит себя в будущем, обеспечив более простой перенос вашего приложения на другую плату. Существуют различные экзотические способы подключения внешней перифе- рии к компьютеру, которые вы вполне можете использовать, но «наиболее про- стой» путь — воспользоваться USB-портом. В действительности этот интер- фейс сложен для использования, но если вы осторожны в том, что пытаетесь сделать, есть надежда избежать большинства проблем. Если вам надо всего лишь приладить несколько внешних кнопок при небольших объёмах выпуска вашего устройства, то вы можете совершить акт вандализма над USB-мышью или клавиатурой и подключить свои собственные кнопки к соответствую- щим точкам микроконтроллера «павшего» аксессуара. И вам не понадобится писать никаких драйверов или придумывать сложные аппаратные средства согласования. При более высоких объёмах выпуска или если вам требуется что-то посложнее, чем просто пара кнопок, понадобятся более радикальные решения. Должен сказать, я верный сторонник принципа, что надо делать всё на- столько просто, насколько возможно, и это же относится к USB. В частности, мне совсем не хотелось бы оказаться в таком положении, когда пришлось бы писать и поддерживать код USB-драйвера для ОС, особенно предназначен- ной для массового потребителя и подверженной частым модификациям, как Windows или Mac OS. Поэтому я предпочитаю пользоваться такими решения- ми по построению USB-интерфейса, для которых имеются отлаженные пре- доставляемые производителем драйверы. С точки зрения практического проектирования это означает, что в качестве внешнего интерфейса я всё ещё использую обычный асинхронный последо- вательный интерфейс, например RS-232. Между компьютером и внешним оборудованием я ставлю переходные устройства с USB на RS-232 (конвертеры USB-to-serial) на основе микросхем компании FTDI (www.ftdichip.com). Эти устройства — манна небесная для разработчиков встраиваемых систем, по- тому что компания FTDI предоставляет совершенно бесплатно драйверы для Windows, Windows СЕ и Mac OS. В ядро ОС Linux некоторое время назад была
160 ■ Глава 4. Учимся сами, сверху вниз. Большие встраиваемые системы встроена поддержка FTDI. Если вы используете более старое ядро Linux, то компания FTDI предоставит вам драйвер. Всё, что вам надо сделать, — это вставить устройство, инсталлировать драйвер, и у вас есть связь. Вам даже не надо устанавливать FTDI-чип на плату, так как можно исполь- зовать заранее собранный кабель «ChiPi» (UC232R), который можно купить непосредственно у компании FTDI примерно за 20 долл. Единственный ре- альный недостаток в этом случае заключается в том, что вам понадобится на другом конце кабеля установить конвертер уровней сигналов. В случае приме- нения «голого» чипа FTDI вы можете исключить необходимость преобразо- вания уровней с КМОП на RS-232 и затем в обратную сторону. При желании вы можете переделать кабель «ChiPi» таким образом, чтобы получать с его вы- ходов инвертированные сигналы КМОП-уровня. К сожалению, некоторые приложения не могут быть реализованы с при- менением метода преобразования USB-интерфейса в последовательный ин- терфейс из-за жестких требований по времени или просто по той причине, что в них требуется передача большого количества данных во внешнее устройство или из него. В таком случае вам придётся стиснуть зубы и сделать собственную аппаратную часть USB для обмена информацией с внешним миром. Здесь, в сущности, вы могли бы двинуться по одному из двух путей: или воспользо- ваться чьим-то существующим проектом USB-интерфейса (PDIUSBD12 ком- пании Philips — пример одного из недорогих решений, который вы могли бы использовать), или применить микроконтроллер со встроенной аппаратной поддержкой USB. В целом я предпочитаю последний подход, и применять для этой цели мне нравится USB-микроконтроллеры фирмы Cypress0. Сегодня я бы проводил разработку, используя микроконтроллер EZ-USB FX1 (CY7C67413). В прошлом мной применялись более старые EZ-USB чипы (AN21xx)2). 0 У других производителей, конечно, тоже имеются USB-микроконтроллеры. В такого рода приложениях популярно также семейство PIC, хотя у них нет остроумной архитекту- ры на базе ОЗУ, которую предлагает Cypress. 2) Я упоминаю об этих более старых чипах по той причине, что компания DeVaSys (www.devasys.com) всё ещё предлагает довольно недорогие (79 долл.) оценочные платы с установленными на них микроконтроллерами AN2131QC и всеми линиями ввода/вывода, удобно выведенными на монтажную колодку. Это самый дешёвый способ начать работать с чипами EZ-USB. Я не рекомендовал бы вам применять AN21xx в новых проектах, так как время жизни этого семейства подходит к концу. Но вы точно можете использовать один из этих микроконтроллеров, чтобы поупражняться в написании кода для работы с USB во встраиваемых приложениях.
4.2. Встраиваемые системы на основе х86 ■ 161 Чип FX1 — это высокоскоростной микроконтроллер типа 8051 с USB- интерфейсом, 12С-интерфейсом, 16 КБ памяти программ, позволяющий ис- пользовать до 40 линий ввода/вывода, с двумя DPTR и другими полезными штуками. Воистину остроумным в этой микросхеме является память про- грамм, фактически находящаяся в ОЗУ. При подаче питания чип может загру- жать в эту область ОЗУ программу из внешнего электрически перепрограм- мируемого ПЗУ с 12С-интерфейсом (I2C EEPROM). Если в вашем проекте нет внешнего ПЗУ, то микроконтроллер ничего не будет делать, пока вы не под- ключите его к USB-порту. В этом случае он будет идентифицировать себя на компьютере как общее Cypress-устройство. Компания Cypress предоставляет драйвер, который будет загружать созданный вами код в микроконтроллер, пока тот находится в этом состоянии. Затем данный драйвер симулирует раз- рыв соединения и вновь соединяется, но на этот раз в микроконтроллере вы- полняется ваш код, поэтому для обмена информацией ОС Windows загружает другой драйвер. Именно от того, какой драйвер будет загружен, зависит, как ваше устройство будет себя идентифицировать. Это может быть стандартный драйвер Windows, обеспечивающий человеко-машинный интерфейс, драйвер класса памяти или что-то совершенно иное. Причина запуска микроконтроллера таким образом частично заключается в том, что это делает разработку и отладку кода контроллера лёгкой и быстрой, даже если у вас нет необходимых средств для настоящего аппаратного внутри- схемного отладчика. Цикл прошивки с последующей пробной работой уско- ряется, поскольку фаза прошивки является очень быстрой. Впрочем, важнее то, что вы можете перепрограммировать устройство, просто обновляя драйвер на компьютере, чтобы он загружал новое встроенное ПО в микроконтроллер. Это позволяет вам модифицировать встроенное профаммное обеспечение в рабочих условиях без необходимости иметь какие-нибудь аппаратные сред- ства и без риска, что в процессе модификации на самообновляющемся микро- контроллере пропадет питание, и вы останетесь ни с чем. К сожалению, вне зависимости от выбранного вами пути, если дело дойдет до разработки собственного кода для работы с микроконтроллером по USB, вам почти наверняка придётся писать собственный драйвер для ПК. Если вам хочется без особого стресса познакомиться с использованием USB во встраи- ваемых системах, то для этого можно порекомендовать третье издание пре- восходной книги Жана Акселсона (Jan Axelson) «USB Complete: Everything You Need to Develop USB Peripherals» (Lakeview Research, August 2005, ISBN 1-9314-4802-7). Конечно, в Интернете также имеется множество учебников и
162 ■ Глава 4. Учимся сами, сверху вниз. Большие встраиваемые системы другой информации на эту тему, а полные спецификации можно получить с сайта USB Implemented Forum, Inc. www.usb.org. Кстати, если вам нужна лишь связь с несколькими аналоговыми каналами или с чем-то подобным, то вовсе не требуется создавать собственное устрой- ство. Несколько производителей, например National Instruments (www.ni.com), Dataq Instruments (www.dataq.com) и IOTech (www.iotech.com), продают наборы для сбора данных, которые могут быть использованы в качестве интерфейсного ядра встраиваемых систем на базе ПК. Некоторые из этих наборов очень не- дороги. Например, 8-канальное устройство сбора данных начального уровня с последовательным интерфейсом компании Dataq Instruments стоит всего 25 долл. Стоимость аналогичного USB-устройства составляет 50 долл. Другое важное решение, которое вам придётся принять, разрабатывая свой проект на базе х86, — это решение о том, какую ОС использовать. Позднее в этой главе мной будут обсуждаться несколько популярных во встраиваемых приложениях ОС, но там нет упоминания о Windows, которая скорее всего приходит вам на ум, коль уж мы говорим об х86. Причина этого в том, что стандартная массово используемая ОС Windows — это абсолютно точно не ОС для встраиваемых приложений. Также Windows предназначена для работы только в х86, тогда как большинство встраиваемых ОС переносимы и на дру- гие архитектуры. Для данного раздела — и исключительно для данного раздела — я приведу некоторые аргументы, которые могут оправдать создание вашей системы на основе Windows. Некоторые люди (в частности, из компании Microsoft) ска- жут, что список аргументов составлен излишне осторожно, но в этом-то и есть его ценность. Здесь приведены критерии класса «следует иметь», над которы- ми я предлагаю вам подумать, прежде чем решиться проектировать собствен- ную систему, основываясь на Windows: • Вы уже опытный программист в Win32, и/или у вас есть возможность работать совместно со специалистами в Win32. В некоторых случаях этот критерий может перевесить все другие. Если вы должны быстро поста- вить своё творение, а все имеющиеся у вас и вокруг вас таланты связаны с Win32, может оказаться, что использование того, что есть, вовсе не ли- шено смысла. • Скорость разработки приложения более важна, чем оптимизация стои- мости комплектующих изделия и тонкая настройка его характеристик. Обратите внимание, что разработка вашего приложения как программы
4.2. Встраиваемые системы на основе х86 ■ 163 Win32 означает, что вы можете тестировать его на обычном ПК и, при не- обходимости, показывать его заказчикам в то время, когда команда, за- нимающаяся «железом», всё ещё обсуждает детали и собирает макетные образцы аппаратной платформы. Это, конечно, пускание дыма в глаза, но также реальность современных маркетинговых кампаний. • К вашему приложению не предъявляется значительных требований по работе в режиме реального времени, за исключением требований к функ- ционированию встраиваемых средств мультимедиа (аудиопроигрыватель МРЗ, видеопроигрыватель и т. д.). Хотя при разработке ОС Windows не ста- вилась задача обеспечения гарантированных параметров работы в режиме реального времени, в некоторых случаях на это можно закрыть глаза. • Значительную часть вашего приложения занимает код, обеспечивающий графический интерфейс пользователя GUI. Если это так, то вы можете получить выгоду от использования многочисленных и прошедших хоро- шую проверку библиотек GUI и инструментов разработки, имеющихся для работы под Windows. • Ваше приложение никогда не будет подключаться непосредственно к открытой сети, такой, как Интернет. Пользовательская ОС Windows по- стоянно устанавливает соединение с узлом модернизации для получе- ния обновлений, призванных обеспечить её безопасность от новых и всё более изощрённых угроз. Достаточно жестко ограничить функциональ- ность системы, чтобы в этих обновлениях не было необходимости, очень сложно (особенно если надо, чтобы некоторые из предоставляемых Microsoft сетевых служб работали на вашем устройстве). С другой сторо- ны, это плохая идея — допустить, чтобы в работающее в автоматическом режиме устройство производилась загрузка и инсталляция обновлений ПО сторонних фирм. Ведь вы понятия не имеете, не потребует ли одно из этих автоматических обновлений вмешательства пользователя, и не окажет ли оно неблагоприятное воздействие на характеристики вашего приложения. • У вас нет необходимости скрывать, что основой вашего устройства яв- ляется ПК. • Вам надо включить функциональные возможности, которые обеспечива- ются только патентованным ПО сторонней компании. Хороший пример этому — поддержка флэш-фильмов. По меньшей мере, одна группа уди- вительно далеко продвинулась в дешифровке технологии флэш и предо- ставляет стороннюю утилиту проигрывателя. Но всё же, если вы хотите
164 ■ Глава 4. Учимся сами, сверху вниз. Большие встраиваемые системы использовать возможности флэш, не получая при этом жалоб от конечных пользователей, вам понадобится работать с плагином от компании Adobe или с автономным плеером. Во всех имеющих практическую ценность случаях фирма Adobe обеспечивает поддержку только для ОС Windows, Mac OS и Windows СЕ. Хотя есть и плеер под Linux, но хорошей поддерж- кой он похвастаться не может, и его код точно не открыт, так что у вас нет возможности перекомпилировать его для отличных от Intel платформ. 4.3. Встраиваемые системы на основе ARM ARM — фантастически популярное ядро для встраиваемых систем, облада- ющее в высшей степени интересной родословной. Фактически ARM популя- рен настолько, что даже если вы изучите только это 32-битное ядро и не будете знать никаких других, то у вас ещё долгое время не будет проблем на рынке труда. Название ядра — это акроним, изначально произошедший от «Acorn RISC Machine» (RISC машина фирмы Acorn), но сейчас общепринятой рас- шифровкой считается «Advanced RISC Machine» (улучшенная RISC машина). Я не буду глубоко погружаться в историю ядра ARM, но она слишком вос- хитительна, чтобы опустить её полностью, поэтому вот основные сведения. В начале 80-х годов британская компания, называемая Acorn Computers, вы- пускала линейку 8-битных компьютеров на базе процессора 6502. В эту ли- нейку входили такие машины, как Acorn Atom, British Broadcasting Corporation Microcomputers0 моделей А и В, Acorn Electron и ВВС Master. Читатели из Британии и Австралии, возможно, с нежным чувством вспоминают ВВС Micro, поскольку машины этой марки в конце 80-х годов широко использо- вали в средней и высшей школах. В США они не получили распространения в системе образования из-за проблем с электромагнитным излучением, что привело к сложностям при получении одобрения Федеральной комиссии по связи (FCC — Federal Communication Commission). В 1983 году компания Acorn приступила к разработке своего собственного патентованного RISC-микропроцессора для постепенного ухода от процессо- ра 6502. В 1987 году компания выпустила мощный ПК Acorn Archimedes (спро- ектированный в качестве замены ВВС Micro), в основе которого лежала эта новая архитектура. ПК Archimedes и его потомки так и не получили коммер- 0 Обычно называемые «ВВС Micro». Однако акронимом ВВС владеет компания Brown Boveri Corporation, что было причиной каких-то юридических споров. Поэтому формаль- ное название этого компьютера British Broadcasting Corporation Microcomputer.
4.3. Встраиваемые системы на основе ARM ■ 165 ческого признания, и выпуск машины RiscPC, которая заменила Archimedes, был прекращен в конце прошлого века1*. Но микропроцессор ARM был при- нят на вооружение компанией Apple в качестве ядра для своей новой произ- водственной линейки карманных ПК Newton. С того времени и поныне наблюдается неуклонный рост продаж микросхем с ядром ARM. На сегодняшний день это ядро было реализовано в кремнии десятками производителей. Его можно найти внутри различных специализи- рованных продуктов: в КПК, портативных игровых приставках, мобильных телефонах, монтируемых в стойки сетевых устройствах. Компания Intel даже практически отказалась от развития своих доморощенных микропроцессоров i960 RISC (которые в основном применялись в лазерных принтерах и кон- троллерах кэшируемых дисков), отдав предпочтение проекту, базирующемся на ARM. Это семейство продуктов носит название XScale, и в его основе ле- жит вариант ядра StrongARM, который первоначально был разработан компа- нией Digital Equipment Corporation и передан фирме Intel по юридическому соглашению, заключенному в процессе разукрупнения компании DEC. Пер- вые чипы XScale в основном обеспечивали процесс миграции от старого чипа StrongARM SA1110. Современные устройства совершенно иные, со значи- тельно более высокими тактовыми частотами и более гибкой периферией. Представляющие интерес принципиальные черты ядра ARM: • Малый трафаретный размер чипа. • Малое энергопотребление в пересчёте на одну команду (в единицах MIPS/мВт, MIPS — миллион команд в секунду). • Доступность (в виде предварительно скомпилированного IP-блока) как в виде аппаратного ядра, так и синтезируемого программного IP-блока. Сле- довательно, если у вас есть желание заплатить за подходящую лицензию, то вы даже можете синтезировать ядро ARM в своих собственных ПЛИС. Заметьте, компания Acorn сама по себе не производит никаких микросхем. Она только разрабатывает IP-блоки (Intellectual property), относящиеся к ядру. Новичками часто задается вопрос: «Можно ли приобрести ARM-процессоры у других производителей?» Ответить на вопрос можно, сказав, что нет такой вещи, как ARM-процессор. Есть только чипы, содержащие ядро ARM, которые, 1} Впрочем, ещё есть в продаже ПК RISC OS PC на базе ARM, предлагаемые компанией Castle Technology под брендом Iyonix www.iyonix.com. Такая машина удивительно дорога и по стоимости сравнима с оценочными платами для микрокомпьютеров более высокого класса XScale.
166 ■ Глава 4. Учимся сами, сверху вниз. Большие встраиваемые системы безусловно, можно приобрести у многих производителей. ARM-чипы от разных производителей не являются взаимозаменяемыми, то есть здесь дело обстоит не так, как с микроконтроллерами семейства 8051. Общим правилом является то, что многие ARM-чипы, которые мы сейчас считаем общецелевыми устройства- ми, когда-то были специализированными продуктами, спроектированными по заданию одного заказчика или разработанными для конкретного сегмента рын- ка. После пребывания таких чипов в течение какого-то времени в производстве, их производители начинают искать других покупателей. И если оказывается, что в них есть потребность, то микросхемы поступают в широкую продажу. Самые ранние чипы с ядром ARM (от таких компаний, как VLSI) были ско- рее микропроцессорами, нежели микроконтроллерами. У них вообще не было встроенного ОЗУ (за исключением, возможно, ОЗУ для кэширования) или ПЗУ. Используя эти микросхемы, нельзя было создать систему на одном чипе. Такое состояние дел просуществовало приблизительно до 2003 года, когда мы впервые увидели предназначенные для коммерческих проектов общедоступные семейства однокристальных чипов ARM. Вероятно, первым таким семейством, появившимся на общем рынке розничных продаж, была серия LPC2xxx компа- нии Philips. Что касается 2006 года, то появилось несколько других производи- телей, предлагающих однокристальные чипы. Представляется, что наибольшей популярностью будет пользоваться продукция фирм Atmel и ST, хотя в гонке участвуют и другие производители. Эти однокристальные чипы очень недороги и весьма отчетливо нацелены на захват части рынка 8-битных микроконтрол- леров, предназначенных для наиболее сложных устройств. Значительное число многофункциональных 8-битных приложений переводится на микроконтрол- леры ARM, при этом достигается существенное улучшение характеристик этих устройств ценой весьма небольшого увеличения их стоимости. Больше инфор- мации на эту тему приведено в разделе 3.1 и в конце раздела 3.2. Насколько мне известно, в настоящий момент не производится общецеле- вых чипов с ядром ARM в корпусах, которые позволили бы создать прототип устройства без изготовления заказной печатной платы. Следовательно, для построения системы на базе таких чипов имеется четыре способа: 1. Купить оценочную плату производителя чипа и провести начальный этап разработки на ней. Это обычно довольно дорого. 2. Купить оценочную платформу для данного чипа у сторонних фирм. Та- кой вариант обычно гораздо дешевле, чем первый, но может оказаться, что вы будете ограничены какими-нибудь другими аппаратными сред- ствами, которые сторонний производитель решил поместить на плату.
4.3. Встраиваемые системы на основе ARM ■ 167 3. Перепрофилировать готовый прибор, в котором используется пред- ставляющий интерес чип. В качестве довольно обоснованного приме- ра можно отметить, что многие люди создают интересные устройства, переделывая беспроводной маршрутизатор Linksys WRT54G (сейчас WRT54GL). Например, посмотрите информационную страничку по ссылке www.seattlewireless.net/index.cgi/LinksysWrt54g и домашнюю страничку компании Sweasoft на www.sweasoft.com, где можно получить коммерческий набор для замены встроенного ПО для данного прибора. Именно это устройство, правда, базируется на MIPS-процессоре, а не на ARM, но применяется тот же самый принцип. В данном подходе есть проблема: аппаратная часть таких устройств в чём-то сродни бегущей мишени. Производители часто изменяют внутренности своих продук- тов, не меняя при этом номер модели или корпус. Поэтому вы не можете быть уверены, что выбранная вами для переделки версия прибора будет поставляться в неизменном виде. 4. Разработать черновой вариант своей собственной схемы и сделать соб- ственную плату. Нет необходимости говорить, что это весьма рискован- ный путь, если только у вас нет опыта работы с выбранным для при- менения чипом. Я бы одобрил такой способ только в том случае, если нужное вам устройство можно получить с помощью довольно простой модификации хорошо известной схемы, приводимой в технической до- кументации на чип. Не стоит, кстати, считать, что схемы, приводимые на сайтах производителей, точны. Я почти никогда не встречал схем, предоставленных производителем, которые бы полностью соответство- вали схемам оценочных плат. Почти во все схемы внесены исправления, что отражается на реальных платах, но эти исправления не отображены в загружаемой из сети документации! Оставшуюся часть этой главы я намерен посвятить обсуждению микросхе- мы Sharp BlueStreak LH79520 — характерного чипа среднего уровня с ядром ARM720T, предназначенного для таких приложений, как недорогие КПК, GPS-устройства и т. п. Вы должны понимать, что область применений се- мейства ARM гораздо шире сферы использования данного конкретного ядра. Больше информации по этому вопросу можно получить из официальной ба- зовой документации на различные ядра ARM, воспользовавшись ссылкой www.arm.com/documentation/ARMProcessor_Corex/index.Ktml. Я начну с рассказа о неочевидных деталях, а затем перейду к более серьез- ному материалу, касающемуся построения приложений. Пожалуйста, обратите
168 ■ Глава 4. Учимся сами, сверху вниз. Большие встраиваемые системы внимание, что это очень поверхностное описание ARM. Для подробного об- суждения данной процессорной архитектуры понадобилась бы целая книга. Чип Sharp LH79520 представляет собой микросхему в корпусе LQFP со 176 выводами, в которой имеется ядро ARM720T (подробнее об этом далее) и сле- дующие основные периферийные блоки: • Контроллер флэш-памяти/статического ОЗУ. • Контроллер SDR (single date rate) SDRAM. • Контроллер DMA (Direct Memory Access — прямой доступ к памяти), поддерживающий встроенный контроллер ЖК-дисплея, а также внешние DMA-устройства. • Векторный контроллер прерываний (VIC — Vectored Interrupt Controller). • Контроллер цветного растрового ЖК-дисплея. Обратите внимание, что этот контроллер предназначен для работы с STN (SuperTwist Nematic — цветной ЖК-дисплей с матрицей пассивных скрученных нематических элементов) и TFT (Thin Film Transistor — ЖК-дисплей, выполненный по тонкоплёночной технологии) панелями с интегральными драйверами строк/столбцов. Он не разрабатывался для непосредственной работы с сегментами ЖК-дисплея. • 32 К встроенного статического ОЗУ. • Синхронный последовательный порт, предназначенный для таких пери- ферийных устройств, как аудиокодеки. • Два выхода ШИМ. • Три универсальных асинхронных приёмопередатчика (UART), один из которых может работать по ИК-каналу. • Четыре встроенных таймера. Выход одного из таймеров подключён к внешнему выводу. • До 64 линий ввода/вывода общего назначения, мультиплексированных с блоками периферии так, как это описывалось ранее. • Сторожевой таймер. • Модуль часов реального времени (RTC — Real-Time Clock) с функцией по- дачи тревожного сигнала. Часы реального времени тактируются от от- дельного часового кварца с частотой 32.768 кГц. Они продолжают рабо- тать, когда ядро процессорного устройства находится в «спящем» режи- ме. Функция подачи тревожного сигнала может быть использована для вывода ядра из «спящего» режима. • Отладочный JTAG-интерфейс.
4.3. Встраиваемые системы на основе ARM ■ 169 У компании Sharp есть собственная оценочная плата для этого микрокон- троллера, однако она довольно дорога (несколько тысяч долларов). На рынке предложений сторонних фирм имеются не столь дорогие решения, включая LH79520 Card Engine компании Logic Product Development (www.logicpd.com) и mARMalade компании EarthLCD (www.earthlcd.com). Последний продукт — это довольно сложный, но относительно недорогой одноплатный компьютер с разъёмом Ethernet, интерфейсом сенсорного экрана, последовательными портами, интерфейсом ЖК-дисплея (плата продается также в наборе с моду- лем цветного ЖК), слотом для подключения CompactFlash и другими функ- циональными блоками. В нем есть программа начальной загрузки и инстал- лирована ОС Linux, так что для начала работы с платой вам не надо возиться ни с JTAG-адаптерами, ни с чем иным — вы можете делать всё необходимое через последовательный порт. У большинства микроконтроллеров с ядром ARM, включая LH79520, име- ется несколько выбираемых карт распределения физической памяти. Эта функция не является абсолютно необходимой в микроконтроллерах, подоб- ных LH79520, в которых есть устройство управления памятью, но тем не менее у этого чипа имеется три режима отображения памяти (см. Табл. 4.1), выби- раемые комбинацией битов REMAP регистра RCPCRemapCntrl. Таблица 4.1. Варианты распределения памяти LH79520 Диапазон OxFFFFOOOO...OxFFFFFFFF OxFFFCOOOO...OxFFFEFFFF 0x80000000...0xFFFBFFFF 0x60000000...0x7FFFFFFF 0x40000000...0x5FFFFFFF 0x20000000...0x3FFFFFFF OxOOOOOOOO...Oxl FFFFFFF ObOO (по умолчанию) или Obi 1 Периферия АН В Периферия АРВ Не реализовано Внутреннее статическое ОЗУ (повторная) Внешнее статическое ОЗУ SDRAM Внешнее статическое ОЗУ ObOl Периферия АНВ Периферия АРВ Не реализовано Внутреннее статическое ОЗУ (повторная) Внешнее статическое ОЗУ SDRAM SDRAM OblO Периферия АНВ Периферия АРВ Не реализовано Внутреннее статическое ОЗУ (повторная) Внешнее статическое ОЗУ SDRAM Внутреннее статическое ОЗУ Примечание. АНВ (Advanced High-Speed Bus) — это улучшенная высокоскоростная шина, используемая для «важной» периферии. АРВ (Advanced Peripheral Bus) — более медленная улучшенная шина периферийных блоков, используемая для периферий- ных устройств с более низкой пропускной способностью, таких, как универсальные асинхронные приёмопередатчики.
170 ■ Глава 4. Учимся сами, сверху вниз. Большие встраиваемые системы Единственное существенное различие между этими режимами заключает- ся в том, что находится внизу карты физической памяти. После сброса по по- даче питания ядро ARM начинает работу с адреса 0x00000000. Следовательно, согласно настройкам по умолчанию регистра перераспределения памяти по- сле сброса по подаче питания происходит обращение к находящейся по это- му адресу внешней статической памяти (обычно флэш-памяти или EPROM). Настройки по умолчанию микроконтроллера LH79520 предполагают работу с довольно медленной 16-битной памятью в диапазоне адресов 0x00000000... 0x04000000. Фактически в чипе имеется семь банков статической памяти, при этом каждому отведена линия выбора, идущая от микроконтроллера. Каждый банк может быть сконфигурирован уникальным образом по ши- рине шины и по временным параметрам. Единственное исключение, связан- ное с необходимостью обеспечить начальную загрузку LH79520, состоит в том, что нулевая линия выбора должна быть "подключена к 16-битной флэш- памяти (или ПЗУ другого типа с той же шириной шины). Назначения банков по умолчанию показаны в Табл. 4.2. Обратите внимание, что приведённые адреса являются смещениями от начала области статической памяти. Для по- лучения доступа к месту постоянного размещения статической памяти при- бавьте 0x40000000 или используйте непосредственно эти адреса, если вы рабо- таете в режимах с перераспределением памяти ОЬОО или ОЫ1. Таблица 4.2. Исходная ширина шины данных для банков памяти LH79520 Диапазон 0x00000000...0x03FFFFFF 0x04000000...0x07FFFFFF 0x08000000...0x0BFFFFFF 0x0C000000...0x0FFFFFFF 0xl0000000...0xl3FFFFFF 0xl4000000...0xl7FFFFFF 0xl8000000...0xlBFFFFFF Ширина 16 бит 16 бит 16 бит 8 бит 32 бита 32 бита 16 бит При подаче питания имеет место следующая нормальная последователь- ность событий: • Небольшая загрузочная программа переходит с адреса 0x00000000 (в фи- зической памяти) в область адресов 0x40000000...0x5FFFFFFF. Обратите внимание, что загрузочная программа выполняется из того же самого блока физической памяти, так как эти две области зеркально отобража- ются друг в друга. Происходит лишь изменение значения в программном счётчике.
4.3. Встраиваемые системы на основе ARM ■ 171 • Оставшаяся часть загрузочной программы инициализирует контроллер статической памяти и контроллер SDRAM, чтобы обеспечить соответ- ствие карты физической памяти микроконтроллера и подключенных устройств. Заметьте, что периферийные устройства с отображаемыми в память регистрами подключаются к контроллеру статической памяти. • Образ основной программы копируется в SDRAM или встроенное ОЗУ. • В регистре перераспределения памяти устанавливается режим 0Ь01 или Ob 10 (в целом более обычен режим 0Ь01). • Загрузочная программа переходит на адрес 0x00000000, который сейчас соответствует высокоскоростной ОЗУ, обычно 32-битной. • Начинается выполнение копии основной программы. Кстати, область векторов прерываний ARM, начинающаяся с адреса 0x00000000, теперь находится в ОЗУ. А теперь важное замечание. Ядро ARM работает с 32-битными словами. Оно ожидает, что внешние аппаратные средства обеспечат необходимое вы- равнивание байтовых потоков при работе с устройствами и блоками памяти, имеющими ширину шины меньше 32 бит. Поэтому важнейшей заботой яв- ляется программирование контроллера статической памяти на корректную ширину шины устройства, к которому осуществляется доступ, и (в частности, в случае устройств ввода/вывода с распределяемой памятью) использование корректных инструкций при обращении к блокам памяти, шина которых меньше 32 бит. Если вы не примете во внимание последнее предупреждение, вам придётся стать свидетелем очень странных вещей, поскольку контроллер статической памяти будет выбирать неверные байты и, возможно, генериро- вать дополнительные ненужные циклы чтения и записи. Например, если к шине подключено 16-битное периферийное устройство и контроллер стати- ческой памяти сконфигурирован корректно, то 32-битные чтение или запись будут заставлять контроллер вырабатывать два цикла чтения или записи по 16-битной шине данных. Если же у вас на шине находится 8-битное перифе- рийное устройство, а вы случайно сконфигурировали контроллер статической памяти на 32-битную работу с этим банком, то чтение и запись по адресам, не делящимся на четыре нацело, будет приводить к выборке не тех линий шины данных. Раз уж мы обсуждаем тему памяти, то давайте вкратце поговорим о модуле управления памятью (MMU — Memory Management Unit). У чипа ARM720T есть область кэш-памяти размером 8 К. Чтобы её использовать, вы должны включить модуль MMU, поскольку биты включения кэш-памяти устанавли-
172 ■ Глава 4. Учимся сами, сверху вниз. Большие встраиваемые системы ваются постранично в таблицах страниц MMU. Модуль управления памятью работает с двумя структурами: с таблицей «секционных» записей, которые описывают память блоками по 1 МБ, и (опционально) с одной или несколь- кими таблицами «страничных» записей, которые описывают память с более тонкой структурированностью — блоками по 4 К или по 64 К. Трансляционная таблица MMU должна постоянно находиться на границе 16 КБ в памяти. Каждая запись в любой из этих таблиц представляет собой 32-битное сло- во. Подробное описание процесса трансляции адреса и создание страничных таблиц вы можете найти в разделе 6 документа «ARM720T Rev 3 Technical Reference Manual», а суть заключается в следующем. Когда процессор пыта- ется прочитать или записать заданный адрес, этот адрес делится на 1 МБ, а результат используется в качестве смещения в таблице дескрипторов первого уровня (секционный). Полученная таким образом 32-битная запись или го- ворит о том, что вся работа будет вестись в этой 1-МБ зоне, или ссылается на таблицу страниц (дескриптор уровня 2). Биты в табличной записи определя- ют, является область кэшируемой и/или буферизируемой в процессе записи данных, к какому домену принадлежит область и где в физической памяти она должна быть расположена (в случае секционной таблицы со степенью структу- рированности 1 МБ). Самый простой способ работы с модулем MMU заклю- чается в создании секционных записей, которые распределяют всю память на прилегающие друг к другу блоки, начиная с адреса 0x00000000, с разрешени- ем там, где это необходимо, кэширования и буферизации. Поскольку размер таблицы напрямую зависит от того, насколько далеко заходят ваши адреса, то размещение всей программы внизу секционной таблицы минимизирует число записей, которые необходимо создать. Улучшенным ОС, в частности тем, в которых реализована виртуальная память, приходится реализовывать страничные таблицы для того, чтобы они могли обеспечить распределение па- мяти с большим разрешением. Как и практически все модули MMU, модуль управления памятью микроконтроллера ARM720T содержит буфер предысто- рии трансляций (TLB — Translation Lookaside Buffer), кэширующий 64 наибо- лее часто используемые секции, чтобы не было необходимости искать их по таблице. С точки зрения программиста на ассемблере, ARM720T — это RISC- микроконтроллер, имеющий архитектуру фон Неймана, с чрезвычайно орто- гональным набором команд, длина которых составляет 32 бита. Суффикс «Т» указывает, что данный чип также поддерживает режим Thumb. В этом режи- ме размер слова команды равен только 16 битам, что предполагает увеличе-
4.3. Встраиваемые системы на основе ARM ■ 173 ние плотности кода и потенциально увеличение скорости выполнения, если исполняемый код поступает из 16-битного блока памяти. Однако, когда ак- тивирован режим Thumb, невозможен доступ к части регистров общего на- значения, неработоспособны некоторые функциональные блоки, и поэтому выполнение алгоритма происходит медленнее. В дальнейшем, если другое не указано, я буду говорить о режиме ARM (32-битном), а не о 16-битном режиме Thumb. Обратите внимание, что в режиме ARM все инструкции выполняются только при выполнении определённого условия (режим условного выполне- ния). Эта особенность недоступна в режиме Thumb. В ядре ARM имеется шестнадцать регистров общего назначения: R0...R15 (в режиме Thumb нет прямого доступа к R8...R12). Регистр R15 зарезерви- рован для использования в качестве программного счётчика (PC — Program Counter). Регистр R14 используется как регистр связи при выполнении ко- манд ветвления (в ассемблерах ARM ему присваивают название LR). Регистр R13 — указатель стека (SP — Stack Pointer). Имеется также регистр состояния CPRS (Current Program Status Register — регистр текущего состояния програм- мы). Этот регистр состояния (статуса) активен для команд условного перехода и прочих, когда процессор работает в непривилегированном пользователь- ском или системном режимах. Если ядро переводится в привилегированные режимы — FIQ, Supervisor, Abort, IRQ или Undefined, — предопределённые регистры SPSR, LR и SP перераспределяются, так что у каждого из этих режи- мов могут иметься свои собственные регистры связи, указатели стека и слова состояния (их не надо сохранять при выходе из привилегированного режима; они хранятся в ядре отдельно). Кстати, если вы не знакомы с высокопроизводительными RISC- архитектурами, то, возможно, найдёте идею введения регистра связи немно- го странной. Микроконтроллеры с CISC-архитектурой обычно выполняют команду вызова подпрограммы, помещая текущее значение программного счётчика в стек и осуществляя переход на новый адрес назначения. Соответ- ствующая команда возврата из подпрограммы автоматически выталкивает из стека в программный счётчик адрес возврата. С другой стороны, для микро- контроллеров с RISC-архитектурой типичным является наличие регистра связи и специальной команды перехода, которую обычно именуют «переход со связью» (branch with link). Мнемонической командой на ассемблере ARM является инструкция «Ы». Команда перехода со связью работает посредством копирования адреса возврата в регистр связи (тот, который определён в набо- ре команд процессора данной архитектуры) и перехода по адресу назначения.
174 ■ Глава 4. Учимся сами, сверху вниз. Большие встраиваемые системы Для возврата в вызывающую программу вы используете команду, которая ко- пирует значение из регистра связи обратно в программный счётчик. В ARM- процессорах такими командами могли бы быть «Ьх 1г» (безусловный переход по адресу, заданному в регистре связи) или «mov pc, lr» (скопировать значение из регистра связи в программный счётчик). Обратите внимание, что эти две команды не вполне идентичны. Преимуществом данной системы является то, что вы можете избежать обращений к памяти, когда осуществляете нерекурсивные вызовы во вну- треннем цикле функции. Это может существенно увеличить производитель- ность. У вызываемой функции также нет необходимости работать со стеко- вой арифметикой, если она создала в стеке какие-то локальные переменные. Она может передать управление непосредственно вызывающей программе, используя регистр связи, а вызывающая программа может просто вернуть указателю стека то значение, которое в нем было до вызова функции, и все локальные переменные и передаваемые параметры будут автоматически очи- щены. Обычно спецификация на ARM определяет, что регистры R0...R3 ис- пользуются в Си-функциях для передачи первых четырёх параметров, остав- шиеся параметры передаются через стек. Концептуально вы можете считать регистр связи высокоскоростным кэшем последнего адреса в стеке. Его нуж- но переписывать в фактическую ОЗУ только при выполнении рекурсивных вызовов функций. К тому же, если регистр связи не используется по своему прямому назначению, его можно задействовать в качестве регистра общего назначения. Я рассказал, насколько великолепны микроконтроллеры ARM, но какие у них есть минусы? В действительности таковых немного, и можно назвать три главных недостатка. Во-первых, система прерываний немного необычна. Ядром поддержива- ется только два режима прерываний — IRQ и FIQ. IRQ (Interrupt ReQuest — запрос прерывания) — низкоприоритетное прерывание. FIQ (Fast Interrupt reQuest — запрос быстрого прерывания) — высокоприоритетное прерывание, которое не рассчитано на сохранение большого количества информации о состоянии процессора, но гарантирует меньшую задержку ожидания обра- ботки, чем IRQ. FIQ поддерживается теневыми регистрами, соответствую- щими R8...R14 и регистру текущего состояния программы CPSR (статусное слово). При прерывании вам не надо сохранять эти регистры, что приводит к снижению задержки ожидания обработки. Поскольку по существу имеет- ся только один уровень прерываний, то прерывания от нескольких источни-
4.3. Встраиваемые системы на основе ARM ■ 175 ков должны быть векторизованы программно. Практически это достигается обращением к содержимому регистра векторного контроллера прерываний (Vectored Interrupt Controller — VIC). Этот способ работает, хотя он немного странен. Во-вторых, и это замечание близко к предыдущему, задержка ожидания об- работки прерываний в архитектуре ARM довольно большая (потенциально — десятки тактовых циклов) по сравнению с 8-битными микроконтроллерами, которые мы все знаем и любим. При возникновении прерывания ЦПУ долж- но завершить текущую команду, что может занять до 15 тактовых циклов для состоящей из нескольких слов команды сохранения в 32-битной памяти в ре- жиме ARM (в случае памяти с более узкой шиной данных ситуация может ока- заться даже хуже). Прерывание также приводит к переключению режима, на что требуется определённое время, и очистке конвейера, что тоже задерживает выполнение первой команды обработчика прерывания. В-третьих, микроконтроллеры ARM не очень эффективно работают с би- товыми данными по сравнению с некоторыми 8-битными ядрами (например, 8051). Это приводит к менее эффективной реализации в них быстрых патен- тованных протоколов последовательного обмена данными и других подобных алгоритмов (декодирование данных, переданных Манчестерским кодом, на- пример), чем в 8-битных ядрах. И аппаратные, и программные средства поддержки проектирования на ARM очень хороши, что, впрочем, следует ожидать для столь популярного ядра. Практически у всех современных чипов ARM есть встроенный JTAG- интерфейс отладки, и многие производители предлагают дешевые JTAG- адаптеры типа вигглер. Самым дешевым из них раньше был адаптер фирмы Macraigor, но сейчас существует ещё более дешёвая версия компании Olimex. В нем специально не заявлена поддержка таких чипов, подобных BlueStreak, поскольку компания Olimex не выпускает оценочных плат на базе этого се- мейства микроконтроллеров. Но так как в них ядро ARM в той или иной сте- пени одинаково, то, раз данный адаптер работает с одним из данных чипов, должен работать и с большинством других. Следует заметить, что большинство архитектурных деталей, описанных мной ранее, представляют наибольший интерес для людей, занимающихся написанием низкоуровневых программ загрузки системы и некоторых кри- тичных по времени исполнения драйверов устройств. Во многих средах ARM вы будете работать с загрузочной программой. Blob — один из таких загруз-
176 ■ Глава 4. Учимся сами, сверху вниз. Большие встраиваемые системы чиков (sourceforge.net/projects/blob/)0. Другим популярным кандидатом явля- ется U-Boot (sourceforge.net/projects/u-boot). Ещё одним выбором может быть RedBoot (sourceware.org/redboot/). У всех этих программ примерно одни и те же базовые функциональные возможности: они загружают образ ОС и переда- ют ей управление. Дополнительно загрузочная программа обеспечивает поль- зователю интерфейс для работы с последовательным портом (или, возможно, интерфейс telnet), позволяя вам отвергнуть нормальный процесс загрузки и загрузить с устройства внешней памяти образы каких-нибудь новых ОС. Вы можете также выбирать разные варианты загрузок из внешней памяти, а в не- которых случаях — загрузку из устройства, соединенного по сети с загрузоч- ным fttp-сервером, и, если возможно, загружать ОС с него. В большинстве приложений с микроконтроллерами ARM загрузочная про- грамма будет задавать начальные параметры системы и загружать образ ис- пользуемой вами ОС из внешней памяти (она может находиться в используе- мой при загрузке флэш-памяти, или на жестком диске, или даже загружаться через сеть). Следовательно, к тому времени, когда запустится ваша програм- ма, большая часть присущих процессу загрузки тонкостей, о которых я напи- сал ранее, уже будет успешно пройдена. Самое большое, что вам понадобится сделать, — настроить модуль управления памятью. Что касается инструментов написания ПО, то вам предоставляется не- сколько вариантов на выбор. Компания Microsoft предлагает набор про- граммных средств поддержки разработок под Windows СЕ, фирма Keil вы- пускает для контроллеров ARM свой собственный компилятор с языка С (вы вправе ожидать, что он по всем статьям превосходит другие подобные компиляторы, поскольку ARM фактически принадлежит этой фирме). У компании Rowley Associates также имеется хороший пакет, хотя на момент написания этой книги их продукт представлял собой просто стандартный набор бесплатных инструментальных утилит (GNU toolchain), встроенных в интегрированную среду разработки (IDE) с приятным пользовательским интерфейсом. Как и в случае других обсуждавшихся ранее ядер, лично я предпочитаю при работе с ARM720T пользоваться утилитами GNU. При «сыром» программировании ARM можно воспользоваться заранее скомпи- лированными инструментальными цепочками для Cygwin (Windows), Linux и Mac OS, которые есть на www.gnuarm.com. Они, вероятно, поддерживают- ся лучше всего. Другим заранее скомпилированным инструментарием явля- 0 Заметьте, что на сайте о blob пишут как о загрузчике для StrongARM. Фактически его также используют и в других чипах ARM.
4.3. Встраиваемые системы на основе ARM ■ 177 ется WinARM (www.siwawi^rubi.uni-kl.de/avr-projects/arm-projects/#winarm). И ещё один пакет, предоставляемый непосредственно компанией Macraigor, можно найти по ссылке www.macraigor.com. Я говорю здесь о «сыром» программировании по той причине, что обще- доступные заранее скомпилированные инструментальные цепочки связаны со встроенной Си-библиотекой newlib. Если вы работаете с какой-то ОС, то, вероятно, хотели бы иметь инструментальную цепочку, скомпилированную с корректным для вашей системы кодом запуска и библиотекой времени испол- нения (run-time library). При работе с ARM Linux для получения более полной информации о корректном инструменте кросс-компиляции посетите стра- ничку www.arm.linux.org.uk. Обратите внимание, что, работая с этими мощными микроконтроллера- ми, вы точно не ограничены применением исключительно языка С. Как ин- струменты GNU, так и другие напрямую поддерживают C++, Java и множе- ство других языков программирования. В некоторых вариантах ARM, но не в LH79520, есть даже аппаратная поддержка интерпретации байткода1* Java — этот сопроцессор называется Jazelle. В огромной степени выбор языка для на- писания прикладных программ будет определяться стоящей перед вами за- дачей. А теперь бесстыдная реклама! Если вы ищете вводный курс, который по- может вам начать работать с процессорами с ядром ARM и инструментарием GNU, то вам стоит обратить свой взор на мою первую книгу «Проектирование встраиваемых систем с минимальными затратами» (Embedded System Design on a Shoestring, Newnes, 2003, ISBN 0-7506-7609-4). Эта книга объяснит вам, каким образом скомпилировать набор инструментов с открытым кодом для работы в Windows или Linux (те же самые инструкции должны привести к же- лаемому результату и в Mac OS, хотя я это не проверял). Она также покажет вам, как следует писать make-файлы, и шаг за шагом проведёт через процесс создания стартового кода, необходимого для начала работы с Си-средой на малом ARM процессоре. В книге описана работа с уже довольно старой оце- ночной платой АТ91ЕВ40 компании Atmel, но основные принципы могут быть перенесены на почти любую оценочную платформу. Эта книга поможет вам начать работать с «голой» платой без какой-либо ОС. Возможно, она по- 0 Байткод — код, в который компилируется программа, написанная на языке Java. Он независим от архитектуры конкретного процессора и может быть исполнен на любом ком- пьютере, где имеется интерпретатор виртуальной Java-машины. — Примеч. ред.
178 ■ Глава 4. Учимся сами, сверху вниз. Большие встраиваемые системы кажется вам не особо полезной, если вы намерены начать работать с ARM платформой, в которой уже загружена, скажем, ОС Windows СЕ или Linux. Говоря об этом, я должен указать, что не стоит замыкаться только на Linux и ОС собственного разлива. Для чипов ARM имеется большое количество ОС: Symbian (используется во многих сотовых телефонах), eCos, Windows CE, Palm OS, VxWorks, uCos-II, NetBSD — список очень длинный. Далее в этой главе я вкратце познакомлю вас с eCos и Linux в контексте встраиваемых систем. Они хороши в качестве учебного материала (являясь в то же время вполне жизне- способными ОС), так как их код открыт и их можно совершенно свободно использовать в собственных разработках. Если в ваши планы входит начать заниматься разработками встраиваемых систем на профессиональной основе, то знакомство с этими двумя ОС хорошо подготовит вас к работе и с другими. Конечно, уже сейчас имеется много рабочих мест в области создания встраи- ваемых систем, где требуется знание Linux. (eCos хотя и используется, но не столь широко, вы не часто встретите упоминание о ней в предложениях рабо- ты.) Если вы решите покупать одноплатный компьютер любого типа с ядром ARM, уже имеющий ОС, то, вероятно, столкнётесь с тем, что придётся вы- брать или ARM-Linux, или Windows СЕ. Перед началом работы с ARM-Linux вам необходимо хотя бы немного познакомиться с процессом запуска Linux, чтобы вы, по крайней мере, могли инсталлировать и запустить собственное приложение. Более подробную информацию по этому вопросу вы найдёте в разделе 4.5. Однако вам не понадобится (по крайней мере, на первом этапе) учиться перекомпилировать и инсталлировать новое ядро или «с нуля» монти- ровать всю корневую файловую систему Linux. 4.4. PowerPC Семейство PowerPC, производимое компаниями IBM и Freescale, — это многофункциональные 32- или 64-битные платформы, применяемые глав- ным образом в приложениях, где самым важным параметром является произ- водительность. Последняя часть предыдущего предложения, конечно, обоб- щение, но оно довольно точно отражает те ситуации, в которых вы, вполне вероятно, столкнетесь с семейством PowerPC. Исторически это семейство взяло начало от экспериментального чипсета компании IBM, созданного, по существу, в рамках исследовательского проекта в конце 70-х годов. Постепен-
4.4. PowerPC ■ 179 но отсюда родилась архитектура POWER, которая использовалась в ряде ра- ботавших под UNIX рабочих станций и серверов RS/6000. Машины RS/6000 претерпели некоторые изменения, и их нынешнее поколение известно под именем eServer p5. Они работают под AIX и под Linux. Архитектура PowerPC вышла из архитектуры POWER. Вы можете прочитать подробную и весьма примечательную историю об этом на www-128.ibm.com/developerworks/power/ library/pa-powerppl/. На сегодняшний день самым последним достижением, достигнутым в процессе эволюции семейством PowerPC, является чрезвы- чайно мощный чип Cell Broadband Engine, который используется в приставке PlayStation. В нём высокопроизводительное ядро PowerPC окружено несколь- кими сопроцессорами, выполненными на том же кристалле. Трудно переоце- нить всё великолепие данного чипа. Он может выполнять весьма запутанные графические трансформации, обрабатывать в режиме реального времени вхо- дящий поток компрессированного цифрового видео и работать со сложными алгоритмами искусственного интеллекта, управляя экранными врагами, с ко- торыми вы сражаетесь, играя в компьютерные игры. Заметность PowerPC на рынке потребительских товаров несколько постра- дала от удара, полученного в 2005 году, когда компания Apple, один из самых крупных заказчиков микросхем с ядром PowerPC, объявила о планах перевода своих компьютеров на ядра х86 фирмы Intel0. Это событие, хотя и подняв- шее шумиху, не очень сильно затронуло разработчиков встраиваемых систем. Большинство чипов с ядром PowerPC не входят в состав настольных компью- теров общего назначения, а скорее являются встраиваемыми процессорами, которые используются в коммуникационных, телеметрических и прочих при- ложениях. В качестве интересного факта следует отметить, что чипы с ядром PowerPC используются во всех имеющихся сегодня на рынке приставках для видеоигр класса «high-end». Эти приложения с лихвой окупают убытки, вы- званные потерей ПК Apple. 0 Это прерогатива писателей и пророков — делать публичные предсказания, которые или настолько верны, что вызывают шок, или настолько неправильны, что заставляют сме- яться до колик. Моё предсказание таково: решение компании Apple перейти на ядро х86 и, в частности, на выпуск утилиты Boot Camp (утилита, которая позволяет запускать Windows на машинах Apple на базе процессоров Intel) приведёт к тому, что Mac OS просуществует ещё пять—десять лет. А затем останется только посмотреть, сможет ли Apple продолжить продавать свои компьютеры, которые стоят как вещи в модных бутиках, когда она станет всего лишь ещё одним производителем машин, работающих под Windows. Конечно, к тому времени, когда это произойдет, Apple, возможно, уже вообще не будет продавать ничего иного, кроме iPod и других подобных устройств.
180 ■ Глава 4. Учимся сами, сверху вниз. Большие встраиваемые системы Забавно, но получилось так, что, когда в 2005 году компания Apple объявила о переходе с PowerPC на х86, я начал серию статей для ресурса developerWorks фирмы IBM, описывающих, какперевести сложные встраиваемые приложения в обратном направлении — с х86 на PowerPC. Немного позже мной были напи- саны другие статьи, описывающие, как создавать мультимедийные устройства на базе PowerPC (тогда как раньше в промышленности подобные устройства делались на платформе Geode от компании National Semiconductor). Вы може- те найти ссылки на все эти статьи на моей страничке www.larwe.com/technical/ current.html. Они находятся в свободном доступе на сайте developerWorks, и для их просмотра не требуется никакой регистрации. Начинать создавать встраиваемые системы на PowerPC — гораздо более за- тратное занятие, чем работа с большинством других архитектур, упомянутых в этой главе. Причина в том, что разработка своей собственной аппаратной платформы на базе PowerPC является весьма сложным и дорогим удоволь- ствием. Гораздо проще начать с готовой оценочной платы. К сожалению, сто- имость таких плат для PowerPC значительно выше, чем для других архитек- тур. Похоже, что не так много компаний занимаются выпуском одноплатных компьютеров на базе этих процессоров, а оценочные платы производителей чипов довольно дороги. В ранее упомянутых сериях статей мной обсуждалось использование в ка- честве платформы для собственных разработок продукта, называемого Кию Box. Это сделанное японцами работающее под Linux устройство сетевого хранения данных (NAS — Network Attached Storage) с процессором МРС8241 (ядро G2, если вы знакомы с этой номенклатурой), внутренним жестким дис- ком (фактически не поставляемым с модулем Kuro Box, вам придётся самим добавить его), интерфейсами Ethernet и USB 2.0, флэш-памятью объёмом 4 Мб и ОЗУ объёмом 64 МБ. Это немного необычный продукт, поскольку до того, как покупатели начали лезть внутрь его, чтобы сделать какое-нибудь другое устройство, он предназначался для широкого потребительского рын- ка и, чтобы быть точным, назывался Buffalo Linkstation. В компании Buffalo поразмышляли и решили выпустить прибор в особой упаковке, специально предназначенный для технически подкованных людей, которых не отпугива- ет Linux и которые хотят делать свои собственные приборы, подключаемые к собственной локальной сети (LAN — Local Area Network). На настоящий момент данное устройство — самый дешёвый способ заняться собственной разработкой на базе PowerPC. В Соединённых Штатах его можно приобрести в компании Revolution (www.revogear.com).
4.4. PowerPC ■ 181 Другим производителем «железа» на основе PowerPC, которого вам стоит иметь в виду, является фирма Genesi USA Inc. Эта компания выпускает не- сколько видов рабочих станций на основе PowerPC, известных под маркой Pegasos. Вы можете познакомиться с производимой линейкой этих продуктов на сайте www.pegasosppc.com. Интересно, что компания Genesi ранее реклами- ровала готовящийся к выпуску портативный компьютер под названием 4U2, построенный на базе чипа МРС5200 и тесно связанный с проектом EFIKA 5К2. Однако 4U2 исчез из виду. К сожалению, продукты от Genesi дороговаты, принимая во внимание то, что находится внутри них. Если вы собираетесь разрабатывать сложное многофункциональное устройство на базе PowerPC, то пока ещё самым дешёвым способом начать такой проект является покупка компьютера Apple PowerMac0. Я бы мог сказать, что при работе с PowerPC лучше всего использовать ком- пилятор gcc. Дело в том, что компания IBM инвестировала большие средства в ОС Linux и вообще в технологии с открытым кодом. И эта компания вносит значительный вклад как в развитие указанного компилятора, так и ОС. Две ОС (Linux и Mac OS), которые установлены на большинстве потребительских компьютеров на базе PowerPC, построены с использованием компилятора gcc. Впрочем, имеется и альтернатива в виде компилятора и отладочной сре- ды TASKING C/C++ компании Altium. Для получения большей информации зайдите на www.tasking.com/products/32_bit/ppc. Однако этот компилятор под- держивается только для использования с ОС реального времени CMX-RTX и RTXC. Маловероятно, что вы будете проводить много времени, работая с ассем- блером PowerPC. Набор команд этой архитектуры достаточно сложен, так что лучше всего доверить оптимизацию кода своему компилятору. Даже относи- тельно простое ядро G2 в процессоре МРС8241 чрезвычайно сложно для пони- мания. В нем имеется 32 регистра общего назначения (GPR0-31), 32 регистра для операций с плавающей точкой (FPR0-31), регистр условий (CR), регистр управления для операций с плавающей точкой (FPSCR), регистр связи (LR) и почти тысяча документированных регистров специального назначения. И это только ядро, не считая блоков периферии на остальной части чипа! Очень сложно добиться производительности лучше той, что даст вам хороший Си- компилятор. Вам понадобится принимать во внимание состояние конвейера команд, поведение кэша, учитывать в условных переходах механизм пред- сказаний (в каждой команде условного перехода имеется «намёк», в котором 0 Сейчас их можно купить только на распродаже. — Примеч. ред.
182 ■ Глава 4. Учимся сами, сверху вниз. Большие встраиваемые системы ядру сообщается, куда, по вашему мнению, вероятнее всего произойдет вет- вление, что оказывает влияние на заполнение конвейера команд). Конечно, программирование этого чипа на ассемблере возможно (а для разработчиков низкоуровневого ПО умение, по крайней мере, довольно бегло читать код на ассемблере просто необходимо). Но мне самому надо узнать ещё очень многое об этом ядре, чтобы предоставить здесь сколько-нибудь значимый для вас ма- териал о нём. Поэтому я отошлю вас к «Справочному руководству по ядру G2 PowerPC» (G2 PowerPC Core Reference Manual). Это документ #G2CORERM/D компании Freescale, который можно загрузить с информационной страницы, посвященной чипу МРС8241, на сайте www.freescale.com. ОС для доморощенной PowerPC системы вы, вероятно, будете выбирать из ряда, который включает Linux (домашняя страничка версии для PowerPC www. penguinppc.org), NetBSD, VxWorks и другие подобные ОС на базе UNIX. Рань- ше компания Microsoft предлагала для систем на PowerPC версию Windows NT, но её поддержка была прекращена (и в любом случае она не была предназна- чена для встраиваемых систем). Имеется ещё несколько специализированных ОС (таких, как вышеупомянутые CMX-RTX и RTXC), но они в действитель- ности не являются продуктами, после покупки CD-диска с которыми вы мо- жете сразу приступать к написанию ПО. Примерно так же, как и при работе с ядром ARM, вы скорее всего купите PowerPC-платформу с пакетом, содер- жащим ОС, уже настроенную на данную платформу и готовую к запуску. На этой базе вы сможете начать создание собственного приложения, не вникая с самого начала в слишком большое количество чудовищных подробностей. Работа с PowerPC на уровне приложений, откровенно говоря, почти неот- личима от работы с х86 — факт, довольно подробно описанный в моей серии статей, посвященных Kuro Box. Интерфейсы, которые вы будете использо- вать (PCI, USB и т. д.), работают практически так же, и у вас зачастую будут обычные чипы периферии для обычных ПК, подключённые к процессору PowerPC. Так что вы сможете использовать существующие коды драйверов без какой-либо переделки (или почти без неё). Единственное реальное отли- чие, которое вы, вероятно, увидите, — это лучшие показатели MIPS/мВт и, в некоторых случаях, лучшая потактовая производительность в таких задачах, как программные DSP-алгоритмы (алгоритмы цифровой обработки сигна- лов). Если вы не делаете что-нибудь уж совсем страшное, то, скажем, пере- нос программы, написанной под Linux для х86, на PowerPC — просто вопрос перекомпиляции. Это весьма кстати для небольших команд разработчиков с жестко ограниченным бюджетом, поскольку означает, что вы можете разра-
4.5. Linux ■ 183 батывать и демонстрировать приложение полностью на обычном настольном ПК, работающем под Linux, а его перекомпиляцию для работы на реальном «железе» произвести тогда, когда последнее будет готово. 4.5. Linux Почти все, кто взялся за чтение этой книги, знают, по крайней мере, что- то об истории Linux и о том, как она была разработана Линусом Торвальдсом (Linus Torvalds), поэтому я не буду углубляться в эту тему. Если вы хотите по- лучить больше информации об этом, то статья, посвященная Linux в Wikipedia (en.wikipedia.org/wiki/Linux), столь же хорошо подходит для этой цели, как и любая другая. Бесспорно, Linux — самая популярная в мире ОС с открытым кодом. Имеются её варианты для множества платформ, и в своём нынешнем воплощении она включает (когда имеется поддержка со стороны аппаратных средств) полностью пригодную к немедленной эксплуатации оболочку гра- фического оконного интерфейса пользователя XFree86. Linux используется во многих устройствах: в настольных ПК, веб-серверах, цифровых видеомагни- тофонах TiVo и КПК. Архитектурно Linux состоит из модульного многозадачного ядра (которое само по себе фактически и является ОС) и многочисленных служебных про- грамм, таких, как процессор командной строки. Работая с Linux, большую часть времени вы взаимодействуете с этими служебными программами, а не с самой ОС. Поэтому некоторые люди ошибочно думают, что программная оболочка — это и есть Linux. Базовое ядро Linux может быть загружено с www.kemel.org. Существуют так- же клоны под специфические архитектуры, такие, как ucLinux (специальная версия ОС для микроконтроллеров, в которых отсутствует модуль управления памятью), arm-Linux (Linux, подправленный для работы с платформами на базе ARM) и другие. Чтобы превратить любой из этих исходных дистрибутивов ядра в настоящую систему Linux, вам понадобится привлечь на свою сторону массу добрых программных духов — от загрузчика, чтобы перенести ядро из внешней памяти в ОЗУ, до инициализатора, который будет управлять запуском и отключением системы. Также, конечно, вам понадобится своё собственное приложение, которое с точки зрения Linux является просто ещё одной про- граммой (хотя она, возможно, потребляет 100% ресурсов вашей системы!).
184 ■ Глава 4. Учимся сами, сверху вниз. Большие встраиваемые системы Что поражает в Linux, так это наличие в ядре огромного набора поддержки аппаратных средств и множество разнообразных пакетов расширений, таких, KaKXFree86 (оконная система графического пользовательского интерфейса). Это великое благо для разработчика встраиваемых систем, поскольку вы мо- жете немедленно приступить к работе с самым разнотипным оборудованием без утомительной необходимости написания собственных драйверов. Linux имеет лицензию GNU GPL°, и сам этот факт является причиной во многом необоснованных страхов, появившихся главным образом вследствие фальсификаций и полуправды, распространяемых продавцами патентованно- го ПО. На деле всё очень просто. Если вы модифицируете некое попадающее под действие лицензии GPL ПО и передаёте его кому-то, то ваш код также по- падает под её действие и вы обязаны по запросу предоставить исходный код с вашими модификациями. Однако есть одно исключение: если ваша програм- ма работает с кодом, попадающим под действие лицензии GPL, только по- средством документированных интерфейсов, то на неё саму распространять действие лицензии вовсе не обязательно. На практике это означает, что если вы модифицируете ядро или какие-либо иные обладающие лицензией GPL программы, формирующие часть типичной установки ОС Linux, то вам по- надобится раскрыть ваш исходный код. Но если вы просто пишете под Linux какое-то приложение, то не попадаете под это требование. Кстати, о GNU2): обратите внимание на то, что единственным «безопасным» инструментом сборки Linux является инструментальная цепочка gcc. В области встраиваемых систем ОС Linux была принята и производителя- ми, и заказчиками. Существуют буквально сотни её вариантов для различных платформ. И в наши дни, вероятно, практически любая 32-битная платформа для встраиваемых приложений, на которую вы только обратите свой взгляд, предлагается к поставке вместе с Linux как одним из вариантов создания си- стемы. Удачным вторичным эффектом является то, что перенос Linux на но- вую платформу часто вовсе не требует никакой работы. Если микроконтрол- лер вообще поддерживается, то имеются шансы, что вам понадобится только взять правильно выбранное ядро, включить несколько дополнительных драй- 0 General Public License — лицензия общего доступа, предоставляющая право на полу- чение и свободное распространение ПО и исходных файлов за право распространения на тех же условиях модификаций этого ПО — обычно в рамках проекта GNU. — Примеч. ред. 2) Рекурсивное сокращение от GNU is Not Unix — проект по созданию свободно рас- пространяемого ПО, начатый в 1983 году Ричардом Столманом в Массачусетсом техноло- гическом институте. — Примеч. ред.
4.5. Linux m 185 веров для аппаратных средств, которые вы используете на вашей плате, ском- пилировать и связать всё это. В оставшейся части данного раздела я познакомлю вас с некоторыми де- талями процесса запуска Linux, чтобы проиллюстрировать, что вовлечено во встраивание данной системы. Большая часть этого текста впервые была опу- бликована на сайте developerWorks компании IBM в статье, написанной мной в 2005 году. Статья была отредактирована, чтобы соответствовать материалу этой книги. Если вы интересуетесь разработками под Linux на базе PowerPC, то я рекомендую вам прочитать всю серию статей, к которым вы можете до- браться через ссылки на моей страничке по адресу www.larwe.com/technical/ current.html. К тому моменту, когда система загрузилась до точки, в которой она может запустить вашу программу, практически любой вариант Linux в значитель- ной степени подобен любому другому. Однако имеется несколько различных методологий, которые вы можете использовать, чтобы осуществить перевод системы от момента сброса по включению питания до работающего ядра, а затем сконструировать файловую систему, в которой ваше приложение будет выполняться разными способами. У каждого подхода есть свои явные преимущества и недостатки. Существу- ет определённая взаимосвязь между реализуемой вами аппаратной частью и тем, как вы структурируете процесс первоначальной загрузки программы (IPL — Initial Program Load0) после подачи питания. Понимание доступных вам программных опций является критической частью исследования, которое вы должны провести, прежде чем приступите к проектированию или выбору аппаратных средств. Самым фундаментальным и очевидным отличием между х86 платами и встраиваемыми системами на базе PowerPC, ARM и прочих платформах явля- ется то, что платы х86 поставляются с одним или несколькими слоями создан- ным производителем скрытым встроенным ПО. При запуске это ПО помогает вам с процессом первоначальной инициализации и задачей загрузки ОС из внешней памяти. Данное встроенное ПО обеспечивает переход из состояния холодного старта в известную дружественную программную среду, готовую к запуску вашей ОС. На Рис. 4.1 представлена диаграмма типового процесса за- 0 Процедура, используемая при запуске компьютерной системы для копирования ядра ОС в ОЗУ. — Примеч. ред.
186 ■ Глава 4. Учимся сами, сверху вниз. Большие встраиваемые системы грузки PC, которая значительно более детальна, чем те, что вы обычно можете встретить в посвященной PC литературе. По экономическим причинам код BIOS современных компьютерных мате- ринских плат всегда хранится в сжатом виде во флэш-памяти. Единственным непосредственно исполняемым кодом в этом чипе является крошечный за- грузочный фрагмент. Поэтому первым делом после подачи питания надо ини- циализировать чипсет материнской платы до такой степени, чтобы заработал контроллер динамического ОЗУ. После этого основной код BIOS может быть декомпрессирован из флэш-памяти в отображаемую область, называемую те- невым ОЗУ. Затем накладывается запрет на запись в эту область и управление передается резидентному коду в ОЗУ. Теневое ОЗУ постоянно контролируется чипсетом материнской платы, и вернуть её впоследствии ОС не в состоянии. Из-за необходимости обеспечения совместимости используются специальные аппаратные средства для отображения области теневого ОЗУ на те же адреса в режиме реальных адресов ЦПУ, в которых в старых ОС типа MS-DOS рас- полагалось ПЗУ с BIOS. Запуск сценариев инициализации и пользовательских приложений Рис. 4.1. Диаграмма типового процесса загрузки PC. Помните, что ПК — это компьютеры с открытой архитектурой. Эта откры- тость распространяется даже на программные модули в BIOS. Как только по- сле подачи питания выполнился инициализационный код (POI — Power-On Initialization), на следующем шаге требуется провести перечисление перифе- рийных устройств и опционально установить связь с имеющимися в этих пе- риферийных устройствах ПЗУ расширения. Некоторые из этих расширений,
4.5. Linux m 187 например видео-BIOS в системе с интегрированным на плату видеоконтрол- лером, физически будут находиться в образе главной BIOS, но концептуально это отдельные сущности. Вот причины, по которым BIOS приходится выпол- нять эту избыточную инициализацию: 1. Главной BIOS нужны базовые консольные службы для того, чтобы вы- давать сообщения и позволять пользователю изменять установленное по умолчанию протекание процесса запуска и конфигурировать специ- фические системные параметры. 2. По историческим причинам размер загрузочной программы пользова- теля ограничен на уровне, чуть меньшем 512 байт. Так как этого про- странства недостаточно для реализации всех возможных драйверов, которые могут потребоваться для доступа к дисплеям и запоминающим устройствам, BIOS необходимо установить стандартизированные про- граммные интерфейсы для всех инсталлированных и распознанных ап- паратных средств, которые могут быть запрошены загрузчиком. Как только все поддерживаемые BIOS системные периферийные устрой- ства инициализированы, главная программа BIOS начинает просмотр кан- дидатов на устройства загрузки (в соответствии с конфигурируемым поль- зователем списком предпочтений) в поисках магического слова сигнатуры. В устройствах хранения для IBM-совместимых ПК по историческим причи- нам используется размер сектора в 512 байт. Поэтому BIOS загружает толь- ко первые 512 байт с выбранного загрузочного устройства. Инсталляционная программа ОС ответственна за хранение в этой зоне кода, достаточного, что- бы загрузить оставшуюся часть в IPL-процессе. Хотя можно написать загрузчик Linux в минималистском стиле, так, что он умещался бы в таком объёме, загрузчики Linux для ПК, используемые на практике, являются двухступенчатыми. В них имеется небольшой фрагмент, который расположен в загрузочном секторе, и больший сегмент, находящий- ся где-то в другом месте загрузочного устройства, обычно в разделе, который содержит корневую файловую систему. Среди загрузочных программ наибо- лее известны LILO и grab, используемые в большинстве инсталляций Linux. В дистрибутивах Linux для встраиваемых приложений популярен загрузчик SYSLINUX. Основная задача загрузчика — загрузить ядро ОС из внешней памяти в ОЗУ. В Linux-системах (х86 или иных) загрузчик также может дополнитель- но загрузить начальный образ псевдодиска ОЗУ. Это маленькая файловая
188 ■ Глава 4. Учимся сами, сверху вниз. Большие встраиваемые системы система, которая полностью находится в ОЗУ. Она содержит минимальный набор модулей, необходимых для того, чтобы обеспечить базовую функ- циональность ОС перед установкой первичной корневой файловой систе- мы. Поддержка начального псевдодиска ОЗУ была введена в ядро для того, чтобы дать средства, которые во время загрузки могли бы обеспечить доступ к многочисленным драйверам устройств (например, к драйверам, которые надо было загрузить раньше, чем можно было установить корневую файло- вую систему). Можно получить некоторое представление о первоначальном сценарии использования псевдодиска ОЗУ, рассматривая загрузочный CD-ROM для инсталляции Linux. Для того чтобы диск мог должным образом производить загрузку на различные системы, на нём должны находиться драйвера для мно- жества разнотипных аппаратных средств. Однако желательно избегать созда- ния огромного ядра со статической связью с каждой опцией (частично по при- чинам, связанным с объёмом требуемой памяти, а также, в меньшей степени, из-за того, что некоторые драйвера конфликтуют друг с другом и их не сле- дует загружать одновременно). Решение этой проблемы состоит в том, чтобы статически скомпоновать в ядре самый минимум драйверов, а все остальные драйвера сделать отдельно загружаемыми модулями, которые затем размеща- ются на псевдодиске ОЗУ. При загрузке на неизвестную целевую систему ядро (или сценарий запуска) создает псевдодиск ОЗУ, находит имеющиеся аппа- ратные средства и загружает только те модули, которые соответствуют теку- щей конфигурации системы. После всего сказанного следует отметить, что многие встраиваемые Linux- приложения работают полностью с начального псевдодиска ОЗУ. Если вы можете выделить нужное количество памяти (8 МБ обычно более чем доста- точно), то это весьма привлекательный способ организации собственной си- стемы. Я отдаю предпочтение этой загрузочной архитектуре по нескольким причинам: 1. В корневую файловую систему всегда можно производить запись. Гораз- до менее трудоёмко иметь открытый для записи корень, чем заставлять все другие программы располагать свои временные файлы в специаль- ных местах. 2. Нет опасности выработки ресурса флэш-памяти в циклах «стирание— модификация-запись» или порчи загрузочной копии корневой файло- вой системы, поскольку система работает с энергозависимым ОЗУ.
4.5. Linux Ш 189 3. Легко выполнить проверку целостности корневой файловой системы во время загрузки. Если вы рассчитаете значение CRC (Cyclical Redundancy Check — циклический избыточный проверочный код) или иного прове- рочного параметра при первой установке корневой файловой системы, то при всех последующих загрузках правильным будет то же самое зна- чение выбранного параметра. 4. Вы можете сжать загрузочную копию корневой файловой системы, и это не отразится пагубным образом на производительности при работе (в частности, представляет интерес в приложениях, в которых корневая файловая система хранится во флэш-памяти). Хотя возможна работа непосредственно из сжатой файловой системы, это приводит к допол- нительным расходам всякий раз, когда вашим программам требуется доступ к этой файловой системе. У сжатой файловой системы есть так- же другая раздражающая особенность, а именно неспособность точно сообщить размер свободной памяти (поскольку оцениваемый размер свободной памяти является функцией предполагаемой степени сжатия тех данных, которые вы планируете записать в эту свободную память). Обратите внимание ещё на несколько моментов, относящихся к Рис. 4.1. Здесь имеет место кодирование посредством оттенков серого цвета. В светло- серых прямоугольниках система выполняет код BIOS, а доступ ко всем си- стемным ресурсам осуществляется через вызовы BIOS. В прямоугольниках с более тёмным фоном система выполняет пользовательскую программу из ОЗУ, но доступ ко всем ресурсам всё ещё осуществляется посредством вызо- вов BIOS. В прямоугольниках с ещё более тёмным фоном система выполняет код ядра Linux из ОЗУ и работает с псевдодиска ОЗУ. Аппаратные средства доступны через Linux-драйверы устройств. Самые тёмные прямоугольники похожи на чуть более светлые, за исключением того, что система работает из какого-либо устройства внешней памяти, а не из псевдодиска ОЗУ. Правила, размещённые в белом прямоугольнике, определяются системой. Отсюда видно, что после загрузки ядра имеется два возможных варианта (хотя на самом деле их больше). Вы можете загрузить начальный псевдодиск ОЗУ и работать полностью с него, использовать начальный псевдодиск ОЗУ, а затем переключиться на главную корневую файловую систему на каком- нибудь другом устройстве внешней памяти или вообще отказаться от псевдо- диска ОЗУ и просто приказать ядру сделать корнем устройство внешней памя- ти. В дистрибутивах Linux для настольных компьютеров обычно используется последняя модель.
190 ■ Глава 4. Учимся сами, сверху вниз. Большие встраиваемые системы Также заметьте, что здесь имеется большое количество избыточного кода. BIOS выполняет системные тесты и настраивает довольно сложную про- граммную среду ради того, чтобы ОС типа MS-DOS чувствовали себя уютно. Ядру Linux приходится дублировать многое из процесса опознания аппарат- ных средств. Обычно, как только загружается ядро, ни одна из находящихся в ПЗУ служб не используется снова (хотя из этого утверждения есть и исклю- чения), но вам все-таки приходится расходовать часть ОЗУ на хранение этого бесполезного кода BIOS. В противоположность сложному загрузочному процессу, присущему х86- платформам, встраиваемое устройство на базе PowerPC, ARM или иных встра- иваемых процессоров переходит в ОС настолько непосредственно, насколько возможно. Хотя существуют дожившие до наших дней стандарты реализации встроенных программных интерфейсов (эквивалентных PC ROM-BIOS) для систем на основе PowerPC, этими стандартами редко пользуются во встраива- емых системах. Общий «скелет» встроенного ПО в такой системе (предполага- ем, что она базируется на Linux) состоит из ядра ОС, минимальной файловой системы и маленькой загрузочной программы. При этом всё располагается во флэш-памяти с последовательным интерфейсом. При подаче питания загрузчик инициализирует контроллер ОЗУ, копирует ядро и (обычно) начальный псевдодиск в ОЗУ. Флэш-память, как правило, медленная, и у неё часто более узкая шина данных, чем у других устройств памяти в системе. Поэтому я практически никогда не слышал, чтобы ядро за- пускалось непосредственно из флэш-памяти, хотя теоретически с несжатым образом ядра это возможно. Большинство загрузчиков также предоставляют пользователю определён- ный интерфейс восстановления (recovery interface), посредством которого ядро и начальный псевдодиск ОЗУ могут быть вновь загружены с какого-нибудь внешнего интерфейса, если копии во флэш-памяти испорчены или отсутству- ют. В данных приложениях используются такие готовые загрузчики, как blob, U-Boot и RedBoot, хотя есть и другие. Имеется также много приложений, в которых используются совершенно оригинальные патентованные загрузчики. На Рис. 4.2 показан типичный процесс запуска встраиваемой Linux-системы, которая построена не на базе х86. Заметьте, что, как и в предыдущем процессе запуска в х86 системах, по- сле загрузки ядра перед вами те же самые два различных пути. Также обрати- те внимание, что, как только управление передаётся ядру, процесс загрузки
4.5. Linux 191 оказывается идентичным процессу загрузки в х86-системах. Этого и следова- ло ожидать. Чем дальше вы проходите в процессе загрузки, тем больше про- граммная среда определяется спецификацией API (Application Programming Interface — интерфейс прикладного программирования) ОС, а не капризами аппаратных средств. Контроллер ОЗУ инициали- зирован Копирование ядра и ОЗУ-диска в ОЗУ Проверка ядра и ОЗУ-диска Проверка приоритетов при проведении инициализации i Запуск сценариев инициализации и пользовательских приложений Рис. 4.2. Типичный процесс запуска для встраиваемого Linux-устройства, сделанного не на основе х86. Точное расположение такой системы во флэш-памяти зависит от двух основных факторов: размера сектора флэш-памяти (обычно примерно 64 КБ) и поведения процессора после сброса по питанию. Ядро, подобное ARM, в программный счётчик которого записывается нулевой адрес, расположит за- грузчик в нижней части адресного пространства флэш-памяти. Ядру, подоб- ному х86, нужно будет поместить загрузчик в верхней части адресного про- странства. Имеется две (а в общем случае четыре) составляющие, которые должны присутствовать во флэш-памяти: загрузчик (обязательно), иногда блок пара- метров, обеспечивающий энергонезависимое хранение опций загрузки, ка- либровочных данных и иной информации, ядро Linux (тоже обязательно) и почти всегда образ псевдодиска ОЗУ. К примеру, в 4 МБ чипе флэш-памяти с размером сектора 64 КБ расположение может быть следующим: 1. 000000...01FFFF: загрузчик (128 КБ). 2. 020000...02FFFF: блок параметров (64 КБ, большая часть, возможно, не используется). 3. 030000...1FFFFF^po(1.8MB). 4. 200000...3FFFFF: начальный образ псевдодиска ОЗУ (2 МБ).
192 ■ Глава 4. Учимся сами, сверху вниз. Большие встраиваемые системы Хотя записывать эти разные сегменты возможно и с пересечением границ секторов (а в случае блока параметров, который, вероятно, более чем на 99% будет пуст, чувствуется особое искушение), это чрезвычайно неразумная прак- тика, которой следует избегать, если только вы не ограничены самым серьёз- ным образом объёмом флэш-памяти. В частности, жизненно важно, чтобы загрузчик располагался в отдельном сегменте, который может быть оставлен защищенным от записи. В противном случае неудачная операция по модерни- зации встроенного ПО может привести к тому, что система окажется полно- стью неработоспособной. Хорошо спроектированная система должна обеспе- чивать возможность безопасного возврата в исходное состояние после любого возможного процесса модернизации, инициированного пользователем. Из всех вышеприведённых компонентов только загрузчик должен быть в обязательном порядке установлен заранее компанией-производителем. Бла- годаря этому загрузочному коду возможен запуск системы, после чего вы мо- жете использовать иные (доступные конечному пользователю) интерфейсы для загрузки ядра и образа псевдодиска ОЗУ. Кстати, здесь внимательный читатель, возможно, задаст вопрос: почему бы во встраиваемых ПК-приложениях не использовать специальное загрузоч- ное ПЗУ, чтобы просто загружать ядро непосредственно с диска (или какого- нибудь иного носителя)? Ответ заключается в том, что, хотя и возможно написание собственной со- кращенной программы самозагрузки для материнской платы ПК (например, проект LinuxBIOS), в тех приложениях, где используют аппаратные средства PC, материнская плата обычно представляет собой «чёрный ящик». Типична ситуация, когда у интеграторов системы даже нет доступа к технической до- кументации и схемам платы. Они бы не смогли написать программу самоза- грузки, даже если бы хотели этого. Более того, при создании ОС предполага- ется, что минимальный набор служб BIOS будет доступен, по крайней мере, в процессе загрузки. Другими словами, это путь наименьшего сопротивления, по которому гораздо проще следовать, чем создавать собственную альтерна- тиву. Так что практически никто не пытается идти «умным» альтернативным путем. Неэффективность многослойного подхода BIOS в целом в системе не- заметна. Теперь, переварив всю предыдущую информацию и предполагая, что вы приблизительно представляете, сколь велики будут ваши программные моду- ли, вы вполне готовы к выбору размеров флэш-памяти и ОЗУ и планирова-
4.5. Linux ■ 193 нию собственной встраиваемой системы. Во многих устройствах использует- ся очень незамысловатая архитектура памяти. В них имеется один чип NOR флэш-памяти с последовательным интерфейсом (на элементах ИЛИ-НЕ, то есть загружаемой), достаточно большой, чтобы в нём содержались загрузочная программа и сжатое ядро ОС. Также в этих устройствах имеется область стати- ческого или динамического ОЗУ относительно большого размера — обычно от 16 до 64 МБ. Хотя это и наипростейшая конструкция, это вовсе не значит, что она самая дешёвая. И если вы проектируете свою собственную систему, то, возможно, захотите рассмотреть и другие альтернативы. Один вариант аппаратной конфигурации, которую я небезуспешно ис- пользовал и которую видел в нескольких других коммерческих продуктах, заключается в использовании в качестве основного загрузочного устройства очень маленького дешёвого (обычно с узкой шиной данных) чипа однократно программируемой (ОТР — One Time Programmable) памяти. При производ- стве данного чипа в него записывается программа автозафузки точно такого объёма, чтобы загрузить образ основного встроенного ПО из внешней памяти и проверить его целостность. Было бы очень полезно, если бы вы к тому же смогли включить немного дополнительных функций, чтобы можно было пере- загружать внешнюю память с каких-нибудь внешних источников — с вынос- ных дисков, последовательного (или Ethernet, USB) порта или откуда-нибудь ещё — в том случае, если образ основного встроенного ПО поврежден. В качестве внешней памяти для образа основного встроенного ПО пред- ставляется разумным использовать флэш-память на элементах И-НЕ (NAND Flash), которая дешевле используемой для загрузки NOR флэш-памяти с по- следовательным доступом. Память NAND-флэш производится в огромных количествах для устройств хранения данных: карт CompactFlash и SD (Secure Digital), USB-дисков, МРЗ-плееров и т. д. Хотя, используя минимальное ко- личество внешней логики, можно подключить NAND-флэш к обычному кон- троллеру флэш/ПЗУ/статического ОЗУ, остается пара причин, по которым вы не можете так просто осуществлять загрузку непосредственно из NAND-флэш. Во-первых, в этом типе памяти не гарантируется отсутствие ошибок, ответ- ственность за коррекцию ошибок и поддержание в безошибочном состоянии информации об адресах плохих секторов возлагается на хост-устройство. Во- вторых, доступ к ячейкам NAND-флэш осуществляется строго последователь- но и поблочно: вы посылаете чипу номер блока, а затем считываете блок в ОЗУ. Следовательно, для физического манипулирования информацией вам ещё по- надобится небольшое загрузочное ПЗУ с обычным произвольным доступом.
194 ■ Глава 4. Учимся сами, сверху вниз. Большие встраиваемые системы Заметьте, что у некоторых микроконтроллеров имеются аппаратные кон- троллеры NAND-флэш, которые устраняют необходимость в указанном мной ранее маленьком загрузочном ПЗУ. Подход, когда полагаешься полностью на такие аппаратные средства, имеет недостаток, заключающийся в том, что система теряет возможность восстановления в случае сбоя, тогда как при ис- пользовании загрузочного ПЗУ эта возможность легко реализуема. Однако если вы ведёте борьбу за минимальные размеры и стоимость и в используемом вами микроконтроллере есть аппаратный контроллер NAND-флэш, то, воз- можно, вы захотите извлечь из него пользу. Такая технология применяется в системах-на-кристалле, используемых в сотовых телефонах. Надеюсь, вы сочли этот материал неплохой иллюстрацией некоторых во- просов, которые вам понадобится рассмотреть при установке Linux во встра- иваемое приложение. Один из веских аргументов в пользу этой ОС — пре- восходная поддержка со стороны инженерного сообщества. Являетесь ли вы человеком, пытающимся установить эту ОС на новую платформу (и попутно узнающим что-то новое в этом процессе) или просто пишете прикладное ПО, вы всегда найдёте поддержку в Интернете — в конференциях Usenet и в раз- личных форумах. Linux используется столь многими людьми и такими разно- образными способами, что вы почти наверняка встретите кого-то, кто сможет помочь вам, ответив на возникшие вопросы. 4.6. eCos eCos — это ОС, разработанная для встраиваемых приложений, несколько меньших, чем те, в которых обычно применяют Linux. По какой-то причине в головах у людей, кажется, образовалась какая-то каша, мешающая им разли- чать эти две ОС. Если вы работаете на небольшой аппаратной платформе или не хотите, чтобы ваш код попал под действие GPL лицензии Linux, то eCos с её открытым кодом может оказаться правильным выбором. Практически так же, как и Linux, ОС eCos поддерживается набором инструментальных средств gcc, поэтому для начала экспериментов с этой системой не требуется никаких финансовых вложений. Хотя eCos в отличие от Linux и близко не подходит в плане поддержки столь широкого разнообразия аппаратных средств, эта ОС была перенесена на вызывающее уважение число ядер (крупных), включая х86, ARM, PowerPC и некоторые другие.
4.6.eCos ■ 195 Адрес домашней страницы eCos — www.ecos.sourceware.org. Вероятно, пер- вым делом вы захотите прочитать лицензию. За использование ОС eCos не требуется выплат авторских отчислений и не требуется раскрывать произве- дённые вами модификации для широкой публики. Как вы увидите из списка поддерживаемого «железа», eCos портирована примерно на сотню различных аппаратных платформ со всеми основными процессорными ядрами. Скорее всего в этот список входят и ядра, используемые вами. Так что есть хорошие шансы, что вам не придётся много трудиться, подгоняя систему к своей аппа- ратной части. eCos — это POSIX-совместимая0 многопоточная ОС с хорошими возмож- ностями для работы в режиме реального времени, поддержкой работы в сети и другими полезными свойствами, такими, как поддержка USB (ведомого), по- следовательного обмена данными и Ethernet. В некоторые версии eCos вклю- чен также код инициализации дисплейного устройства (например, версия для оценочной платы ЕР7312 Cirrus Logic Maverick), хотя в ядро ОС никакой под- держки графического пользовательского интерфейса не встроено. eCos — это не Linux, хотя их часто путают. Поскольку компания Red Hat поставляет разновидности обеих ОС, люди полагают, что eCos — продукт, производный от Linux. Но это совершенно не тот случай. Люди, занимающие- ся поддержкой eCos, тщательно следят за тем, чтобы какая-нибудь часть кода Linux не оказалась среди исходных кодов eCos, а данная ОС не попала под действие лицензии GPL. Главным преимуществом eCos перед Linux (и мно- гими другими ОС) являются гораздо лучшие временные характеристики, обе- спечивающие работу в режиме реального времени2). eCos также конфигури- руема до очень тонкой степени структурированности. Выбирая при компиля- ции лишь несколько конфигурационных опций, вы можете сократить набор драйверов ОС до минимума, требуемого для вашего приложения. Хотя ядро Linux тоже конфигурируемо (вы можете убрать некоторые функциональные возможности из базового образа ядра и, при необходимости, перенести их в динамически подгружаемые модули), но требуемый объём памяти для Linux всё же существенно превосходит требуемый объём памяти для eCos. 1) POSIX — разработанный в 1988 году IEEE набор стандартов, описывающих интер- фейсы UNIX, для обеспечения переносимости приложений между разными версиями этой системы. — Примеч. ред. 2) При сравнении со стандартной версией Linux с расширениями для работы в режиме реального времени (real-time extensions) отвечает требованиям по работе в этом режиме в гораздо большей степени, чем обычный Linux.
196 ■ Глава 4. Учимся сами, сверху вниз. Большие встраиваемые системы Обратите также внимание, что eCos является многопоточной, а не много- задачной ОС. Ваше приложение не «загружается» в том стиле, как Linux загру- жает внешние программы с жесткого диска или из флэш-памяти. В eCos ваше приложение непосредственно связано с ОС — это фактически библиотека и стартовый код, которые статически связаны и, следовательно, запутанным образом вплавлены в вашу программу. Возможный недостаток здесь в том, что в отличие от Linux в eCos вы не можете вызвать внешнюю программу, кото- рая бы выполнила какую-нибудь функцию. Это связано с тем, что в ОС нет такого понятия, как «загрузка» программы (и даже если бы такое понятие су- ществовало, все равно нет предопределённого интерфейса для такой внешне загруженной программы, чтобы получить доступ к сервисам). Если вы хотите включить функциональность какой-нибудь внешней утилиты, то вам понадо- бится интегрировать исходный код этой утилиты непосредственно в ваш соб- ственный код и статически связать его с образом ОС. С коммерческой точки зрения условия лицензионного соглашения — ещё одно преимущество eCos перед Linux. Некоторые инвесторы из-за GPL- лицензии могут настороженно отнестись к использованию Linux в коммерче- ском приложении (хотя эту настороженность подпитывает довольно большое количество прецедентов, и в некоторых из них встречаются названия весьма известных компаний, всё же не следует поддаваться безрассудным страхам). С eCos помимо бесплатного получения всех лицензионных преимуществ платной коммерческой ОС для встраиваемых приложений вы также получае- те для загрузки мощную, мультиплатформенную ОС с открытым кодом. Я включил описание eCos в эту книгу по нескольким причинам. Во-первых, это действительно превосходная учебная платформа, если вы хотите, чтобы ваши навыки написания прикладных программ дополнились умением пи- сать программы для среды встраиваемых приложений. Я не могу представить упражнения более подходящего для развития таких умений, как перенос eCos на новую аппаратную платформу. Во-вторых, eCos в той или иной степени представляет собой надстройку над RedBoot — чрезвычайно гибким загруз- чиком компании Red Hat. Наличие RedBoot в вашей системе — действитель- но весьма полезная штука, поскольку данный загрузчик позволяет загружать ПО через множество разнообразных интерфейсов и записывать его во флэш- память или какую-нибудь другую внутреннюю память. Стоит научиться вести разработку под eCos (здесь используется тот же самый слой абстракции над аппаратной частью), чтобы уметь запускать RedBoot на вашем «железе». Это один из двух самых мощных загрузчиков с открытым кодом (второй U-Boot,
Какой язык программирования мне следует выучить ? ■ 197 который был упомянут в разделе о PowerPC). Хотя о RedBoot часто говорят в связке с eCos, он может быть использован для загрузки любой встраиваемой ОС — Linux, eCos или чего-нибудь из написанного вами самостоятельно. Наконец, eCos — это сама по себе мощная и жизнеспособная ОС, которая прекрасно подходит для потребительских продуктов, что можно увидеть из списка успешно завершённых проектов компании Red Hat. Загрузка проходит очень быстро (особенно по сравнению с Linux), ей требуется относительно не- большой объём памяти, и она является превосходным выбором для 32-битных и сетевых проектов. Мне известно только одно издание, посвященное eCos, — это книга Энтони Масса (Anthony Massa), называющаяся «Разработка встраиваемого программ- ного обеспечения с eCos» (Embedded Software Development with eCos, Prentice Hall, November 2002, ISBN 0-1303-5473-2). Это превосходный справочник, и я рекомендую его вам, хотя к настоящему времени материал несколько устарел, так что придётся обращаться за поддержкой в различные форумы, посвящен- ные eCos. Если вы опытный программист на C/C++ и хотите создать действительно впечатляющее 32-битное встраиваемое приложение, то я полагаю, что eCos позволит вам легко и быстро достичь этой цели. Вы найдёте, что почти во всех отношениях (кроме, возможно, разработки графического пользовательского интерфейса) eCos проще для переноса, чем Linux, и значительно лучше под- ходит для масштабирования на небольшие устройства. Если вам всё же нуж- на поддержка графического пользовательского интерфейса, следует обратить внимание на MiniGUI (www.minigui.org). В данном продукте имеется подроб- но разработанная поддержка eCos. Это не единственный способ реализации графического пользовательского интерфейса в eCos, но на настоящий момент он представляется наиболее поддерживаемым. 4.7. Какой язык программирования мне следует выучить для работы с крупными встраиваемыми системами? Если ограничить фразу «крупные встраиваемые системы» определением, предложенным мной для этой главы, то во всех крупных встраиваемых си- стемах используется та или иная ОС. Пакет собственного ПО, загружаемого
198 ■ Глава 4. Учимся сами, сверху вниз. Большие встраиваемые системы в такую систему, обычно не монолитен. Вероятно, там будет присутствовать слой прикладных программ, которые довольно отчётливо абстрагированы от аппаратной части, и слой драйверов устройств, входящих в состав аппа- ратных средств. Возможно, там будут какие-то программы, находящиеся между этими слоями и которые нельзя отнести в чистом виде ни к приклад- ным программам, ни к драйверам. Если вы читали мою предыдущую книгу «Open-Source Robotics and Process Control Cookbook», то можете предста- вить, что я говорю о чём-то наподобие lircd — программы-демона, которая в системах под Linux декодирует поступающие из драйвера ИК-приёмника сигналы с ИК-пульта дистанционного управления и переводит коды в определённые пользователем строки. Lircd — пример такого рода «находя- щегося посерединке» ПО, о котором я здесь говорю. Если вы незнакомы с работой этой программы, то получить всю информацию о ней и загрузить её можно с www.lirc.org. Из-за такого послойного разделения, вероятно, окажется, что любая по- добная система будет состоять из большого числа программ, написанных на нескольких разных языках. С другой стороны, суммарный объём подобного проекта таков, что часто предполагает работу большой команды разработчи- ков ПО, не обязательно пересекающегося функционально. Следовательно, необходимый набор умений зависит от того, на каком уровне в иерархии аб- стракций вы хотите работать. Если вы хотите работать на самом нижнем уров- не — уровне драйверов устройств и загрузчиков, — вам понадобятся хорошие знания ассемблера и языка С, а также умение работать с аппаратным отладоч- ным инструментарием: адаптерами JTAG и т. д. Если вы собираетесь работать на средних уровнях, то четко определить по- тенциальный набор умений весьма сложно. Некоторые из приложений этого уровня пишутся на довольно экзотических языках, таких, как Perl и Tel, мно- гие приложения — просто Си-программы. На этом уровне иерархии самым важным для вас будет очень хорошее понимание того, как сконструирован остов ОС и какие сервисы требуются для выполнения ваших приложений. Возможно, вам также понадобится уметь управляться с осциллографом и/или инструментами анализа протоколов, чтобы разобраться с тем, что происходит с вашим кодом, если вдруг возникнут проблемы во взаимодействии с драй- верами устройств или понадобится понять какие-нибудь запутанные аспекты состояния ОС.
4.8. О проблеме выбора чипа ■ 199 На верхнем уровне иерархии требуемые навыки определяются природой конечного продукта. Возможно, вы будете работать с Adobe Flash, Java или C++. Это полностью зависит от конечного продукта. Здесь будут очень полез- ны умения, которые вы обрели, программируя на уровне прикладных прило- жений в потребительских ОС. Вероятно, вы не будете отлаживать ваши про- граммы, используя аппаратные инструменты как таковые, но будете запускать отладчик-заглушку на целевом устройстве и обмениваться с ним информаци- ей через последовательное или Ethernet-соединение, чтобы посмотреть, как работает данное устройство. Но то, что вам понадобится умение проводить аппаратную отладку, крайне маловероятно. Кстати, вам не следует принимать весь этот разговор о больших коман- дах и программистах, работающих внутри изолированных коконов, как не- что данное свыше и неизменное ни при каких обстоятельствах. Я могу ска- зать по собственному опыту, что бывают случаи, когда многофункциональные 32-битные системы полностью разрабатываются одним-единственным инже- нером. Я уделяю особое внимание работе в большой команде по той причине, что материал данной главы в целом предназначен для читателей, которые в основном имеют опыт программирования на прикладном уровне. Я пытаюсь показать, каким образом человеку, обладающему опытом программирования на Java, но не очень разбирающемуся в системах реального времени, можно войти в мир этих чрезвычайно сложных систем. Если у вас есть опыт рабо- ты (или вы хотите его получить) на более НИЗКОМ уровне программной ие- рархии, то вы вполне можете создать свою собственную 32-битную систему, и некоторые из упомянутых мной ресурсов могут оказать вам помощь в до- стижении этой цели. Однако, в дополнение ко всем обсуждаемым в этой главе вопросам высокоуровневого программирования, вам понадобится и хорошее понимание низкоуровневых деталей, а также тех критериев выбора, которые были упомянуты в предыдущей главе, где я рассказывал о гораздо более «близ- ких к железу» системах. 4.8. О проблеме выбора чипа В этом разделе я попытаюсь показать вам все радости выбора микрокон- троллера класса «high-end» для встраиваемого приложения. Проблемы и критерии выбора здесь часто совершенно иные, чем те, с которыми вы стол- кнулись бы в процессе выбора 8-битного МК. Ставки тоже выше, поскольку
200 ■ Глава 4. Учимся сами, сверху вниз. Большие встраиваемые системы проектирование 32-битной схемы обычно является значительно более тру- доёмким делом, чем проработка большинства 8-битных проектов. Выбор 32-битного чипа столь тяжёл потому, что если вы прорабатываете вопрос о применении этих многофункциональных микросхем, то перед вами стоит задача создания довольно сложного приложения. Таким образом, вы, ис- пользуя техническую документацию конкретного микроконтроллера, должны решить, сможет ли он обеспечить всю необходимую вам функциональность. Это очень сложно, в частности потому, что на этапе, предшествующем созда- нию прототипа, всё находится в «подвешенном» состоянии и требования сами по себе могут быть подвержены изменениям. Часто происходит так, что вам вручают список самых важных пожеланий, реализация которых в одном про- екте просто невозможна без изменения указанной себестоимости. В общем случае ожидается, что вы предоставите несколько вариантов, реализация ко- торых возможна, маркетологам, а они в свою очередь выберут один, который будет продаваться лучше всего. Кстати, здесь имеется одно не столь уж редкое исключение. В некоторых счастливых случаях вы занимаетесь выбором 32-битного чипа просто из-за необходимости иметь дополнительное адресное пространство, поскольку по каким-то причинам вашему приложению требуется много прямо адресуемой памяти. Если ваше устройство попадает в эту категорию, воздайте благодар- ность вашей счастливой звезде! Я проиллюстрирую проблему, поднятую в этом разделе, практическим примером из собственной карьеры. Несколько лет назад меня попросили раз- работать новую, существенно улучшенную версию мультимедийного устрой- ства. Список пожеланий, взятый, видимо, с потолка, был удивительно длинен и включал следующие пункты: • Графический дисплей высокого разрешения с быстрым временем от- клика и возможностью наложения специальных эффектов и анимации, когда на экране появляется новая картинка. • Воспроизведение DVD. • Поддержка файлов видеозаписи форматов MPEG-1, MPEG-2, MPEG-4 и QuickTime, а также файлов аудиозаписи формата МРЗ. • Поддержка записи CD- и DVD-дисков. • Встроенный жёсткий диск. • Проводной и беспроводной Ethernet.
4.8. О проблеме выбора чипа ■ 201 • Возможность получать изображения через Bluetooth. • Дистанционное ИК-управление. • Возможность проигрывать фильмы Macromedia Flash. • Полностью описываемая сценариями работа (scriptable operation). • Поддержка карт всех популярных цифровых камер Flash media. • В идеале схема должна быть способна работать с ЖК-панелями всех раз- меров в диапазоне от 5.7 дюйма по диагонали (разрешение 320x240 — QVGA) до 23 дюймов (разрешение 1280x1024 — SXGA) при 24 битах на пиксель. • В идеале, в случае версий с маленькими экранами, схема должна позво- лять работу при питании от батареи. Как вы видите, здесь приведено множество требований, некоторые из ко- торых конфликтуют друг с другом. Таким образом, я начал поиски, взяв за основу самую очевидную для пользователя функциональную возможность, а именно начав с поиска аппаратных средств видео. Как оказалось, это был хороший выбор для первой верификации, поскольку именно эта функцио- нальная возможность оказывает основное влияние на все конструктивные решения продуктов такого рода. Сложностей было множество. Для управле- ния маленькими дисплеями (до VGA разрешения, 640x480) дешевле всего ис- пользовать высокоинтегрированный микроконтроллер, выполненный в виде системы-на-кристалле, с встроенным контроллером ЖК-дисплея. Некоторые производители предлагали нам чипы, которые бы хорошо работали при низ- ких разрешениях. Однако почти во всех этих устройствах применяется унифи- цированная архитектура памяти: пропускная способность ОЗУ делится между исполняющимся кодом и DMA-периферией (периферийные устройства с прямым доступом к памяти), к которой относится и контроллер ЖК-дисплея. Когда вы увеличиваете разрешение и глубину цветопередачи на выходе ви- део, то радикально уменьшаете пропускную способность, доступную для вы- полняющейся программы. Это означает, что при разрешении, превышающем разрешение QVGA, ЦПУ будет настолько не хватать пропускной способности, что он не сможет справляться с задачами декодирования видео (даже для более скромных форматов типа MPEG-1 с разрешением уровня VideoCD, не говоря уже о попытке осуществить полностью программное декодирование MPEG-2 с разрешением DVD). Более того, не нашлось ни одного SoC-устройства, ко-
202 ■ Глава 4. Учимся сами, сверху вниз. Большие встраиваемые системы торое бы могло обеспечить более высокие разрешения, желательные для мо- делей с большим экраном. Поэтому для обеспечения поддержки высоких разрешений было необ- ходимо использовать внешний видеоконтроллер. К сожалению, все под- ходящие микросхемы спроектированы для применения в составе ноутбу- ков. Это не только означает, что на данные чипы крайне сложно добыть техническую документацию, но их также практически невозможно купить в малых количествах (где «малое количество» определяется как «меньше нескольких сот тысяч в год»). Хуже всего то, что для всех них требуется поддержка шины PC/или AGP, но ни один из них не предназначен просто для подключения к микроконтроллеру. Поддержка шины PCI имеется в довольно небольшом числе чипов, поскольку она не требуется в подавля- ющем большинстве встраиваемых устройств. Вы можете купить различ- ные интерфейсные микросхемы с шины PCI для чего-нибудь другого, а также сделать сами что-либо подобное на FPGA (Field Programmable Gate Array — программируемая вентильная матрица). Некоторые производите- ли специально для такого применения даже поставляют матрицы FPGA со встроенной на одной стороне поддержкой PCI, но реализовывать всё это действительно муторно. Вдобавок на сегодняшний день все видеочипсеты для ноутбуков постав- ляются в корпусах BGA (Ball Grid Array)0, на которых мы не смогли бы сде- лать прототип (полный набор оборудования для сборки и проверки доволь- но дорог), так что производство макета пришлось бы отдавать «на сторону». Для обеспечения поддержки больших панелей на той же самой аппаратной части, которая используется с малыми экранами, нам бы пришлось ввести мощный микроконтроллер, потребляющий много энергии (что приведёт к малому времени непрерывной работы моделей с батарейным питанием) и имеющий встроенный интерфейс шины PCI. Нам также пришлось бы де- лать разработку на одном из труднодоступных, предназначенных для ноут- буков чипов работы с видео, которые находятся в производстве очень недол- гое время, что продиктовано реалиями рынка компьютеров для массового пользователя. 0 Конструкция корпуса микросхемы с выводами в виде металлических шариков, рас- положенных регулярным образом по всей нижней поверхности корпуса. — Примеч. ред.
4.8. О проблеме выбора чипа ■ 203 В конечном счёте, главным образом из-за сложностей с изготовлением макета и покупкой комплектующих, мы решили отказаться от попытки раз- работать свою собственную схему, а использовать одноплатный компьютер, имеющий на плате большинство требуемых функциональных блоков. Одна- ко, пытаясь выбрать подходящий одноплатный компьютер, при тестирова- нии мы столкнулись с проблемой, связанной с воспроизведением видео на нормальной скорости. У нас были некоторые исходные данные, относящиеся к воспроизведению видео на ПК, но тестирование параметров работы видео довольно уникально. Вам в действительности надо оценивать одновременно параметры ЦПУ, подсистемы памяти, интерфейса диска или сети (зависящие от того, насколько компрессированный поток видео будет приходить к вам), аппаратного ускорения, обеспечиваемого видеоконтроллером, и способ- ность драйвера устройства использовать все эти системы. Иными словами, требуется составить представление, насколько хорошо ваша ОС поддержи- вает аппаратные средства, которые вы намерены использовать. Мы собира- лись использовать в своём устройстве Linux. Имелось несколько одноплатных компьютеров с очень мощными ЦПУ, но их чипсеты, отвечающие за работу с видео, не имели хорошей поддержки со стороны Linux. Другие одноплатные компьютеры обладали великолепной поддержкой Linux во всём, но их цен- тральные процессоры были слишком уж медленными для требуемых задач анимации изображения. Мы так и не смогли найти плату, которая бы долж- ным образом работала непосредственно с большими панелями с диагональю 17 дюймов. В этих панелях используются многоканальные интерфейсы LVDS (Low-Voltage Differential Signaling — дифференциальный метод передачи с ис- пользованием низковольтных сигналов) с обработкой за один такт множества пикселей, которые не обеспечены хорошей поддержкой со стороны применя- емых в ноутбуках чипсетов. Данные интерфейсы предназначены для исполь- зования в настольных мониторах. Интересно заметить, что мы пришли к компромиссным решениям по многим вопросам. Мы временно отказались от идеи создания действительно маленьких моделей и решили сфокусироваться на устройствах большего раз- мера, использующих аналоговое видео, чтобы избежать абсолютной несовме- стимости видеочипов для ноутбуков с большими панелями. Продукт оказался чрезвычайно успешным с коммерческой точки зрения. Однако наша первона- чальная идея объединения микроконтроллера StrongARM с программируемой логической матрицей или DSP-процессором, которые будут ответственны за декомпрессию видео, была полностью отвергнута. Фактически мы сделали
204 ■ Глава 4. Учимся сами, сверху вниз. Большие встраиваемые системы что-то очень сильно напоминающее приборную панель с одноплатным х86- совместимым компьютером внутри0. Надеюсь, что этот рассказ послужит вам иллюстрацией того, как завышен- ные функциональные требования могут привести к проблеме невозможности их реализации разумным образом. !) Стоит отметить, что развитие электроники приводит к тому, что граница «нереализуе- мых требований» постоянно смещается в сторону всё более сложных задач. Например, ещё в 2005 году компания Dell выпустила КПК X50V, в котором использовался процессор Intel XScale 270 на основе архитектуры ARM9 с тактовой частотой 624 МГц и аппаратный уско- ритель видео Intel 2700G, а также сенсорный ЖК-экран 3.8" с разрешением VGA (640x480), флэш-память 128 МБ и ОЗУ 64 МБ. Этот КПК способен автономно работать от аккуму- ляторов до 6 часов в режиме воспроизведения видео, сжатого по стандарту MPEG4 (что более ресурсоёмко, чем упоминавшийся автором MPEG2), оснащён всем необходимым для вывода информации на внешний экран с разрешением до 1024x768 точек, а также бес- проводными интерфейсами ИК, BlueTooth и Wi-Fi и проводными USB и СОМ. И всё это упаковано в небольшой корпус размером чуть больше пачки сигарет и весом 190 г, включая аккумулятор, дисплей и встроенные динамики. — Примеч. науч. ред.
5 ГЛАВА САМ СЕБЕ ИНЖЕНЕР 5.1. Работа на самого себя? Риски и преимущества Примерно раз в квартал я встречаюсь с группой людей, состоящей из инже- неров и различных IT-специалистов (разработчиков веб-сайтов, программи- стов баз данных, технологических консультантов и т. д.). Мы вместе обедаем и обмениваемся историями о менеджерах, контрактах и заказчиках. Время от времени в группу приходит новичок, желающий поделиться своим правди- вым рассказом и послушать наши, а заодно решить, не начать ли ему работать на стороне. Большинство из таких новичков в результате решают продолжать заниматься своей нынешней работой. Работать инженером-консультантом по встраиваемым системам — дело сложное. Если вы прежде работали только в штате какой-нибудь компании (даже относительно маленькой), то, возможно, просто не имеете представле- ния о том, как много структур помогают вам в течение рабочего дня. Если вы замучены текучкой, к концу рабочего дня чувствуете себя измотанным и пола- гаете, что обеспечение самого себя заказами приведёт к свободе, то, боюсь, у меня для вас очень неприятные новости. Для успешной самостоятельной рабо- ты требуется гораздо больше усилий, и периодически вы будете подвержены ещё большим стрессам, чем на своём обычном рабочем месте. Более того, если вы не очень организованы и не работаете согласно установленному плану, то потеряете заказчиков из-за глупых упущений и ошибок.
206 ■ Глава 5. Сам себе инженер Ключевое отличие между работой «на дядю» и на самого себя состоит в том, что обеспечение себя заказами позволяет вам выбирать, на что следует нацелиться. Вот несколько положительных поводов для того, чтобы начать работать самостоятельно: • Выполняя контракт по совместительству, в пересчёте на час работы вы получаете в два раза больше своей обычной часовой ставки и хотите сфо- кусировать всё своё внимание на том, что приносит деньги (подробнее об этом далее). • Есть соображения, связанные с сохранением здоровья. Например, при- ходится слишком много работать сверхурочно или вы непримиримо конфликтуете с коллегами. Работа на самого себя далеко не свободна от стрессов, но, по крайней мере, вам не придётся противостоять компа- нии. • У вашего работодателя финансовые проблемы. Он выходит из того сег- мента рынка, устройства для которого вы проектируете, или всё больше переводит работу вашего отдела в расположенные в других странах фир- мы. • Вам скучно заниматься поддержкой ранее написанных кодов или отра- ботанных схем и вы хотите работать там, где будут более разнообразные проекты. • Вам нравится принимать участие во всём цикле создания продукта — от концепции до реализации и маркетинга. А вот некоторые фундаментальные отрицательные поводы, которые за- ставляют отказаться от идеи начать работать на самого себя (говоря «отрица- тельные», я имею в виду то, что из-за них вы не сможете достичь поставлен- ных целей): • Вам не нравится структурированный подход к созданию продукта. • Вам нравится делать макеты для демонстрационных целей, но вы нена- видите возиться со всякими мелочами, сопутствующими разработке лю- бого продукта и обеспечивающими его надёжность и технологичность. Между ручной сборкой одного прототипа и конструированием того же самого типа продукта для условий автоматической или осуществляемой рабочими с низкой квалификацией сборки лежит огромная дистанция. • Вы хотите, чтобы работа занимала меньше времени. • Вы ненавидите работу с бумагами.
5.1. Работа на самого себя ? Риски и преимущества ■ 207 Как и любое другое жизненно важное решение, решение заняться консуль- тационной работой требует тщательного обдумывания. К положительным моментам относится то, что у вас будет максимум возможностей управлять собственной профессиональной судьбой. Вы сможете установить свой набор правил и критериев, использовать собственный стиль проектирования и вы- бирать, за какие проекты вы хотите взяться, а от каких стоит отказаться. У вас также будет неофаниченный доступ к полученной от ваших работ прибыли (после уплаты налогов). Не будет толпы менеджеров или инвесторов, жажду- щих своего куска пирога. Будучи консультантом, можно самостоятельно обе- спечивать финансовую подпитку каких-нибудь очень интересных проектов, полных восхитительных технических задач и, разумеется, часто сулящих зна- чительную прибыль. Это ценно и само по себе (многие инженеры «удаляются» в сферу консультационных услуг ради дополнительного дохода и поддержа- ния мозгов в активном состоянии), и просто как способ оглядеться вокруг, сохраняя при этом свои навыки готовыми к бою, а счета оплаченными, пока вы решаете, куда следует пойти работать дальше. Кстати, консультационные услуги — отличный способ налаживания связей. Люди, ищущие сегодня кон- сультанта для работы над своим первым проектом в сфере электроники, зав- тра будут искать кого-нибудь, кто будет работать на постоянной основе над их линейкой электронной продукции. Недостаток службы в «театре одного актера» в том, что при работе на само- го себя почти всякое принятое вами решение может означать выбор между жизнью и смертью. Это пугает, но тому есть причины. Рядом не будет нико- го, готового выкладываться наравне с вами, чтобы помочь вам с мириадами проблем, без решения которых ни одно дело не будет выполняться должным образом. Если вы будете работать как единоличный собственник (в противо- положность акционерной компании), вам, возможно, придётся также по- беспокоиться по поводу личной ответственности в случае неудачи одного из ваших проектов. Вам придётся искать баланс между ожидаемой прибылью и стоимостью рекламы, установки факсимильной связи и/или покупки какого- нибудь оборудования. Вы будете совершать ошибки (это неизбежно!), за кото- рые придётся платить из собственного кармана. Если всё вышеперечисленное ещё вас не напугало, примите мои поздрав- ления и, пожалуйста, продолжайте читать.
208 ■ Глава 5. Сам себе инженер 5.2. От совместительства к статусу консультанта. Бухгалтерия, налоги и объём работ Отслеживание финансовых вопросов, обеспечение прибыльности и вы- платы налогов с дохода согласно закону — это, вероятно, одна из самых слож- ных и неприятных задач из тех, с которыми имеет дело свободный художник. То, о чем я собираюсь здесь сказать, содержит юридическую терминологию действующего в Соединённых Штатах налогового законодательства. Но в большинстве развитых стран приняты очень похожие законы. Пожалуйста, обратите внимание на очевидную оговорку: я не бухгалтер, и к данному тек- сту в любом случае не следует относиться как к формальному налоговому уведомлению. Более того, налоговое законодательство — это очень сложная, специализированная и постоянно меняющаяся область. Для получения под- робных рекомендаций по поводу конкретных проблем вам следует консульти- роваться с дипломированными бухгалтерами или иными профессионалами, которым платят за прояснение соответствующих настоящему дню налоговых правил. Гораздо лучше пять-шесть раз в году (по разу в квартал и, возможно, дополнительный раз в сезон выплаты налогов) раскошелиться за несколько часов работы дипломированного бухгалтера, чем потратить значительно боль- ше собственного времени, пытаясь разобраться в этих вопросах самому. Я уже не говорю о том, что если вы сделаете ошибку, то окажетесь в глубокой, вы- сасывающей деньги яме, прикрытой сверху огромным счётом из налоговой инспекции и штрафными санкциями. Приводимые здесь мной утверждения корректировались по нескольким источникам, главным образом по публикациям IRS (Internal Revenue Service — Внутренняя налоговая служба США) за 2005 финансовый год. Прежде чем мы двинемся дальше, посмотрите на приведённый ниже полезный словарик (в частности, если вы никогда не заполняли налоговую декларацию в Соединён- ных Штатах): • 1040 — форма (фактически семейство форм), на которой вы предъявляе- те свою ежегодную налоговую декларацию. • 1099 — форма, которая отправляется вам по почте в конце финансово- го года каждым человеком, заплатившим вам более 600 долл. Опять же есть несколько разновидностей формы 1099, включая 1099-DIV для до- хода по дивидендам, 1099-MISCjw* прочих поступлений и т. д. Клиенты «свободного художника» обычно высылают вам форму 1099-MISC, если вообще что-нибудь высылают. Если форма 1099 заполнена человеком,
5.2. От совместительства к статусу консультанта. Бухгалтерия, налоги и объём работ ■ 209 который выплатил средства, не относящиеся к заработной плате, то одна копия высылается вам, а другая идёт в IRS. Вам не надо включать эти формы в налоговую декларацию, поскольку информация уже имеется в IRS. Нужно только объявить итоговые цифры в правильных строках ва- шей налоговой декларации. • AGI (Adjusted Gross Income — уточненный валовой доход). Это, в сущно- сти, ваш валовой доход, за исключением разрешенных вычетов, то есть фактическое «доходное» число, по которому начисляется налог. • FICA — акроним от Federal Insurance Contribution Act (Федеральный за- кон о взносах на социальное страхование). Этот термин чаще всего ис- пользуется, когда дело касается вычетов на страхование, медицинское обслуживание престарелых и социальное обеспечение (Medicare and Social Security). • IRS (Internal Revenue Service) — Внутренняя налоговая служба, орган, ответственный за сбор федеральных налогов. • W-2 — стандартная форма, предоставляемая ежегодно постоянным ра- ботодателем («ежедневная работа»), говорящая среди прочего, сколько вам было заплачено и какие суммы были удержаны из жалованья на ме- дицинское обслуживание и на налоги — федеральные, штата и местные. Формы W-2 должны быть включены в вашу налоговую декларацию. Я буду предполагать, что вы собираетесь следовать обычным путем, свя- занным с формой 1099. То есть или вы будете выполнять какие-то контракт- ные работы по совместительству, или постоянно работать «свободным худож- ником» (в отличие от основания собственной корпорации, которая и будет выплачивать вам жалованье). Работу вне штата почти всегда предлагают на базе формы 1099, поскольку при этом наниматель несет меньше затрат. В этом случае нет взаимоотношений типа работодатель—работник. Работодатели, за- ключающие контракт по форме W-2 со слишком большим числом работников (даже если это работающие на часть ставки «полусвободные художники»), на- чинают появляться на радаре различных органов, следящих за исполнением законов в сфере взаимоотношений между предпринимателями и работника- ми, иметь дело с которыми весьма утомительно. Важное предупреждение. Доступно изумительно большое число ресурсов, особенно сетевых, в которых обсуждаются способы создания домашнего биз- неса, постоянно показывающего свою убыточность, которая может быть ком- пенсирована за счёт вашего нормального дохода по форме W-2. План здесь,
210 ■ Глава 5. Сам себе инженер в двух словах, заключается в том, чтобы сделать ваше хобби не подлежащим налогообложению расходом. К несчастью для вас, законность этих методов вызывает вопросы, посколь- ку в лучшем случае они очень сильно растягивают определение того, что от- носится к «деловым» расходам. Они определённо нежизнеспособны в течение сколь-нибудь длительного срока. В IRS имеются разнообразные эмпириче- ские правила, чтобы классифицировать домашний бизнес как не подлежа- щую вычету из налоговой базы хобби-активность. Основной критерий может быть выражен вопросами: «Эта деятельность приносит прибыль? Если нет, то выполняется ли она таким способом, который подразумевает ожидание полу- чения прибыли в будущем?» Если ответ на второй вопрос отрицательный, то ваши вычеты будут отклонены, а вы окажетесь на крючке, получив здоровен- ный налоговый счёт вместе со штрафами. Поскольку основным исходным ма- териалом для консультирующего инженера являются часы работы (а не опла- ченные физические исходные материалы), то может оказаться удивительно сложным делом свести в итоге бизнес инженерных консультаций к убытку. Так что вам, возможно, даже не удастся выполнить такое дело на бумаге без разбора со стороны IRS. Если вы действительно хотите, чтобы ваш любимый проект не был облага- ем налогами, то у меня есть предложение, которое, правда, звучит несерьёзно. Найдите кого-нибудь, кто будет платить за реализацию вашего проекта. Пре- восходный способ сделать это заключается в написании и публикации статей о проекте. Таким образом, вашими исходными материалами станут необходи- мые для проведения исследований расходы. Суть всего этого в следующем: следует предположить, что ваш самостоя- тельный бизнес будет приносить прибыль, и работать, основываясь на этом, с самого начала. Конечно, если вы показываете убыток, вам дано право на налоговые «преимущества» от него. Но будьте готовы ответить на вопросы, если ваш бизнес не начнет иметь положительное сальдо через пару лет. Не вы- брасывайте ни единого клочка бумаги! Помня обо всех этих факторах, мы немедленно приходим к кое-каким фи- нансовым сложностям. IRS не хочет дожидаться получения своей доли от ва- шего заработка до конца года, желая быть уверенным, что вы заплатите, по крайней мере, 90% причитающихся с вас налогов. Вам нет нужды беспокоить- ся по поводу налогов с обычной работы (по форме W-2). Работодатель удер- живает из перечисляемых вам выплат нужный процент и переводит эти сред-
5.2. От совместительства к статусу консультанта. Бухгалтерия, налоги и объём работ ■ 211 ства в ISR и департамент по сбору налогов вашего штата (о да, боюсь, придёт- ся оплачивать ещё подоходный налог, установленный штатом). Из дохода от предпринимательской деятельности, однако, ничего не удерживается. Чело- век, который нанимает вас, просто выписывает чек на ту сумму, за которую вы согласились взяться за работу. Уплата с неё налогов — это уже ваша забота. Есть вторая причина беспокойства по поводу налогов на доход от пред- принимательской деятельности, и название ей FICA (Федеральный закон о взносах на социальное страхование). Федеральное правительство хочет полу- чить 12.4% от вашего валового дохода (AGI) на социальное обеспечение (до определённой степени), а также 2.9% от вашего AGI на программу Medicare (правительственная программа страхования здоровья престарелых, и нет пре- дела для этого налога). С дохода, декларируемого по форме W-2, ваш работо- датель выплачивает половину этой суммы. С дохода, полученного в результате частной предпринимательской деятельности, вам придётся выплачивать пол- ную сумму. Если вы хотите жить только на доходы, полученные в результате собственной предпринимательской активности, то они должны быть гораздо больше вашего заработка на обычной работе. Вам просто не удастся забрать все эти средства себе. Обратите внимание, что в действительности у вас есть небольшая лазейка: если вам приходится платить полную сумму налога FICA (как лицу, занимающемуся самостоятельной предпринимательской деятель- ностью), то вы можете потребовать половину того, что в обычной ситуации ваш работодатель выплатил бы по статье деловых расходов. Если вы зарабатываете сколь-нибудь значительные средства с помощью деятельности, с которой сразу не взимается подоходный налог, вам понадо- бится ежеквартально платить вменённый налог, используя форму 1040-ES. Опросный лист этой формы, на мой взгляд, очень сложен. В нем требуется, чтобы вы приблизительно оценили большую часть того, что будет в вашей на- логовой декларации в конце только лишь начинающегося года, и это не го- воря уже о том, что в течение года вы будете получать массу канцелярских бумаг. Обратите внимание, что есть исключение в требовании регистрации подоходных налогов. Если вы ожидаете, что ваши налоговые выплаты в этом году будут, по крайней мере, такими же, как все выплаченные в прошлом году налоги, вы не будете наказаны за то, что не в состоянии заплатить вменённый налог вовремя. Существует множество стратегий, которые вы можете использовать, чтобы справиться с проблемой вменённых налогов. Наиболее подходящий вам метод будет зависеть, среди прочего, от того, сколько вы рассчитываете заработать
212 ■ Глава 5. Сам себе инженер предпринимательской деятельностью, насколько точны эти прогнозы, есть ли у вас ещё и обычная работа, насколько согласованно (или несогласованно) вы распределяете финансы от недели к неделе. Проще всего управиться с подоходными налоговыми вычетами по форме 1099, если у вас есть обычная работа (где удержания осуществляются по форме W-2), заработка от которой вам вполне хватает на жизнь. В-этом случае вы мо- жете просто попросить работодателя удерживать из вашей зарплаты большие суммы так, чтобы к концу года вы подошли уже с практически полностью вы- плаченными налогами. Вы можете грубо оценить, какие суммы должны вы- читаться, используя следующую методику: • Оцените, какую общую сумму вы заработаете за год, выполняя контракт- ные работы, соответствующие форме 1099. Ожидаемый доход минус ожидаемые траты, подлежащие 100%-ному вычету, такие, как траты на комплектующие для создания макетов, расходы на телефон и т. д. Про- ведение такой оценки может оказаться сложным делом, если только вы не распланировали все работы на год вперёд, что бывает редко. • Определите вашу предельную налоговую ставку. IRS публикует табли- цы предельных налоговых ставок в начале года. Вы можете ознако- миться с таблицей на 2006 год, пройдя по ссылке www.irs.gov/formspubs/ article/0,,id=150856,00.html, но, в сущности, имеется шесть групп: 0%, 15%, 25%, 28%, 33% и 35%. В какую группу попадаете вы, зависит от вашего дохода и семейного положения (холосты; женаты, регистрация совместная; женаты, регистрация раздельная; глава хозяйства). Подроб- ности можно узнать в IRS. Определите, какую сумму составит федераль- ный налог (будем обозначать эту сумму $Т) на дополнительный доход, умножая вашу оценку этого дополнительного дохода на процентную ставку. • Определите сумму отчислений FICA с дополнительного дохода, умно- жая оцененный доход (соответствующий форме 1099) на 15.3%. Обозна- чим эту сумму $Е • Приблизительно общие дополнительные налоговые отчисления, кото- рые вы должны будете выплатить за год, будут равны $Т + $F!). Таким образом, вы можете определить, какую дополнительную сумму вашему 0 Это, конечно, очень грубая оценка, в которой не приняты во внимание разнообраз- ные потенциальные вычеты, но она вполне отвечает нашей цели. Более важно то, что это весьма консервативная сумма, которая, вероятно, приведёт к тому, что вы переплатите IRS. Задача здесь — избежать подачи налоговой декларации в конце года.
5.2. От совместительства к статусу консультанта. Бухгалтерия, налоги и объём работ ■ 213 работодателю следует удерживать для перечисления в виде налога из ва- шей заработной платы, используя формулу ($Т + $Р)/(число выплат за- работной платы за год). Пример. Предположим, что в налоговом ведомстве вас считают холостым, и вы зарабатываете на своей основной работе 50 000 долл. в год, и зарплата начисляется раз в две недели. Вы считаете, что самостоятельно заключите контрактов на сумму 10 000 долл., и, чтобы заработать эти деньги, вам не по- надобится производить каких-либо подлежащих вычету трат. В соответствии с таблицами за 2006 год вы попадаете в группу с предельной налоговой ставкой 25%, поэтому вам придётся заплатить дополнительный федеральный налог с этой суммы, равный 2800 долл. Вам также придётся перевести 1530 долл. по FICA, что в сумме даст 4330 долл. Поскольку за год вам выплатят 26 заработ- ных плат, вам следует попросить работодателя дополнительно удерживать с каждой зарплаты приблизительно 167 долл. С помощью вышеприведённого метода болезненные ощущения, вызы- ваемые необходимостью выплаты налогов на предпринимательскую деятель- ность, оказываются не острым приступом в апреле, а хронической ноющей болью, равномерно распределённой по всему году (в предположении, конеч- но, что вы оцениваете свой годовой доход с разумной точностью). Данный ме- тод работает не очень хорошо, если ваши расходы уже очень близки к чистому (после выплаты всех отчислений) заработку на основной работе (форма W-2), поскольку если в потоке поступающих средств (форма 1099) возникнут пере- бои, то у вас могут появиться проблемы с деньгами на повседневные расходы. В подобных случаях вам лучше сойти с традиционного пути ежеквартальной регистрации предполагаемых налогов. Опять же самый простой способ сде- лать это — обойти декларацию по форме 1040-ES и просто взять свой итого- вый дополнительный доход, вычесть из него необлагаемые налогом траты за квартал и, зная остаток, рассчитать налог и выплаты FICA. Вы будете пере- плачивать с упреждением, но если сравните возможную потерянную сумму со стоимостью расчёта «правильного» предполагаемого налога, то, вероятно, всё же будете играть в эту игру. Однако если ваша налоговая ситуация хотя бы не- много сложнее вышеописанной (например, вы акционировали свой бизнес), то вам действительно нужен помощник-профессионал. Если помимо свободного предпринимательства вы работаете и на обычной работе с фондом 401 (к) (называемый в других странах счётом пенсионного обе- спечения или пенсионным фондом), то одна из самых важных вещей, которую вы можете сделать со своим дополнительным доходом от работы по совмести-
214 ■ Глава 5. Сам себе инженер тельству, — максимизация не облагаемых налогом вкладов в фонд 401 (к). Это осуществляется увеличением взноса, вычитаемого из вашей основной зар- платы, и покрытием образовавшегося уменьшения средств на повседневные расходы за счёт дополнительных финансовых поступлений (форма 1099). Тем самым вы получаете двойной выигрыш. Во-первых, если ваш работодатель использует соответствующую схему, вы буквально получаете дополнительные свободные деньги. Во-вторых, вы откладываете эти дополнительные средства и на них ещё и начисляются проценты, тогда как в противном случае вам бы пришлось выплачивать с них налоги. Обратите внимание, что в 2006 году свободный от уплаты налогов взнос в фонд 401 (к) составлял 15 000 долл. Люди старше 50 лет могут дополнительно вложить ещё до 5000 долл. Если вы приближаетесь к этим границам, то вам понадобится подыскать другие механизмы инвестирования, чтобы сохранить дополнительные деньги. Приятно иметь такую проблему! Для того чтобы любое из этих предложений работало, вам надо вести тща- тельный учёт полученных денег и затрат, связанных с бизнесом (а также за- писывать, что это были за траты). Причина, по которой весьма важно вести такой финансовый учёт, состоит в том, что вы очень часто не будете получать вовремя все формы 1099-MISC, которые используются для расчёта налогов. В особой степени, как свидетельствует мой опыт, это относится к небольшим заказчикам. Мне представляется, так происходит потому, что во многих небольших фир- мах всю подготовительную работу, связанную с выплатой налогов, оставляют на последний момент. В начале апреля они посещают независимых бухгалтеров и показывают им свои записи, говорящие, что вам было выплачено столько-то тысяч долларов в течение этого года (которые они, разумеется, хотят предъя- вить как подлежащие вычету расходы). Подготавливая налоговую декларацию, бухгалтер заполняет формы 1099-MISC, а затем передает вашему заказчику всю кипу бумаг. Налоговую декларацию отправляют почтой в первую очередь, а формы 1099-MISC отсылаются согласно более свободному графику, если во- обще отсылаются. В принципе вся эта канцелярия должна быть разослана до 31 января, но это правило нарушается с той или иной степенью регулярности. Хотя весь предыдущий раздел представляет собой мою гипотетическую версию, вам необходимо вести собственный учёт поступивших средств, не по- лагаясь на то, что уже к середине апреля вы точно получите все нужные бумаги по почте. Это утверждение плавно подводит к следующему важному совету:
5.2. От совместительства к статусу консультанта. Бухгалтерия, налоги и объем работ ■ 215 вам необходимо вести тщательный учёт всего. Существуют мириады превос- ходных доводов, показывающих, почему может оказаться очень важным точ- но вспомнить, за какую работу вы взялись три года назад, или узнать, где на- ходится первая версия схемы для проекта, сделанного вами шестъи > месяцами ранее. Вся эта информация будет у вас под рукой только в том случае, если вы уде- лите время, чтобы создать и активно использовать функциональную систему учёта. Эта система может представлять собой как электронный, так и тради- ционный бумажный архив или быть их гибридом. Поскольку вы неизбежно будете получать бумажные документы от заказчиков, поставщиков и других людей, то, вероятно, проще всего управляться с гибридной системой. Некото- рым людям очень нравится держать всё в электронном формате, поэтому они сканируют свои телефонные счета и другую корреспонденцию, «д бумажные оригиналы уничтожают или засовывают в коробку в кладовке. Затем отскани- рованные копии переводятся в Adobe PDF или в какой-нибудь другой удоб- ный формат. С другой стороны, есть любители хранения документов в бумаж- ном виде. Если они получают электронный счёт-фактуру, то распечатывают его и хранят печатную копию. Лично я предпочитаю гибридный подход. Вся моя корреспонденция гене- рируется электронными средствами, как вы, вероятно, и ожидали, поэтому и хранится в электронном архиве. Корешки чеков, входящие письма и счета архивируются в бумажном виде, так же как и подписанные контракты, разно- образные важные эскизы, схемы и тому подобное (хотя я, разумеется, храню и оригинальные CAD-файлы в качестве программных копий), Для ведения финансового учёта я использую бесплатный программный пакет GnuCash (www.gnucash.org), представляющий собой просто бухгалтерск> ю систему двойной записи. Однако абсолютно не важно, будет ли у вас электронный, бумажный или гибридный архив. Важно, чтобы вы помещали в свою архив- ную систему все материалы и делали это последовательно, чтобы можно было найти заархивированные материалы, когда в них появится нужда. В действительности я рекомендую вам подумать над тем, каким образом должна работать ваша система архивации, и создать описывающий это доку- мент. Вы сможете воспользоваться им, чтобы обучить секретаря, если придёте к мысли о необходимости такового. А формализация манеры ведения свое- го бизнеса сильно поможет вам постоянно следовать своим же о ^бственным процедурам. Это также представляет собой основу, осмелюсь сказать, серти- фикации по ISO9000, если вам она когда-нибудь потребуется.
216 ■ Глава 5. Сам себе инженер 5.3. Способы найти и удержать заказчиков Одна из причин того, что проще начинать трудовую карьеру с места в шта- те какой-нибудь компании, а потом уйти в консультанты (предполагая, что это ваша конечная цель), — сложность мгновенного обретения достаточно- го количества клиентов для поддержки собственного бизнеса. Поэтому, если вы обдумываете перспективу заняться консультационной работой в сфере встраиваемых систем на постоянной основе, я рекомендую вам серьёзно рас- смотреть вариант продолжения трудовой деятельности на основном рабочем месте (по крайней мере, на часть ставки). Это поможет вам преодолеть скуд- ные в финансовом плане времена, особенно в начальный период. К тому же я бы не советовал вам браться за оказание консультационных услуг, даже по совместительству, пока у вас не будет, по меньшей мере, двух- или трехлетне- го опыта работы в промышленности. Было бы предпочтительнее, если бы вы получили такой опыт, работая на инженерном уровне, но приемлем и второй вариант, при котором вы получаете опыт, работая на производстве, поскольку и в этом случае вам придётся пройти похожую школу. Вы можете, конечно, спокойно проигнорировать последние рекоменда- ции. Некоторым людям везёт, и они оказываются в креслах успешных кон- сультантов сразу после окончания учебного заведения. Впрочем, даже если вы полностью впитали и восприняли всем сердцем каждое слово бесценной кни- ги, которую сейчас читаете, вы всё же не будете до конца осведомлены, сколь часто и сколь эффектно всё может пойти не так в проектах встраиваемых си- стем, разрабатываемых одним человеком0. В учебном заведении вы получи- те основы проектирования схем и написания кода, но (как говорит мой опыт работы со свежеиспеченными выпускниками) там не научат навыкам ведения реальных проектов. Ведение проекта подразумевает решение таких проблем, с которыми вы не столкнетесь в период обучения. Сюда, например, входят техническая поддержка тех чипов, которые вы использовали в проекте, раз- работка печатных плат (многие выпускники никогда не разводили печатных плат, а вы, будучи консультантом, возможно, захотите делать это сами из со- 0 Я не имею в виду простое наличие «трудноизлечимых» ошибок. Я говорю о такого рода проблемах, как принятие вашим клиентом решения об обязательном наличии какой- нибудь новой функциональности как раз после того, как вы потратили неделю на развод- ку платы на базе микроконтроллера, у которого недостаточно памяти для её реализации. Или прямо перед началом выпуска продукции выясняется, что ваша плата шумит слиш- ком сильно и не пройдёт испытания на соответствие требованиям по уровню излучаемых радиочастотных помех.
5.3. Способы найти и удержать заказчиков ■ 217 ображений экономии), вопросы доступности всех специфицированных вами чипов, тщательное изучение каталогов с целью добыть точные маркировки и стоимости микросхем и мириады других задач. После окончания учебного заведения за плечами среднего студента также нет проектов, доведённых до такой степени, чтобы у него появилось интуи- тивное чувство того, где в проект следует вводить запас в расчёте на будущие усовершенствования, а где он может конструироваться на грани имеющихся ресурсов (так сказать, выбрать всё до последнего милливольта)0. В результате если вы новичок в этой сфере деятельности, то обнаружите, что хронически недооцениваете время и стоимость работы, которую вас попросили выпол- нить. Заказчики хотят результатов в виде завершённых проектов, а не просто деятельности. Если ваш домашний бюджет складывается из доходов от этой работы, вы окажетесь в плохой ситуации, если не будете способны аккуратно оценить, сколько проектов можете завершить за заданный период времени. Вы можете частично компенсировать это, введя почасовую форму оплаты (см. раздел 5.5), но вы не наладите длительных дружеских отношений с заказчика- ми, если 60% оплаченных часов будут уходить на решение проблем, возник- ших из-за ваших ошибок при изначальном выборе аппаратных средств. Что ж, будем считать, что вы обладаете требуемым опытом. Как найти лю- дей, которые купили бы ваши услуги? Реклама — обычный способ продажи любых товаров, но вы не сможете продать большое количество инженерных услуг, покупая целые страницы рекламной площади в «New York Times». Есть несколько очевидных методов рекламирования такого рода услуг, и я предла- гаю вам попробовать их комбинацию: • Создайте веб-сайт, подробно рассказывающий о ваших возможностях, и поддерживайте его содержимое в актуальном состоянии. В наше время стать владельцем такого сайта практически ничего не стоит (и эта сумма в любом случае не подлежит налогообложению). Хотя просто наличие веб-сайта не приведёт к мгновенному появлению клиентов, важно иметь место, куда можно направить людей, чтобы они узнали побольше о ва- шей деятельности. Наличие привлекательного веб-сайта с относящимся к делу содержимым, который заказчики хотят посмотреть, также помо- гает навести профессиональный лоск на вашу деятельность. Что касается 0 Элементарный пример: при всех прочих равных предпочтительно выбирать микро- контроллер, у которого есть совместимые по выводам варианты с разными объёмами ПЗУ и ОЗУ. Тогда, если вы обнаружите, что вам не хватает 5 байт, можно просто перейти на следующий микроконтроллер, не разводя плату заново.
218 ■ Глава 5. Сам себе инженер привлекательности веб-сайтов, мой совет на эту тему таков: «Не сходите с ума!» Я предлагаю использовать простой HTML без фреймов и аними- рованной графики. И разумеется, вам никогда не следует прятать какую- либо содержательную информацию во флэш-фильмах или апплетах Java0. Я бы также предложил воздерживаться от вложенных скриптов, в частности это касается аспектов навигации по сайту. Наличие несколь- ких элементов прокрутки, меняющих цвет с помощью Java-скриптов, не смертный грех, но заставлять посетителя использовать сделанные на Java выпадающие меню для перехода со стартовой страницы — чрезвы- чайно плохая идея. Вам необходимо, чтобы пользователи могли легко передвигаться по вашему сайту, чтобы он хорошо смотрелся без привле- чения каких-либо плагинов или таинственных окон просмотра, и, самое важное, чтобы он легко индексировался поисковыми машинами. Не за- будьте разместить на сайте фотографии и описание выполненных вами проектов. Подойдут личные и учебные проекты, хотя, как только у вас будет серьёзный портфель выполненных заказных работ, вы, возможно, захотите скорректировать устаревший материал. Полезно показать лю- дям, какое время было затрачено на выполнение каждого проекта, если только эти цифры не ставят вас в глупое положение. • Публикуйтесь настолько часто, насколько это возможно. Существует огромное количество инженерных публикаций2*, которые распростра- няются бесплатно (и в бумажном, и в электронном формате) и предо- ставляются практически всем, кто занят написанием обзоров и готов терпеть нескончаемый поток мусора, поступающего в его почтовый ящик. Боюсь, что мои слова покажутся не очень добрыми, но тем, кто публикует эти материалы, необходим всего лишь минимум фактической информации, которую они используют в качестве обёртки для своей ре- 0 Здесь во мне частично говорит инженер. Все эти анимированные графические сред- ства создаются ради формы, а не ради содержания. Заключение содержательной инфор- мации внутри бинарных файлов — очень глупый выбор уже только потому, что это будет вызывать раздражение большинства инженеров, просматривающих ваш сайт. Вы продаё- те не губную помаду для девочек подросткового возраста, поэтому вам не нужны поющие анимированные хорьки. Вы продаёте профессиональные услуги людям, время которых на чтение, понимание и оценку имеющихся вариантов выбора ограничено. Не усложняйте им знакомство с вашими предложениями. 2) Главным образом это рекламные проспекты с небольшим фактическим содержи- мым, добавленным, чтобы заставить людей открыть их. Ключевая фраза для них — «про- изводственные публикации». Я не единственный, кто придерживается этого циничного подхода.
5.3. Способы найти и удержать заказчиков ■ 219 кламы. Если вы обладаете способностями к написанию интересной ста- тьи о чём-нибудь значимом в том сегменте промышленности, в котором работаете (типичный размер статьи — 2500 слов), то публикации в этих журналах — превосходный бесплатный способ показать себя публике. Вам также будут выплачивать небольшие гонорары за статьи. В обычном случае они никоим образом не соответствуют заработку за консультаци- онные услуги при одинаковом затраченном времени, но основную цен- ность этой деятельности представляет собой получаемая вами бесплат- ная реклама, а наличные — просто приятный бонус. Делитесь информацией по бесплатным проектам. По возможности от- крывайте код и схемы ваших личных проектов (размещайте их на своём сайте). Вы сделаете свой сайт заметнее во всех смыслах. Например, если люди будут посещать страницы с вашими проектами, то поисковые ма- шины станут увеличивать рейтинг вашего сайта. Вы также повысите ве- роятность того, что кто-то в поисках помощи в создании какой-нибудь своей штучки решит обратиться к вам. Направьте предложения по своим услугам небольшим местным фирмам, которые могли бы извлечь из них выгоду. В частности, если у вас личный или учебный проект, который мог бы продемонстрировать вашу опыт- ность в их сфере деятельности, то включение в письмо подробностей об этом проекте было бы отличной идеей. Принимайте участие в конференциях с целью налаживания связей. Из-за того, что встраиваемые системы используются во многих областях, су- ществуют буквально сотни конференций, где можно встретить людей, которым нужны ваши таланты. Вы будете получать уведомления (воз- можно, косвенные) о проведении многих подобных конференций, если подпишитесь на новостные рассылки различных производителей по- лупроводников, которые принимают участие в таких событиях. Чтобы узнать о проведении некоторых других мероприятий, вроде Ярмарки игрушек в Манхэттене, с вашей стороны потребуется чуть больше поис- ковой работы. Создайте необычную электронную рекламную безделушку и разошлите её потенциальным заказчикам. Этот подход следует использовать только в случае очень хороших перспектив, поскольку он обычно довольно за- тратен. Типичным примером имеющейся мной в виду вещицы могла бы быть электронная визитная карта, несущая в себе, скажем, светодиоды и
220 ■ Глава 5. Сам себе инженер встроенный микроконтроллер и, может быть, ещё пьезоэлектрический громкоговоритель. До сих пор мы говорили о привлечении новых заказчиков. Удержание суще- ствующих клиентов — тоже интересная задача для консультирующего инже- нера встраиваемых систем. Довольно часто причиной, по которой компании выходят на охоту за консультантом по встраиваемым системам, является не- обходимость выполнить разовый проект, который находится вне их обычной сферы деятельности. Например, из-за того, что ранее я работал в области про- изводства игрушек, и из-за написанной мной несколько лет назад журнальной статьи на эту тему я получаю множество телефонных звонков от жаждущих признания изобретателей. В основном им всем нужна экспертная помощь в создании прототипов, которые они планируют предложить крупным компа- ниям. Также приходит изрядное количество звонков от людей, занимающихся маркетингом, которые хотят делать устанавливаемые в магазинах показываю- щие или говорящие витрины, но не представляющих себе, с чего начинать в создании электронной части подобных устройств. Поскольку я больше не ра- ботаю в промышленности, всех звонящих с подобными предложениями я на- правляю к коллегам, но подозреваю, что относительно небольшое число этих звонков привело к установлению долговременных деловых отношений. К сожалению, не в моих силах дать вам много советов, которые помогли бы уговаривать людей начинать новые проекты. Вам лучше всего действовать очень простым образом: выполняйте свою работу вовремя и профессиональ- но, следуя предложениям, приведённым в разделе 5.6. Во время выполнения проекта давайте понятные пояснения и консультации, улучшающие понима- ние конечным пользователем того устройства, которое вы делаете. Такие по- лезные инженерные консультации ценны для вас, поскольку приносят допол- нительные очки рейтингу, который будет удерживать вас в глазах клиентов на вершине Олимпа. Определённо не повредит встреча с заказчиком спустя несколько месяцев после сдачи завершённого проекта. К этому сроку устройство уже будет вы- пускаться, и если заказчик до сих пор вам не звонил, то вы можете с большой долей уверенности полагать, что никаких особых проблем не возникло. Пара месяцев реальной «обкатки» устройства, впрочем, весьма вероятно выявят какие-то шероховатости, вещи, которые могут быть улучшены, или аксессуа- ры, которые могут быть созданы. А это дополнительные деловые возможно- сти для вас.
5.4. Итеративные проекты: нескончаемый ужас? ■ 221 Некоторые люди даже оправдывают обзвон всех имеющихся в вашей базе данных клиентов всякий раз, когда деловая активность затихает, чтобы узнать, нельзя ли ухватиться за какой-нибудь проект. Мне такой подход представля- ется не совсем приемлемым, так как граничит с непрофессионализмом. Од- нако, если вы всё же решите двинуться по этому пути, постарайтесь хотя бы не придавать разговору явной коммерческой направленности. Задайте своим заказчикам вопрос о том, как себя проявляют в работе прежние проекты, и в любом случае поинтересуйтесь, не обдумывают ли они что-нибудь новое. Весьма вероятно, вам придётся потратить какое-то время, обсуждая аргумен- ты за и против разных идей, над которыми они в данный момент работают. Всё, что идёт дальше этого, уже будет сильно походить на попрошайниче- ство. В конце концов либо у ваших заказчиков есть какие-то идеи относи- тельно новых проектов, либо их нет. Если они что-то задумывают, то, просто позвонив и поговорив немного, вы им напомнили о своём существовании и намекнули самым явным образом, что можете приступить к работе. Если по- сле этого они не хотят нанимать вас для выполнения имеющихся проектов, то очень может быть, что они по каким-то причинам недовольны тем, как вы справлялись с заказанной работой в прошлом. Исправление ситуации может оказаться очень сложным делом, особенно если ваши заказчики не хотят раз- говаривать об этом. 5.4. Итеративные проекты: нескончаемый ужас? Отладка проекта — это не точная наука, а форма искусства. К сожалению, и покровители этого искусства, и те, кто его практикует, живут в очень сложном мире, что иллюстрируется нижеследующим рассказом. Белка с суицидальным синдромом Временами плохой день в лаборатории может стать действительно плохим днём в лаборатории, а затем превратиться в поразительно плохой день в лаборатории. Представьте себе следующее. Вы работаете над проектом, срок сдачи которого не за горами (или даже проект уже просрочен). Вы видите, что в системе есть проблема, и формулируете теорию о том, что её вызывает. Вы полагаете, что некоторые вещи просто невозможны, и в течение нескольких часов, со всё нарастающим отчаянием, исследуете оставшиеся возможные причины проблемы. Как раз тогда, когда вы готовы
222 ■ Глава 5. Сам себе инженер рвать на себе волосы, вы замечаете некое небольшое проявление, доказы- вающее, что первоначальная причинно-следственная теория была неверна и надо всё начинать сначала. А затем цикл теоретико-исследовательского битья головой о кирпичную стену повторяется. Особенно яркий случай, иллюстрирующий вышеописанное, произошел несколько месяцев назад с одним из моих коллег. Он отлаживал про- грамму, про которую было известно, что она просто напичкана пробле- мами. После удаления некоторых самых вопиющих программных оши- бок он протестировал скомпилированный остаток и обнаружил, что тот совершенно нефункционален. Инженер провел за отладкой кода полто- ра дня, устанавливая в разных местах точки останова, проверяя флаги и результаты считывания данных аналого-цифровым преобразователем и т. д. В отлаживаемой программе было заложено считывание выходных данных, поступающих с аналоговой подсхемы, и выполнение некоторых временных расчётов (среди прочего). Проведя определённые измере- ния, он пришёл к выводу, что причиной сверхъестественного поведения исправленной программы была не совсем правильно функционирующая аналоговая схема. Прежде он предполагал, что это невозможно, по- скольку исследуемое устройство не было макетом, выпускалось серийно и полностью тестировалось на предприятии. Как оно могло неправильно функционировать? Измеряя некоторые напряжения на плате, он вскоре обнаружил, что напряжение на шинах питания было довольно низким. Проведя ещё полдня за тщательным осмотром платы, ища проблему в схеме стабилизации напряжения питания или в неправильной развод- ке микросхем, приводящей к просадке напряжения на шинах (обратите внимание на имеющееся и здесь скрытое предположение!), он понял, что на входе платы питание было меньше требуемых 5 В. В результате выяснилось, что, хотя на передней панели лабораторного источника пи- тания были установлены правильные цифры, фактическое выходное на- пряжение было низким. Причиной этого оказалось то, что напряжение в розетке, куда был подключен источник питания, составляло всего около 86 В!1) Комбинация чрезвычайно необычных обстоятельств и предполо- жений, которые при нормальном положении дел были бы правильными (но не в данном случае), привела к тому, что два дня работы были потра- чены впустую. В Австралии довольно часто сбои в электропитании и вспучивания транс- форматоров происходят из-за опоссумов, которые, лазая среди изоля- торов, вызывают короткое замыкание силовых проводов. Заметьте, эти опоссумы относятся к семейству Trichosurus vulpecula vulpecula. Это оби- 0 Не забывайте, что в США напряжение питания в сети — 110 В. — Примеч. науч. ред.
5.4. Итеративные проекты: нескончаемый ужас? ■ 223 тающее на деревьях животное не очень похоже на представителя семей- ства Didelphis marsupialis, которого американцы ассоциируют со словом «опоссум». Ближайшее к нему американское животное, в смысле умения лазать по деревьям и пристрастия к исследованиям, вероятно, белка. По- этому сейчас, когда возникает требующая проработки ситуация, похожая на эту, мы говорим, что, вероятно, нас атакуют белки-самоубийцы. Заказчики, как внутренние, так и внешние, практически никогда не гово- рят инженерам, чего они хотят в действительности. Это универсальная исти- на, в равной степени верная как для больших компаний, так и для небольших фирм и консультантов-одиночек. Данная проблема усугубляется тем, что вся- кое инженерное решение приводит к следствиям, которые не всегда очевид- ны даже для ответственного за проект инженера. Для заказчика эти следствия почти наверняка представляют собой тайну за семью печатями. Часто очень тяжело объяснить слабо разбирающемуся в технических вопросах клиенту природу таких проблем. Трагедия в том, что вы можете пройти довольно боль- шую часть пути в заданном направлении разработки проекта, прежде чем по- следствия продвижения по нему станут понятны заказчику. А произойдет это тогда, когда что-то менять будет уже слишком поздно. Вы начнёте замечать сложности такого рода с самого начала проекта, уже на этапе проработки спецификаций. Почти неслыханное дело, чтобы заказ- чик позвонил вам и сказал: «Мне нужно спроектировать то-то и то-то. Вот здесь все мои требования». Обычно для консультанта проекты начинаются с того, что клиент звонит вам, чтобы описать требующую решения проблему с пользовательскими аппаратными или программными средствами. Описание проблемы будет представлено в терминах, относящихся к сфере деятельности заказчика, которая совсем не обязана как-то соотноситься со встраиваемы- ми системами. С этого момента вы стоите перед выбором: прочитать заказчи- кам курс лекций по электронике и программированию встраиваемых систем, чтобы они смогли предоставить вам подробную спецификацию, или самому ознакомиться с клиентской сферой деятельности, чтобы суметь разработать такую спецификацию самостоятельно. Здоровый прагматизм показывает, что второй путь предпочтительнее. Поскольку сложно быстро усвоить все производственные тонкости, этот процесс оказывается итеративным. Ваш клиент поставит задачу, а вы ответите предварительным предложением о том, каким образом может быть получено
224 ■ Глава 5. Сам себе инженер желаемое решение. В свой ответ вам следует включить максимально возмож- ное количество деталей, относящихся к таким вопросам, как: • Время, требующееся на разработку. • Стоимость комплектующих. • Список того, чего можно добиться от обсуждаемой системы, а чего нель- зя, поскольку заказчики, возможно, предоставят вам бесконечно длин- ный список желаемых функций. • Специальные вопросы, которые не были приняты во внимание заказчи- ками. В последнюю категорию, например, попадают вопросы регулятивного ха- рактера. Меня как-то просили разработать ПО для игровых автоматов, несмо- тря на тот факт, что владение такими автоматами незаконно0 ни в моём штате, ни в том штате, где находились клиенты. А вот замечание на более практичную тему. Почти любое электронное оборудование, продаваемое в Соединённых Штатах, должно соответствовать части 15 правил FCC (Federal Communication Commission — Федеральная комиссия связи США), относящейся к допусти- мому уровню излучаемых радиочастотных помех. Заказчики обычно не дума- ют об этом, а у большинства консультантов (включая меня самого) нет обо- рудования для выполнения официально одобренного FCC тестирования. Поэтому контракт на что-то, что со временем станет оборудованием общего пользования, должен включать запись, говорящую, что за тестирование и сер- тификацию продукта отвечает заказчик. А вы ответственны исключительно за обеспечение инженерной поддержки во время процесса тестирования. Не забудьте, кстати, внести в свой прайс-лист расценки на всё это. Передача документа с первоначальными спецификациями приведёт к ещё одному раунду обсуждений с заказчиком и работе над уточнением специфика- ций. Этот процесс может продолжаться довольно долго. Будем надеяться, что, двигаясь по спирали, вы придёте в итоге к решению, которое будет приемле- мо для клиента, но это удаётся не всегда. Помните о такой возможности. Вы можете растратить ужасно много времени, двигаясь вперёд и возвращаясь на- зад, в процессе изучения всех вопросов, сопутствующих подобным проектам. А ведь это то время, которое было бы лучше потратить на более прибыльную деятельность. В моменты, подобные этим, действительно начинаешь ценить сотрудников больших компаний, служебной обязанностью которых является ведение переговоров по таким вопросам с поставщиками и заказчиками для 1} Есть исключения, но они не имели отношения к данному случаю.
5.4. Итеративные проекты: нескончаемый ужас? ■ 225 того, чтобы инженерный персонал получал, по крайней мере, довольно акку- ратные спецификации, из которых отфильтрована большая часть итеративно- го хлама. К сожалению, лишь только вы «застолбите» спецификацию и приступите к работе, то почти неизбежно обнаружите, что ваши заказчики начали под- брасывать дополнительные изменения, принятые ими в последний момент. Фундаментальное и практически никогда не нарушаемое правило, действу- ющее в работе инженера (занимающегося аппаратными или программными средствами), гласит: «Чем позднее вносятся изменения, тем дороже обходится их реализация». Вы действительно ничего не можете с этим поделать. Можно только со всей возможной точностью информировать заказчика, во что обой- дутся просьбы о внесении изменений как в смысле финансов, так и в смысле временных затрат. Опыт в такой ситуации — огромное подспорье. К сожале- нию, чтобы не дать этим изменениям нарушить общую целостность проекти- руемой системы, требуется быть очень дисциплинированным. Испытываешь ужасное искушение быстренько подправить программу или аппаратную часть ради внесения новой опции, а это почти неизбежно приводит к потере про- ектом общей целостности. Так что будьте очень осторожны с поступившими в последний момент предложениями об изменениях. Из одного того факта, что их приняли в са- мый последний момент, следует, что они не подверглись столь тщательному анализу, как все остальные функциональные элементы, которые обсужда- лись вами и заказчиком перед получением «окончательной» спецификации. Именно здесь вас будут поджидать замаскированные медвежьи капканы в виде функциональных возможностей, которые нельзя реализовать полностью программным путем или которые не вполне соответствуют намеченному спо- собу работы остальной системы. Или в виде функциональности, для реализа- ции которой у вашей аппаратной платформы чуть-чуть не хватает ресурсов. Изменения, действительно являющиеся минимальными, скажем, поменять красный светодиод на зеленый или изменить установленную по умолчанию громкость для устройства с аудиовыходом — не повод для беспокойства. Но более сложные изменения, если они необходимы, должны влечь за собой пе- реосмысление всего проекта и проработки совершенно новой спецификации и перенесение сроков выполнения. Внесение поправок в находящийся на вы- ходе проект — рецепт к поглощающим финансы катастрофам.
226 ■ Глава 5. Сам себе инженер 5.5. Оценивайте свои услуги должным образом Глобальной часто совершаемой ошибкой, которая с трудом поддается ис- правлению, является недооценка собственных услуг или установка излишне либеральных сроков осуществления платежей. Если вы затребуете слишком высокую цену за свои услуги, то просто не привлечете большого количества клиентов. Вы можете обратить внимание на этот факт и начать снижать рас- ценки до подходящего уровня. Однако если вы себя недооцените, то попадете в гораздо худшую ситуацию. Вы начнёте строить взаимоотношения с людьми на основе необоснованно заниженных расценок и будете зависеть от доходов, поступающих от этой работы. И если позднее вы попытаетесь поднять стои- мость услуг, то это в результате может привести к резкому спаду в делах, что скажется на вашем финансовом выживании. Заметьте, я не имею в виду, что клиенты не захотят платить больше за ваши услуги. Хочу предостеречь вас, чтобы вы не строили свою будущую финансовую стабильность на массе кли- ентов, которые просто не в состоянии оплачивать вашу экспертную работу по расценкам, соответствующим стандартам в промышленности. Наиболее рациональным способом оценить стоимость своих услуг в пере- счёте на единицу времени (в частности, если вы выполняете работу по совме- стительству) является анализ альтернативной (возможной) стоимости выпол- нения работы, если бы вы действовали на свой страх и риск. Альтернативная стоимость (opportunity cost) деятельности — это термин из жаргона эконо- мистов, означающий потенциальный доход при выборе некой деятельности вместо наиболее прибыльной. Для примера скажем, что вам предложили прочитать в один из вечеров часовую лекцию с выплатой гонорара в размере 5000 долл. Вы полагаете, что подготовка к лекции займет у вас четыре часа и, возможно, понадобится ещё два часа, чтобы добраться до места проведения лекции и обратно. Также потребуется потратить час времени, чтобы ответить на вопросы. Если вы откажетесь читать лекцию, то, допустим, следующей по прибыльности деятельностью у вас была бы работа по контракту с расценкой 100 долл. за час. Чтение лекции заняло бы восемь таких оплачиваемых ча- сов, поэтому стоимость, альтернативная чтению лекции, составляет 800 долл. (предполагается, что у вас действительно есть контрактная работа, которую вам бы пришлось отложить, если бы вы читали лекцию). В действительности ситуация не столь ясно очерчена, как я её здесь обрисо- вал. Бухгалтер с воображением, несомненно, сказал бы, что чтение лекции сле- дует рассматривать как рекламирование собственных услуг, поэтому вы зара-
5.5. Оценивайте свои услуги должным образом ■ 227 ботаете больше 5000 долл. Оценка того, сколько такого рода реклама или иные нематериальные активы могут стоить в долларах, является особым искусством. Опыт научит вас, чего можно ожидать в деловом плане от таких собраний. Существует другое очень простое эвристическое правило оценки того, какой должна быть ваша часовая ставка (исключая, конечно, опрос коллег, работающих в той же самой области). Изучите предлагаемые зарплаты по ре- зультатам, полученным от нескольких поисковых интернет-систем, таких, как salary.com, чтобы узнать, какое жалованье предлагается при найме на по- стоянную работу в вашем регионе и в вашей сфере деятельности. Рассчитайте эффективную часовую ставку из усредненной годовой базовой зарплаты (не включая возможных дивидендов по акциям, фонд 401 (к), медицинскую стра- ховку и так далее) и удвойте её. Это удивительно полезное эмпирическое пра- вило. Удваивание номинальной часовой ставки покрывает выплату налогов на предпринимательскую деятельность, медицинскую страховку, страхование персональной ответственности (если вы её несете), коммунальные услуги и все прочие различные расходы, которые в обычном случае за вас несёт рабо- тодатель. Хватит об оценке вашей часовой ставки. Проекты, выполнение которых требует от вас покупки специальных инструментов или уникальных, дорогих комплектующих (или даже просто проектов, требующих от вас поставки за- казчику макета, собранного из микросхем, которые вы обычно держите на полках в своей лаборатории), немного более сложны. Один из методов веде- ния контрактной работы такого типа заключается в предварительном написа- нии списка комплектующих с их стоимостью и отправке его заказчику вместе со списком предлагаемых поставщиков. Заказчику затем следует приобрести эти комплектующие с доставкой непосредственно к вам. Преимущество такой системы в том, что вам не приходится оплачивать расходы из собственного кармана, а у заказчика имеется ясное понимание того, что вы не завышаете стоимость каких-либо комплектующих, а просто выставляете почасовой счёт за свою работу. У данного подхода есть два главных недостатка. Очень немногие нетри- виальные проекты оказываются настолько удачными, что путь от схемы до полностью функционального макета преодолевается за один шаг, особенно с учётом того, что в лежащие в их основе спецификации вносятся изменения. Практически всегда устройство приходится дорабатывать — подобрать номи- нал резистора здесь, поставить транзистор помощнее там, перейти на менее шумящий операционный усилитель где-нибудь ещё. В результате вы обна-
228 р Глава 5, Сам себе инженер ружите, что приходится ожидать, пока заказчик не одобрит дополнительные расходы на создание макета и пока вам не доставят новые комплектующие. Вы также рискуете вызвать раздражение клиента, который может не пони- мать, что некоторые аспекты инженерного ремесла до определённой степени умозрительны. Спроектировать некоторые вещи чисто аналитическим путем очень тяжело, поэтому в проект закрадываются проблемы, решаемые методом проб и ошибок. По этой причине всё же лучше выставлять заказчику счёт на оплату ком- плектующих по завершении проекта (или по прохождении основных эта- пов), а те компоненты, которые вам потребуются просто держать под рукой в лаборатории, восполнять по мере необходимости. Во избежание необходи- мости платить из собственного кармана вам надо структурировать условия оплаты таким образом, чтобы первый платеж, предваряющий начало работ по проекту, покрывал всю предполагаемую стоимость комплектующих, а также суммы по тем счетам, которые вам понадобится оплатить во время работы над данным проектом. Весьма типичным видом договоренности в случае небольших проектов является оплата 50% от сметной стоимости (до начала работ) с выплатой причитающихся оставшихся 50% по завершении проекта. В случае более крупных проектов вы могли бы продолжить разделе- ние платежей. Например, предварительный платеж в размере трети сметной стоимости, следующая треть после поставки первого прототипа, а оставшие- ся причитающиеся деньги после поставки финальной версии программных и/или аппаратных средств. Время, затрачиваемое вами на разработку ПО или аппаратных средств, представляет собой другой вид издержек, которые вы несёте. Очевидно, что для вас возможность повторного использования элементов проекта А в про- екте Б дала бы большую экономию. Однако если эти два проекта выполня- ются для разных заказчиков, то у вас потенциально возможно возникнове- ние конфликтной ситуации. Вместо того чтобы просто игнорировать этот вопрос и повторно использовать код и схемные блоки из ваших прежних разработок, я бы предложил вам специально указать на него, заявляя в усло- виях контракта, что заказчик не приобретает эксклюзивное право на ис- пользование применённых в проекте решений. Точная формулировка это- го зависит от того, как много материалов вы обычно передаете заказчику. Я предпочитаю (и это также предпочтение заказчиков, если они знают, что делают) передавать все исходные материалы, включая исходный код, пред- варительно скомпилированные бинарные файлы, схемы, модели для про-
5.5. Оценивайте свои услуги должным образом ■ 229 ведения симуляций (если таковые имеются), файлы в формате Gerber для изготовления печатных плат, образец списка комплектующих с номерами микросхем, по которым можно сразу сделать заказ, и всё остальное, что по- требовалось бы другому человеку, чтобы принять у вас проект. Некоторые люди, впрочем, предпочитают передавать только бинарные файлы и файлы в формате Gerber. Из-за этого клиентам приходится возвращаться к вам в том случае, если они хотят внести какие-нибудь изменения. Но всё же не стоит ограничивать людей таким образом. Я настолько занят, что не могу гарантировать, что у меня будет время взглянуть на следующую версию про- екта. С моей стороны более этично передать все материалы и предоставить заказчику возможность при необходимости найти кого-нибудь другого для проведения работ по развитию проекта. Раз уж мы обсуждаем тему счетов и расценок, то вот вам мудрый совет: тре- буйте почасовой оплаты. Избегайте искушения назначить фиксированную цену в долларах на основе сметной стоимости проекта. Даже с самым лучшим в мире заказчиком, если вы зафиксировали общую стоимость всего проекта, вы окажетесь в ситуации, когда придётся работать в режиме жесточайшей эко- номии, чтобы удовлетворить запросы о введении небольших дополнительных функций. Помните, ваше время — деньги. Если вы работаете на базе фиксиро- ванной стоимости, то просьба заказчика о введении какой-либо дополнитель- ной функциональности или потребует переоценки проекта, или вам придётся согласиться, что, работая над удовлетворением этой просьбы, вы в принципе преподносите клиенту дар в виде наличности. Назначать цену на основании сметы можно только в том случае, когда у вас есть полная, заранее сделанная спецификация. Я, кстати, никогда не видел таковой, ни работая в промыш- ленности, ни занимаясь частной контрактной работой. Во все спецификации, по которым мне приходилось создавать продукт, их держатели вносили изме- нения на этапе реализации. Единственное исключение из этого общего пра- вила — обычно не требуют оплаты за часы, потраченные на определение цены проекта. Я бы, впрочем, советовал вам требовать плату за оценку работ по про- екту, которая влечет значительное количество исследований. Точка, за кото- рой вы можете считать количество исследований «значительным», зависит от ваших предпочтений. В качестве эмпирического правила можно считать, что если на оценку у вас уйдет более двух-трех часов, если понадобится позвонить поставщикам или производителям компонентов, чтобы выяснить, выполним ли проект, то вам, вероятно, следует выставить счёт за работу по оценке. Ина- че вы рискуете, что заказчик посмотрит на результаты вашей оценки проекта, а затем передаст его вместе с этими результатами на реализацию кому-нибудь
230 ■ Глава 5. Сам себе инженер другому. Этот другой человек будет избавлен от исследовательских работ, уже проведённых вами. Другими словами, в таком случае вы платите своим соб- ственным конкурентам! 5.6. Выработайте свою собственную, наиболее подходящую вам систему работы Невозможно переоценить необходимость того, чтобы бизнес предпринимателя-одиночки, занимающегося инженерными консультация- ми, и подчинялся этическим нормам, и был хорошо организован. В таком бизнесе имеется огромное количество вещей, с которыми необходимо управ- ляться. И если вы не обращаете должного внимания на подобные вещи, то бу- дете представлять собой весьма хаотическое зрелище для внешнего мира. Это не то, что рассчитано на привлечение будущих заказчиков. Создание системы ведения собственного бизнеса является императивом, как и постоянное сле- дование ей. Фактически предпочтительнее иметь примитивную систему, ко- торую вы постоянно используете, чем какую-нибудь «продвинутую», исполь- зуемую не часто. Принимая во внимание потенциальную сложность перевода бизнеса с одного способа ведения дел на другой, обычно также лучше следо- вать существующей системе до тех пор, пока не станет абсолютно невозможно тянуть с переходом на что-то новое. Вы загружены требующими выполнения техническими делами, и у вас нет времени на пересортировку файлов, ска- нирование документов и т. п. С другой стороны, если вы просто прекратите работать по одной системе и перейдёте на новую, то обеспечите себе массу вызывающих раздражение неприятностей (по крайней мере, в течение перво- го года или около того), потому что будете постоянно искать данные, которых нет в новой системе. Начнем с простого. Как я упоминал ранее, если вы ведёте свой собствен- ный бизнес, то неизбежно столкнётесь с требующими выполнения текущими бухгалтерскими делами. Эти канцелярские дела подобны колонии бактерий. Поначалу колония растет медленно, но, будучи оставлена без присмотра, за короткий период времени разрастается по экспоненциальному закону до ужа- сающих размеров. Вы можете держать этого монстра под уздой единственным способом — выделением в своём расписании времени для работы с ним, пред- почтительно ежедневно. Мне нравится резервировать на это от получаса до часа в конце рабочего дня, в течение этого времени я работаю с программой
5.6. Выработайте свою собственную, наиболее подходящую вам систему работы ■ 231 финансового менеджмента, ввожу данные по оплаченным счетам и получен- ным чекам. Затем я раскладываю канцелярские бумаги — счета-фактуры, кор- респонденцию и т. д. — по папкам. Наконец, вношу в свой рабочий журнал записи о том, что было сделано в течение дня и что запланировано сделать завтра. Что касается рабочих журналов, то было бы благоразумно купить тетра- ди, предназначенные для лабораторных работ, и вести дневник, записывая в него, что вы делаете изо дня в день. Имеются всякого рода оказии, когда такой документ может оказаться полезен. Например, вы можете обнаружить что- нибудь патентоспособное, и тогда, в случае если дело дойдет до суда, такие лабораторные журналы послужат превосходным свидетельством, подтверж- дающим дату, когда вами было сделано открытие0. Если возникнет пробле- ма с одним из ваших сданных проектов, то вы сможете также обратиться к документам и доказать, какое время было потрачено на конкретный проект и какого рода аналитические расчёты вы выполнили, разрабатывая данное устройство. Оставив в стороне юридические вопросы, следует сказать, что вы найдёте весьма удобной возможность заглянуть в прошлое и посмотреть на свои старые выполненные проекты, идеи и записи. Будьте либеральны в фор- мах, используйте наброски и описания к ним и не бойтесь включать памятки, такие, как математические оценки и т. п. Проектные спецификации — это другой вид документов, которые вы бу- дете создавать и архивировать. Вам понадобится выработать единый метод архивации своих проектов, такой, чтобы все требуемые данные (исходный код, инструменты разработки и т. д.) были собраны в одном месте. В этом случае, при необходимости, вы сможете передавать заказчикам копии всего проекта. Наличие всех этих должным образом архивированных материалов также поможет при просмотре старых проектов, если вам понадобится ис- пользовать что-нибудь повторно. Я предпочитаю архивацию в электронном виде. Я присваиваю номер каждому проекту, над которым работаю (включая личные проекты), и создаю директорию ВЕРХНЕГО уровня, именем которой является данный номер. В этой директории я создаю отдельные поддиректо- рии для каждой версии ПО или «железа», переданного заказчику (я обычно 0 Если вас беспокоит проблема патентоспособности, то этот вопрос включает гораздо боль- ше описанного мной здесь. Чтобы посмотреть пример того, что вам понадобится сделать для превращения этих журналов в самостоятельные юридические документы, посетите страничку с инструкциями компании Scientific Notebook Company по адресу www.scno.com/instruction.htm. Для получения определённых ответов вам следует обратиться за консультацией к адвокату, за- нимающемуся вопросами интеллектуальной собственности.
232 ■ Глава 5. Сам себе инженер не архивирую внутренние версии, только версии, которые ушли из моих рук и попали в чьи-то другие). Я также вношу в архив полный набор инструмен- тов, использованных при создании ПО, вместе с инструкциями о том, как их инсталлировать и настраивать, и всю техническую документацию на приме- нённые в проекте комплектующие. Помните, что, когда микросхема перево- дится в разряд устаревших, техническая документация на неё исчезает с сайта производителя. А поскольку больше никто не выпускает такую документацию в виде печатных справочников, то поиск данных на давно устаревшие микро- схемы может оказаться чрезвычайно тяжёлым делом. Когда проект завершен, я копирую относящуюся к нему папку с материалами на CD- или DVD-диск и отсылаю его заказчику. Фактически только после этого я считаю работу над проектом законченной. Другой вызывающей раздражение задачей является слежение за своими складскими запасами компонентов и иных припасов (припой, провода и т. д.) в условиях постоянной смены поставщиков. Большинство крупных компаний управляются с такого рода проблемой, поддерживая базу данных когда-либо использованных компонентов, которым присваиваются внутрифирменные обозначения. На каждый компонент с таким обозначением имеется специ- фикация, в которую внесено определённое число одобренных поставщиков. Если вы заказываете, скажем, бобину тонкопленочных резисторов поверх- ностного монтажа с обозначением 10 К 0603 5% 1/16W, то она может прийти от любого из трёх различных поставщиков. Но, когда она прибывает, вы сва- ливаете её в корзину — и буквально, и с административной точки зрения — с резисторами, пришедшими от всех других одобренных поставщиков. Такая система гарантирует, что вы всегда можете заказать компоненты «a la carte» (из списка), не беспокоясь о том, что производитель поменял их обозначение. И на ваших схемах также показываются только внутрифирменные обозначе- ния компонентов. К сожалению, поддержание подобной базы данных обычно требует слишком больших усилий, чтобы вести её в средней мастерской, где работает всего один человек. Поэтому вам просто надо быть готовым к про- ведению поисковой работы, когда вы соберётесь оформить заказ на полный список комплектующих для проекта. Сайты некоторых дистрибьюторов (на- пример, Mouser) оснащены весьма удобной функцией, которая позволяет вам переслать список компонентов для проекта и сохранить его на их сайте. В сле- дующий раз, когда вам понадобится сделать десяток разработанных в рамках этого проекта устройств, можно просто найти этот список на сайте дистри- бьютора и сказать, что вам надо десять комплектов, и заказ будет автоматиче- ски сформирован.
5.6. Выработайте свою собственную, наиболее подходящую вам систему работы ■ 233 Ваша система работы должна также включать информирование заказчиков о прогрессе в работе над проектом. Фирмы, занимающиеся доставкой почто- вых грузов, такие, как UPS и FedEx, давным-давно поняли, что ключевым мо- ментом, обеспечивающим продажу их услуг, является предоставляемая кли- ентам возможность видеть, как осуществляется процесс доставки их посылки. Как правило, плохо, если доставляемая вами посылка, адресованная в Нью- Йорк, была случайно направлена в Текумсе (Tecumseh), штат Алабама. Одна- ко, если столь печальное событие всё же произошло, будет лучше, если клиент знает, где находится его вещь, и ожидает поставки с задержкой, чем ситуация, когда посылку приносят с недельным опозданием и без единого слова объ- яснения. Аналогия здесь в том, что заказчикам будет тем приятнее работать с вами, чем более они будут информированы о продвижении работ по проекту. Что именно означает эта информированность, зависит от размера и природы проекта. На самый крайний случай я бы рекомендовал вам посылать заказ- чику сообщения по электронной почте всякий раз, когда происходит что-то существенное, как, например, доставка первых печатных плат, сборка первого макета и т. д. После того как вы поставите заказчикам работающее «железо», было бы хорошо пересылать им промежуточные версии встраиваемого ПО, которое вы продолжаете разрабатывать. В этом случае они могут помочь вам с его тестированием, а также в цикле разработки могут быть проработаны во- просы пользовательского интерфейса. С предыдущими рассуждениями близко связан критически важный для поддержания удовлетворительных отношений с заказчиками пункт, коим яв- ляется предоставление клиентам возможности контактировать с вами тогда, когда им это необходимо. Это может представляться проблематичным, если помимо выполнения контрактного задания вы ещё работаете на обычной ра- боте. Я поэкспериментировал с различными типами аппаратов электронной коммуникации и пришёл к выводу, что на сегодняшний день наилучшим ре- шением является коммуникатор Blackberry0. Существуют и другие приборы, предоставляющие услуги сотовой связи и доступ к электронной почте, но я продолжаю возвращаться к BlackBerry из-за его скорости, широкой поддерж- ки и простоты использования. С устройством такого типа вы можете поддер- живать связь посредством электронной почты и просматривать некоторые 1) С момента написания этой книги появилось множество других коммуникаторов, т. е. КПК, снабжённых модулем сотовой связи и, во многих случаях, клавиатурой, и рас- считанных на работу в GSM-сетях. Их выпускают компании НТС, Toshiba, Gigabyte и т. д. Стоимость их в России составляет сейчас от 10 000 до 30 000 руб. в зависимости от характе- ристик. — Примеч. науч. ред.
234 ■ Глава 5. Сам себе инженер вложенные файлы критически важных форматов (например, PDF или до- кументы Microsoft Word). Этот прибор может длительное время находиться в режиме ожидания, и он в то же время физически мал, надёжен и прост в ис- пользовании. Хотя в большинстве сотовых телефонов также имеется доступ к электронной почте, чтение и написание нормальных текстовых сообщений в них представляет собой очень утомительное занятие из-за крошечного экрана и причудливого метода ввода с клавиатуры. Помните, что хорошо, когда вы отвечаете на звонки заказчиков, но будет гораздо лучше, если вы будете брать телефон и звонить клиентам с упрежде- нием. Если есть что-то, что заказчику необходимо знать (даже если это пло- хие новости), то для деловых отношений было бы гораздо лучше, если бы вы позвонили ему сразу же, как только узнали эти новости, не дожидаясь, пока заказчик позвонит вам. 5.7. Не просто рукопожатие, или о важности контрактов Существует распространённое мнение (неправильное!), что можно вести дела с друзьями или членами семьи без какого-либо формального докумен- тирования работы. Многим людям также кажется, что настаивание на заклю- чении контрактов, на определении сроков платежей и условий продаж будет неявно подразумевать недостаток доверия к одной или обеим сторонам и по- дорвёт личные взаимоотношения с вышеупомянутыми друзьями и членами семьи. Такое отношение настолько далеко от действительности, насколько вы во- обще можете от неё оторваться. Если бы я мог в этом разделе впечатать в ваш мозг лишь одну краткую максиму, то я бы хотел, чтобы ею была эта: «Дру- зья не позволяют друзьям работать над проектами на непонятных условиях!» Контракты не приводят к желчности и неприязни, они предотвращают их! Откровенно говоря, если вы полагаете, что заказчики собираются обмануть вас в контракте, или если вы ищете пути обмануть их в письменной форме, то вам вообще не следует браться за предлагаемую работу. Более того, если вы не можете с кем-то прийти к письменному соглашению, то это априори сви- детельствует о том, что вы не сможете достичь (и придерживаться их!) также и устной договорённости. Вы можете обменяться рукопожатиями и договорить-
5.7. Не просто рукопожатие, или о важности контрактов ■ 235 ся за чашечкой кофе о начале работ по проекту, но абсолютно точно то, что в дальнейшем вы будете спорить о сроке окончания проекта. Первая фундаментальная причина необходимости для вас иметь заклю- чённый контракт состоит в том, чтобы избежать возникновения неожидан- ностей для любой из сторон. Если у вас есть контракт, в котором оговорено, что «сторона А оплатит поставку авиационным транспортом работающий ма- кет на гору Эверест», то сторона А знает это наперед и может строить планы данного действа. Если подобная подробность не определена заранее, то сто- рона А может ожидать, что законченное устройство прибудет на место через неделю и нет необходимости платить дополнительные деньги, а сторона Б, возможно, ожидает отправки устройства идущим четыре недели пароходом за счёт стороны А. Вторая фундаментальная причина того, почему вам абсолютно необходимо иметь контракт, состоит в том, что контракт (возможно, посредством техни- ческих спецификаций) определяет, когда проект заканчивается, как в смысле времени, так и в смысле готовности к поставке. Это всё приводит к важным следствиям: • Ваши клиенты точно знают, что они получат за свои деньги. Это особен- но важно, если вы провели оценку проекта на основе whole-project (хотя я и не рекомендую этого делать, см. раздел 5.5). • И вы, и ваши заказчики понимаете, за что ответственна каждая из сто- рон. • Вы ясно себе представляете (конечно, при условии, что можете следо- вать установленным контрактом срокам!), когда освободитесь и сможете взяться за работу, предложенную кем-нибудь ещё. Следует упомянуть, что время от времени вас будут просить подписать со- глашение о конфиденциальности (NDA — Non-Disclosure Agreement). Не- редко человек, просящий вас подписать соглашение о конфиденциальности, хочет, чтобы вы сделали это до сообщения вам вообще какой-либо информа- ции о предмете, которого это соглашение касается. Мой совет вам: не только не подписывайте, но даже не читайте предлагаемое соглашение о конфиден- циальности, если только вы крайне не заинтересованы в проекте. Некоторые люди (по обе стороны забора клиент/подрядчик) рассматривают соглашение о конфиденциальности в качестве своего рода предварительного придворного ритуала для установления деловых взаимоотношений, не имеющего значения и не несущего риска ни для одной из сторон.
236 ■ Глава 5. Сам себе инженер Но не совершите ошибку! Подписание соглашения о конфиденциально- сти, касающегося проекта, о котором вы ровным счётом ничего не знаете, по- тенциально очень опасно. Это вдвойне верно, если вы уже связаны соглаше- ниями о конфиденциальности с другими клиентами или (ещё хуже!) с вашей основной работой. Подумайте, что может произойти, если вы подписываете соглашение, а затем клиент рассказывает вам о проекте.. И тут выясняется, что данный проект является прямым конкурентом тому, которым вы зани- маетесь на основной работе. Даже если на вашей работе позволено совмести- тельство, тем не менее работать над обоими проектами было бы чрезвычайно неэтично. В подобном ключе рассмотрите, что может произойти, если вы подпишите соглашение о конфиденциальности (и получите соответствующую информа- цию) по проекту, который окажется конкурентом контрактной работе (или просто имеет к ней отношение), выполняемой вами для кого-то другого и где вы также связаны другим соглашением. Даже если вы никогда не возьметесь за второй проект, вы всё же оказываетесь в неприятной ситуации. После за- вершения первого проекта тот, кто хотел нанять вас для выполнения второго, может затеять судебную тяжбу против вас и нанявшей вас компании за кражу коммерческих секретов. Поэтому, говоря коротко, подписанием соглашений о конфиденциальности вы волей-неволей роете себе глубокую юридическую яму, последующее вылезание из которой может обойтись очень дорого. Конечно, просто просьба клиента о подписании такого рода бумаг — ещё не повод быть невежливым, и это столь же не обязательно причина прекращения работы над проектом. Если меня просят о предварительном подписании со- глашения о конфиденциальности, то я всегда отвечаю, что моя политика — не подписывать такие соглашения для проектов, за исключением той части, ко- торая относится к процессу предварительной оценки (поскольку этот процесс является первой формальной операцией в технических взаимоотношениях, которая влечет обмен детализированными спецификациями). Затем я предла- гаю другой договаривающейся стороне предоставить дальнейшую информа- цию по проекту, чтобы я мог решить, в моей ли компетенции его выполнение и интересно ли мне им заниматься. Если вы будете следовать этому методу, то, разумеется, оговаривайте, что другому человеку не следует раскрывать вам какую-либо секретную информацию. Я прошу людей использовать для отбора предоставляемых мне подробностей правило: «Не рассказывайте мне ничего такого, что бы вы не стали рассказывать незнакомцу в баре».
5.7. Не просто рукопожатие, или о важности контрактов ■ 237 В качестве ремарки хочу сказать, что я работал в компаниях, которые имели дело с большим количеством сторонних изобретателей. Индустрия игрушек, например, таким способом собирает много оригинальных идей. Чтобы избе- жать и Сциллы ухода хорошей идеи к конкурентам, и Харибды0 втягивания в судебное разбирательство изобретателем, который наносит визит, показы- вает что-то, над чем компания уже работает, а затем, когда собственный, не- зависимо разработанный компанией продукт выходит на рынок, возбуждает судебное дело, по крайней мере, пара крупных занимающихся производством игрушек фирм просто скупают идеи оптом и хранят их до лучших времён в архиве. Мой собственный опыт общения со сторонними изобретателями говорит о том, что на драконовских предварительных соглашениях обычно настаивают очень неопытные изобретатели, делающие только первые шаги. Мне почти никогда не доводилось видеть, чтобы за этими условиями скрывалась действи- тельно вдохновляющая идея. Некоторые из этих людей фактически просто любители, которые поддались на приманку одной из этих широко разрекла- мированных жульнических компаний, занимающихся «поощрением изобре- тательства». Вы можете прочитать массу всего об этом на сайте FTC (Federal Trade Commission — Федеральная торговая комиссия) по адресу www.ftc.gov/ bcp/conline/pubs/services/invent.htm и, возможно, захотите взглянуть на сайт National Inventor Fraud Center Inc. (Национальный центр изобретательских уловок), адрес которого www.inventorfraud.com. Существует много компаний, реклама которых утверждает, что они способ- ны помочь вам превратить идею в изобретение, которое будет пользоваться спросом на рынке, и заработать миллионы2). Фактическая их задача заключа- ется в том, чтобы, используя обычный мошеннический набор уловок, завлечь вас в эту деятельность и выманивать всё больше и больше денег. 0 Мифические создания из «Одиссеи» Гомера. Они охраняли Мессенский (Сицилий- ский) пролив. Сцилла была шестиглавым чудовищем, и корабли, которые проплывали слишком близко к ней, теряли шестерых членов команды. Харибда трижды в день созда- вала водовороты и извергала столбы воды. Корабли, которые подходили к ней слишком близко, подвергались риску быть полностью разрушенными. Оба создания первоначально были прекрасными нимфами. Харибда была приговорена к своей участи Зевсом за кражу овец, а Сцилла была заколдована злой ведьмой Цирцеей. 2) Разведение альпаки большой пенной волной захлестнуло сельское хозяйство про- шлого века. Продвижение изобретений, возможно, является соответствующей пенной волной, которая захлестнёт надомный бизнес XXI века.
6 ГЛАВА РАБОТА В НЕБОЛЬШОЙ КОМПАНИИ 6.1. Анализируйте свои цели: достоинства и недостатки небольшой компании В этой главе я расскажу о работе в «маленькой» компании. Под этим опре- делением я подразумеваю корпорацию, вся деловая активность которой про- ходит в одном месте (возможно, в её состав входят несколько дистанционно работающих офисов), которая обычно не доминирует на тех рынках, где она продает свои товары и услуги. Существует также особый класс небольших инженерных фирм, к которым второй критерий неприменим. А именно это компания (зачастую новичок), обладающая или поистине инновационным продуктом, или продуктом, занимающим весь сегмент вертикального рынка0, или владеющая главным образом IP -блоками (Intellectual Property — интел- лектуальная собственность), хорошо защищенными патентами и авторскими правами. Такого рода компания «господствует» на своём рынке по умолчанию, так как она является единственным значительным игроком. Как вы и предполагаете, у работы в небольшой компании есть как свои преимущества, так и свои недостатки, которые представляют собой нечто среднее между преимуществами и недостатками частного предприниматель- ства и работы в большой корпорации. Подходит такая работа для вас или нет, зависит, по большому счёту, от личных предпочтений. Трудовая деятельность в небольшой фирме, по меньшей мере, превосходно готовит к работе в более 0 Рынок, на котором предложение какого-либо товара ограничено, в то время как все покупатели очень нуждаются в данном товаре. — Примеч. ред.
6.1. Анализируйте свои цели: достоинства и недостатки небольшой компании ■ 239 крупных компаниях. Возможно, самым большим преимуществом (некоторые посчитают это недостатком) деятельности в условиях небольшой компании является то, что в компетенцию каждого члена команды входят вопросы раз- личного профиля. Замечательным здесь является то, что вы многое узнаете о том, как ведутся дела, и, кроме того, вам придётся решать проблемы, имею- щие отношение к разным уровням организации. Однако в то же самое время вокруг будут люди, на которых вы сможете опереться в «инфраструктурной» работе — оплате счетов, вопросах снабжения т. д. И вы сможете сидеть на большей финансовой подушке, чем та, которая была бы под вами, будь вы свободным консультантом. Вы также будете счастливы, узнав, что объём бумажной работы в неболь- ших компаниях сведён к абсолютному минимуму, какой только может быть в инженерных делах. Частным предпринимателям приходится выполнять до- вольно много черновых дел, поскольку у них нет никого другого, кто бы отве- чал за то, что лампочки светятся, счета оплачены и т. п. Инженерам в крупных фирмах приходится тратить на процедурные мероприятия даже больше вре- мени, потому что существует определённая политика компании, принуждаю- щая к этому. Работая в маленькой организации, вы избегнете как того, так и другого. Во многих таких фирмах инженер, в сущности, вполне может вообще избавиться от любой нетворческой работы. Божья это благодать или нет — вопрос отдельный. И инженеры, и препода- ватели постоянно жалуются на «ковбоев кода», которые работают в небольших компаниях без какого-либо контроля. Неважно, от чего вы можете избавить- ся — от возни с бумагами, оценок проектов и прочих вызывающих раздраже- ние дел, — важно, чтобы в результате поставлялся объективно высококаче- ственный продукт. Хотя вполне может статься, что ваше руководство, не видя скрытый под обёрткой непричёсанный дизайн, будет премировать вас за то, что продукт поставлен и работает; помните, что каждый проект, над которым вы трудитесь, потенциально пополняет ваш портфель выполненных задач и, возможно, будет рассматриваться другим работодателем. Также задумайтесь на минутку о том, что главнейшая цель многих небольших фирм — разрабо- тать какую-нибудь пользующуюся высоким спросом на рынке технологию и быть купленными крупной компанией. Когда настанет сей день великой ин- теграции, ваша разработка станет объектом тщательного анализа настоящих инженеров, оценивающих ценность вашей компании. Если вы работали на непрофессиональном уровне, то вы не только будете плохо выглядеть, но и, возможно, поставите под вопрос всю сделку. Так как подобные приобретения
240 ■ Глава 6. Работа в небольшой компании часто1* сопровождаются крупными выплатами участвовавшим в работе над проектом инженерам, то вы окажете себе тем самым медвежью услугу. Небольшие компании предлагают широкий спектр зарплат и компен- саций, а также различные схемы деления прибыли и те или иные пенсион- ные программы. В любом случае вы можете ожидать разумное жалованье и спонсируемую работодателем медицинскую страховку. Всё, что сверх этого, довольно туманно. Вам не следует ожидать от небольшой компании компен- сации затрат на обучение, пенсионной программы по выслуге лет2), программ скидок для работников и т. д., хотя некоторые фирмы, конечно, всё же прак- тикуют подобные поощрения. Хорошая новость состоит в том, что в малень- ких организациях вам с гораздо большей вероятностью, чем в крупных компа- ниях, выплатят премиальные в конце года. Средний рост выплат в них обычно также более тесно увязан с полученной прибылью. Обратная сторона этого может оказаться довольно безрадостной. Поскольку ваша зарплата непосред- ственным образом связана со способностью компании осуществлять прода- жи, а подушка финансовой безопасности довольно тощая, то любой более или менее длительный перерыв в продажах может означать, что вы не получите жалованья вовсе. Сильные стороны маленькой организации — быстрая адаптация и про- являемая гибкость. Поскольку многие процедуры формально не документи- рованы и не регламентированы, то работники вольны приспосабливаться к меняющимся обстоятельствам так, как будет лучше для дела. Кроме того, что такое поведение позволяет компании в краткосрочной перспективе лучше удовлетворять потребности клиентов, это также способствует росту у работ- ников чувства уверенности в собственных силах, что может быть очень хоро- шо с точки зрения морального состояния. Негатив в том, что такой высокий уровень гибкости неизбежно приводит к определённому уровню хаоса в еже- дневной деятельности фирмы. 0 Не всегда, конечно. Проработав в компании какое-то время, попытайтесь получить некоторое количество акций. Это вернейший путь к большой премии, когда настанет день покупки. 2) Обратите внимание на разницу между пенсионной программой по выслуге лет (опре- делённый платеж, которым вас вознаграждают при выходе на пенсию на основе того ко- личества лет, которые вы проработали в компании) и обычной пенсионной программой (фиксированное сальдо, накопленное за все годы вашей трудовой деятельности и распре- деляемое в соответствии с вашими предпочтениями после достижения пенсионного воз- раста).
6.2. Как устроиться на работу ■ 241 Невзирая на этот недостаток, вполне преодолимый, время, проведенное в небольшой фирме, может помочь вам выработать прочную трудовую этику и начать формирование связей с поставщиками и коллегами, которые будут работать с вами в будущем. Но, пожалуй, самое важное то, что вы обретёте большие познания о всех этапах процесса разработки нового продукта. 6.2. Как устроиться на работу Хотя решения о найме на работу, конечно, принимаются индивидуально, существуют некоторые общие правила, которые будут вам полезны при по- иске работы в небольшой компании. Во-первых, примите во внимание, что человек, который будет читать ваше резюме и беседовать с вами, почти на- верняка будет одним из высших должностных лиц компании, обладающим властью единолично принять решение о приёме вас на работу. Сравните это с ситуацией в крупной фирме, где первой ваше резюме читает и потенциально отвергает компьютерная программа, а человек, который интервьюирует вас, только передаст наверх свою рекомендацию принять вас на работу. Отмечу также имеющий близкое отношение к теме факт, что у беседующего с вами человека из небольшой компании есть прямой интерес в определении вашей ценности (сколько я заработаю на этом парне против того, сколько мне при- дётся ему платить). Это не всегда так, когда имеешь дело с крупной фирмой. Чтобы получить приглашение прийти на интервью, требуется привести (в резюме или сопроводительном письме) список, демонстрирующий ваши кон- кретные рабочие достижения, предпочтительно приведшие к незамедлитель- ным и впечатляющим результатам. Самый простой способ составить его — на- писать о конкретных, выполненных вами проектах. Если таковых нет, следует сделать упор на ваши разноплановые обязанности в коммерческих проектах. Например, вы были ведущим инженером при разработке некоего устройства, и в ваши обязанности входило написание программ, контроль работы инже- нера, проектирующего аппаратные средства, а также взаимодействие с произ- водством в одной из стран на Дальнем Востоке, на котором требовалось из- готовить печатные платы, а затем должным образом собрать и протестировать макет. Всё это следует написать в своём сопроводительном письме. Если вы можете включить подробности о времени, затраченном на разработку (время до создания работающего макета, время до начала выпуска), было бы неплохо это сделать. Кстати, я бы предложил вставить в сопроводительное письмо и в
242 ■ Глава 6. Работа в небольшой компании резюме ссылки на то, что действительно соответствует специфике работода- теля (например, проекты, относящиеся к тому сегменту промышленности, в котором работает фирма). Некоторые руководства советуют писать краткое сопроводительное письмо и полагаться на то, что интервьюер узнает всё о ва- шей карьере до настоящего момента, прочитав резюме. В том случае, если весь процесс принятия решения о найме возложен на человека, я принциаль- но не согласен с этим. Сопроводительное письмо подобно первой главе кни- ги. В ней вам надо убедить читателя, что остальной текст будет ему интересен. Сопроводительные письма в процессе трудоустройства в большую компанию важны в ином смысле (см. раздел 7.2). Я подозреваю, что на людей, советую- щих писать краткие сопроводительные письма в стиле «пожалуйста, благода- рю вас», оказал сильное влияние процесс трудоустройства в крупную фирму. Эта часть процесса найма на работу, конечно, сложнее, если вы только что закончили учебное заведение (или пока не закончили) и у вас за душой нет никаких коммерческих проектов. Однако вы всё же можете вызвать интерес интервьюера, продемонстрировав личные и учебные проекты, над которыми работали. Следует выделиться среди остальных соискателей, показав, что вы раздумывали над вопросами, которые оказывают влияние на реальное про- изводство, но которыми часто пренебрегают в личных проектах. Например, доступность в будущем компонентов, использованных вами при разработке, пути дальнейшей модернизации, технологичность, возможность автоматиче- ского тестирования и стоимость комплектующих. Также лицезрение проекта, выполненного из заказных компонентов, прикрученных к раме устройства, не столь впечатляет, по сравнению с проектом, разработанным вами «с нуля». Когда вы попадаете на собеседование, то получаете шанс усилить впечат- ление от материалов, поданных вами на рассмотрение. Я бы также предложил принести с собой какие-нибудь физические образцы из вашего списка про- ектов, чтобы при желании их можно было продемонстрировать. У вас также есть шанс узнать, не увлекается ли человек, который будет брать вас на работу, какой-нибудь специфической модной технологией или методологией про- ектирования. Это что-то вроде красного флажка, намекающего на будущие мелочные руководящие указания, особенно если интервьюер не имеет прак- тического опыта в данной технологии. Работа с кем-то, кто будет без всякой необходимости влезать в процесс проектирования, чревата стрессами, и это верно вдвойне, если у такого человека меньше опыта практической работы, чем у вас. С другой стороны, если вы действительно будете доведены до отчая- ния подобной работой, то можете просто признать свою вину и согласиться
6.2. Как устроиться на работу ■ 243 с точкой зрения руководителя на то, как должны делаться дела. Есть опреде- лённая вероятность обнаружить, что начальство было право и выбранная ими технология действительно великолепно подходит для данной работы. Мой опыт, впрочем, говорит, что такое случается редко. Гораздо более вероятно, что ваше чувство разочарования будет неуклонно нарастать, пока не переве- сит удовольствия от регулярного получения заработной платы. Как раз в это время вы обнаружите, что опять заняты поиском работы. Соревнование за вакансии небольших фирм не очень интенсивно (отно- сительно). О нём обычно не часто объявляют в национальном масштабе. Вы можете найти объявления в печатных изданиях, но не всегда в сети. Вторич- ным следствием этого может оказаться (хотя это и маловероятно) то, что, пы- таясь устроиться на работу в небольшую компанию, вы будете конкурировать только с представителями предлагающих свои услуги сторонних фирм и ино- странцами, получившими рабочую визу, выдаваемую специалистам в области высоких технологий. Так как же вам узнать о таких вакансиях? Вы можете просматривать имею- щиеся в сети списки объявлений. Многие из них вылавливаются из местных печатных изданий. К сожалению, вакансии, размещаемые на сайтах, при- влекают огромное число претендентов с низкой квалификацией. Просто для просматривающего сайт слишком уж легко щёлкнуть по кнопке «Послать ре- зюме» и отправить письмо сотням людей. Так что ваше резюме может быть просто не замечено в море петиций от таких соискателей. Поэтому мне пред- ставляется, что лучше всего искать работу в небольшой компании с помощью агента0. Комментарии, написанные мной в главе 2, о том, как найти агентов по трудоустройству, в полной мере применимы к данному процессу. Использование связей — следующий наилучший способ найти работу в не- большой фирме. Если вы ещё учитесь, то поспрашивайте своих профессоров и кураторов о местных фирмах, деятельность которых связана с изучаемой вами специальностью. При наличии опыта работы в промышленности по- говорите с вашими коллегами. У многих из них найдутся друзья, управляю- щие маленькими предприятиями, на которых могут быть вакансии. Если ни- чего из этого не приведёт к желаемому результату, то вы можете почерпнуть какие-нибудь идеи из списков местных «Жёлтых страниц» и торговых палат. !) Возможно, вам покажется интересной книжка (хотя уже и немного устаревшая) Лин- ды Резник (Linda Resnick) «Большой всплеск в маленьком пруду: поиск классной работы в маленькой фирме» (A Big Splash in a Small Pond: Finding a Great Job in a Small Company, Fireside, January 1994, ISBN 0-6717-9807-3).
244 ■ Глава 6. Работа в небольшой компании Намекну, что найти вашу местную торговую палату можно через сайт www. chamberofcommerce.com. Многие местные торговые палаты публикуют в сети списки вакансий для своих членов (обычно через сторонние службы разме- щения объявлений о вакантных местах, таких, как quietagent.com). Однако не ограничивайтесь только этими объявлениями, так как многие предложения, в частности вакансии совсем небольших фирм, не попадают в эту систему. Если вы видите компанию, которая вам интересна, свяжитесь непосредственно с ней и задайте вопрос о возможном наличии вакантных мест. 6.3. Небольшая компания: ответственность и стрессы В течение своей карьеры я работал на постоянной основе в двух очень от- личающихся друг от друга небольших компаниях, которые обе вышли из игры. Первая фирма занималась разработкой ПО и, по сути, прекратила своё суще- ствование из-за технологического прогресса, так как её основные продукты перестали отвечать требованиям времени. В ней не разрабатывалась стратегия выживания в условиях появления новых конкурирующих продуктов или до- полнительных функций, встроенных в потребительские ОС до тех пор, пока не стало слишком поздно. И, что ещё хуже, специфический продукт, пред- лагавшийся компанией, обеспечивал выполнение той же функциональности, которая уже была наилучшим образом реализована в существующей ОС. Дру- гая фирма, занимавшаяся «железом», пала жертвой серии неумных маркетин- говых решений и неблагоприятных колебаний цен на компоненты. Компания непомерно разрослась, что в результате и стало причиной её смерти. Обе мои должности временами бывали весьма стрессовыми, но, возможно, не по тем причинам, на которые вы могли бы подумать. Когда работаешь в небольшой компании, зачастую чувствуешь себя очень одиноко. Я имею в виду не то, что сослуживцы тебя избегают, а то, что ты мо- жешь оказаться единственным человеком, кто по долгу службы принимает тех- нические решения по проекту. Это может быть чревато серьезными стресса- ми. Занимаясь личными проектами, вы можете показать эскизы конструкции преподавателям, друзьям или просто опубликовать их в Интернете и попро- сить комментариев. В крупной компании ваша работа при разборе проектных решений является объектом оценки со стороны людей, которые (по крайней мере, теоретически) тщательно её изучат и заметят глупые ошибки до того,
6.3. Небольшая компания: ответственность и стрессы ■ 245 как вы реализуете свой проект «в железе» или поставите программу ничего не подозревающей публике. В небольшой компании у вас может вообще не быть никакой подобной страховки, за исключением обсуждений проекта с некото- рыми близкими знакомыми. Прибавьте к этому тот факт, что небольшая ком- пания не сможет пережить большого количества крупных, дорогостоящих ин- женерных ошибок, и вы увидите, сколь тяжёлый груз ответственности лежит на ваших плечах. Главный фактор, отличающий работу в маленькой компании от частного предпринимательства, в том, что, когда вы трудитесь над выполне- нием заказа от корпорации, ваши личные активы не подвергаются риску (хотя потеря чека с оплатой может, конечно, повлиять на них косвенным образом). Впрочем, в частном предпринимательстве достаточно и своих стрессов. Близко к указанной теме относится ещё одна ответственность, теперь уже этического плана, над которой вам надо подумать, а именно ваша замени- мость. В небольшой компании очень легко стать незаменимым. Вопрос в том, действительно ли вы хотите оказаться таковым? В частности, если в компании наступают трудные времена, вы можете захотеть поискать новых возможно- стей. В зависимости от того, насколько у вас развито чувство порядочности, вам может оказаться непросто подать заявление об увольнении через две не- дели, зная при этом, что компания не сможет заменить вас. Технически работа вашего руководства — следить за тем, чтобы вы не оказались незаменимым. Это их служебная обязанность организовать рабочий процесс таким образом, чтобы всё, что вы делаете, хорошо документировалось на тот случай, чтобы, если завтра вы «вскочите на подножку уходящего поезда» (или будет завер- бованы компанией Microsoft0), на ваше место можно было посадить кого- нибудь другого. На практике лишь немногие руководители небольших компаний понима- ют, какой объём документации необходим или в каком виде эта документация должна выпускаться. Уже хорошо, если они вообще время от времени думают о данной проблеме (большинство из них не очень-то обращает внимание на такие вещи). При тщательной организации своей работы вам будет легче под- готовить смену, если вы решите перейти куда-нибудь ещё. Также будет гораздо проще «натаскать» подчинённого, если компания станет расти и понадобит- ся нанять работника под ваше начало. Уверен, что во многих компаниях вы смогли бы перебиваться, набрасывая заметки на обёрточной бумаге и исполь- зуя для резервного копирования исходных кодов кипу пыльных дискет, кото- 0 При наличии выбора многие инженеры пойдут не по тому пути, который вы, воз- можно, предполагаете.
246 ■ Глава 6. Работа в небольшой компании рые затем зашвырнёте на самое дно ящика старого шкафа. Однако вам следует до некоторой степени использовать в качестве меры собственной инженерной компетенции ту легкость, с какой другой человек может, разместившись в ва- шем кресле, взять ваш проект и продолжить его разработку. Как и в случае «свободного художника», я предлагаю структурный подход к организации дел, выполняемых вами в течение рабочего дня. Разумеется, сна- чала вам следует выяснить, не обнародовала ли компания рекомендации по этому вопросу. Если нет, то разработайте свою собственную систему работы (и не забудьте оформить её документально!). Наступит день, к вам войдет началь- ник и скажет: «Нам нужно нанять нового инженера. Покажите мне, что ему будет нужно узнать». Или, возможно, начальник скажет: «Корпорация XYZ ведёт переговоры о покупке нашей компании. Её адвокаты хотят ознакомить- ся с нашей интеллектуальной собственностью. Покажите мне, что я могу им передать?» В любом случае ваша жизнь будет гораздо проще, если вы сможете просто протянуть ему пачку резервных CD-дисков или показать место в сети и дать документ, объясняющий, как найти то, что ему нужно. Документировать что и как вы делаете — это просто профессиональный подход. Последователь- ность также приведёт к улучшению результатов вашей работы. В маленькой фирме (особенно в такой, финансовое положение которой неустойчиво) вы иногда будете до неприличия хорошо осведомлены о ком- мерческом аспекте её деятельности. В худшем случае вы обнаружите, что сами прислушиваетесь к звонкам в отдел сбыта. Так что вы, возможно, будете знать, предстоит ли выдача зарплаты на этой неделе или нет. При таких обстоятель- ствах инженеров часто отвлекают от разработки долгосрочных проектов в пользу быстрого «латания дыр» в заказываемом покупателем продукте с це- лью обеспечения конкретной продажи. С другой стороны, плюс от сильной зависимости типа «продажи—зарплата» состоит в том, что инженерный пер- сонал кровно заинтересован в принятии продукта конечным пользователем. Это может в идеале привести к созданию чрезвычайно полезных и хорошо сконструированных устройств, спроектированных с учётом нужд реальных покупателей. Другой сильный стресс, с которым вы столкнётесь в небольшой компании, связан с дефицитом людских ресурсов, денег и времени. Эта тема столь важна, а охватываемые ей вопросы будут оказывать столь сильное влияние на вашу работу, что она вынесена в отдельный раздел 6.5.
6.4. Межличностные отношения в небольших компаниях ■ 247 6.4. Межличностные отношения в небольших компаниях Может показаться, что этот раздел немного не к месту в книге об инже- нерном деле, но вы будете проводить ужасно много времени со своими кол- легами, и полезно помнить, что все они живые люди. Так что уместно сказать здесь несколько слов о взаимоотношениях людей в маленькой фирме. Когда вы работаете как «свободный художник», вы более защищены от превратно- стей человеческой психики. Клиенты, в большинстве своём, вежливы, а если по какой-либо причине вам не нравится конкретный заказчик, то вы всегда можете сослаться на свою загруженность, когда он будет вам звонить с пред- ложением работы. В небольшой компании ситуация совершенно иная. Если вы ищете работу, на которой сможете проводить время, спрятавшись в своём боксе, барабаня по клавиатуре и возясь с осциллографом и на кото- рой не нужно высовывать голову, чтобы поговорить с нормальными людьми из плоти и крови, то вам действительно лучше работать в крупной фирме. В условиях небольшой компании вы абсолютно точно не сможете избежать взаимодействия с большим количеством людей. Потребуется ваше участие в беседах с приходящими представителями поставщиков, поскольку вы буде- те единственным человеком, кто сможет компетентно оценить предлагаемые ими компоненты. Вас будут вытаскивать на встречи с заказчиком, поскольку никто, кроме вас, не сможет ответить на технические вопросы. И самое глав- ное, каждый день вы будете иметь дело с большинством или со всеми вашими коллегами, поскольку в маленькой компании нет людей (таких, как начальни- ки отделов и т. п.), чьей задачей является обеспечение взаимодействия между специалистами разного профиля в одной фирме. Вам придётся иметь дело с инженером-механиком, проектирующим корпус для вашего устройства, со снабженцем, закупающим комплектацию для вашей очередной конструкции, с маркетологом, готовящим материал для презентации, и, хуже всего, с конеч- ными пользователями вашего продукта и разговаривать об имеющихся у них проблемах. Меня всегда страшила эта часть работы в небольшой компании. И не потому, что я такой мизантроп, просто согласно моему опыту очень ма- лая часть времени, затрачиваемого на техническую поддержку, действительно тратится на устранение проблем с вашим продуктом. В частности, в случае устройств, которые тем или иным образом подключаются к компьютеру, поч- ти всё время, которое вы проведёте в телефонных разговорах с клиентом, уй- дёт на объяснения того, как обращаться с используемой им ОС, маршрутиза-
248 ■ Глава 6. Работа в небольшой компании тором или каким-нибудь иным аппаратным или программным продуктом, за работу которых лично вы не несёте никакой ответственности. К сожалению, в большинстве небольших компаний инженер оказывается единственным со- трудником, образование которого каким-то образом (обычно формальным) связано с подобными вопросами. В результате такого очного общения перед вами пройдет весь спектр люд- ских настроений — от руководителей до остальных коллег. Небольшие компа- нии часто сравнивают с семьями. Что ж, в замкнутом мире, подобном семье, простое раздражение легко может перерасти в крупный, угрожающий карьере конфликт. Звучит поверхностно, но наилучшая политика, которой вы можете следовать: если страсти накаляются, следует вежливо уступить, пока спор не вышел за рамки разумного. Даже если у вас есть сильные аргументы на спор- ную тему, помните, что вы всего лишь на работе. Вы можете придерживаться личного мнения, отличного от общего, о том, что есть «правильно», никоим образом не жертвуя личностной целостностью. Я говорю здесь главным обра- зом о спорах по техническим вопросам, но те же самые принципы применимы к общим дискуссиям по всему спектру человеческих дум. Небольшие компании, разумеется, подчиняются тем же самым законам о притеснениях на рабочем месте и об обеспечении безопасности проведения работ, что и крупные. Разница в том, что в небольших фирмах не нанимают людей специально для того, чтобы они выискивали нарушения этих законов. Также в них обычно нет обнародованного свода правил на эти темы. В резуль- тате люди, вступая в спор, обычно заранее не представляют себе его возмож- ных последствий0. Поэтому нет ничего невероятного в том, что спор может превратиться в перебранку, или дело даже дойдёт до оскорблений. Нет необ- ходимости говорить о том, что это наихудший из возможных исходов, кото- рый может привести к тому, что вы будете мучиться воспоминаниями об этом в течение всей трудовой деятельности. Здесь ход мысли должен быть следующим. Чего вы пытаетесь добиться, спо- ря о чём-то с вашим руководством? Они платят вам зарплату и ожидают, что вы будете делать так, как вам говорят. Если вы считаете, что это не лучший способ действий, то ваш служебный долг сообщить им об этом и объяснить почему. Когда вы предоставили свои соображения и комментарии в письменном виде, руководство может решить не принимать вашу точку зрения. Это его прерога- 0 Я не говорю, что работа в условиях, когда все постоянно оглядываются через плечо, ища свод правил о том, как надо думать, обязательно благотворнее. Но такая работа опре- делённо спокойнее и, возможно, безопаснее.
6.5. Работа в условиях жестко ограниченных ресурсов ■ 249 тива, оно несёт ответственность. Хотя, возможно, его решение нанесёт ущерб вашему финансовому благополучию (если руководство введёт компанию в пике, следуя, например, тупиковой технологии), вы можете утешить себя мыс- лью, что ваше руководство постоянно принимает решения с примерно тем же самым эффектом. А та частность, которую вы оспариваете, просто ещё одна капля в море. Хороший руководитель в большинстве случаев принимает пра- вильные решения. Если вы работаете под началом плохого руководителя, при- нимающего значительное число плохих решений, то вам следует начать поиски другой работы, потому что этот бизнес почти гарантированно обречён. Наконец, это не случается постоянно (вспомните, мы здесь говорим об ин- женерах!), но иногда на работе появляется возможность для служебных рома- нов. По моему мнению, это плохое дело в условиях небольшой компании. Хотя потенциальные последствия ссоры между вами и вашей служебной пассией при приложении некоторых усилий могут быть преодолены, заниматься этим в маленькой компании может оказаться тяжело. Если бы вы работали в большой фирме, вас могли бы перевести в другой отдел или поставить под начало друго- го руководителя. В небольшой компании единственным способом выпутать- ся из такой ситуации может оказаться только увольнение. Можно уговорить подать заявление об увольнении вашу бывшую пассию, но в любом случае вы создадите у руководства неблагоприятное впечатление о себе, поскольку из-за вас придётся заниматься поиском замены недостающего человека. 6.5. Работа в условиях жестко ограниченных ресурсов Вот короткая цитата из книги об американской программе полета человека в космос «Это новый океан: история проекта Mercury»0: Производитель RCS (Reaction Control System — реактивная система управ- ления, являющаяся частью аппаратуры маневрирования космического аппарата на орбите) — компания Bell Aerosystems — с августа по октябрь 0 Это публикация Лойда С. Свенсона-младшего (Loyd S. Swenson Jr.) и других (онлайн- издание датировано 1996 годом, хотя там также присутствует 1989 год, публикация NASA SP-4201). На момент написания книги полный текст можно было прочитать на странице www.hq.nasa.gov/office/pao/History/SP-4201/cover.html.
250 ■ Глава 6, Работа в небольшой компании 1960 года выполняла программу испытаний системы и доложила об удо- влетворительном прохождении всех этапов тестирования. Последующие тесты, проведённые Макдонеллом (MacDonell), STG (Space Task Group - Целевая космическая группа), другими инженерами NASA, предполётны- ми командами на мысе Канаверал и, наконец, работниками Project Orbit, вскрыли в проверяемом устройстве бесчисленные электрохимические и электромеханические проблемы, для устранения которых требовались небольшие изменения то в том, то в другом месте (и в конечном счёте, по- всюду). Камеры сгорания, измерительные диафрагмы, электромагнитные клапаны, вытеснительные ёмкости, предохранительные клапаны — везде были найдены конструктивные изъяны, которые «исправлялись» чаще им- провизациями, чем повторным проектированием с использованием науч- ного подхода. КарлФ. Грейл(Каг1Р. Greil), специалист по термодинамике, работавший в 1960 году в Grand Central Rocket Company над совершен- ствованием технологии разделения с помощью пиропатронов по проекту Mercury, присоединился в 1961 году к STG и её команде, занимавшейся проверкой реактивной системы управления, и тщетно пытался приложить те же самые стандарты совершенствования к этой гораздо более сложной и существенно менее надёжной системе из движущихся частей. Ирония состоит в том, что результаты, которые рассчитывали получить от реактивной системы управления, были получены за счёт изменения экра- нов, тепловых барьеров и диафрагм, сделанных просто по наитию. С дру- гой стороны, огромное количество экспериментов с клапанами привели к уверенности, что ничего в том, что касается конструкции клапанов, ме- нять пока не следует. Это на самом деле смешно, когда всё получилось при использовании простого подхода, тогда как сложный подход привел в итоге лишь к словам: «Да будет так! Аминь!», и, несомненно, заставляет задуматься, поскольку эта история несёт в себе и урок, и риск. Урок в том, что изощрённые доводы, содержащие столько шарма и столько презре- ния к непосвященным, приводят ко всякого рода бедам. Риск же в том, что успех простого средства, решившего однажды проблему без приложения каких-либо усилий, но к ясному пониманию реального действия которого так и не пришли, повторить, вероятно, в других случаях не удастся. Одна- ко, имея перед глазами прецедент, мы испытываем соблазн положиться на это средство, если даже не делаем его догмой. Инженеры в небольших компаниях привыкли работать в условиях дефи- цита почти всего, и главным образом времени. Каждый инженер со сколь- нибудь значительным опытом работы знаком с «дзэн»-состоянием глубокой задумчивой отрешённости, которое сопровождает самые продуктивные мо-
6.5. Работа в условиях жестко ограниченных ресурсов ■ 251 менты. Это дни, когда вы сидите за своим рабочим столом, а программы и схемы волшебным образом появляются сами собой. Это чрезвычайно ценное время, но оно почти бесполезно расходуется, если вас отвлекают. (Чтобы по- читать что-нибудь лёгкое на эту тему, обратитесь к информационному бюл- летеню Джека Гэнсла (Jack Ganssle) Embedded Muse, № 53, за 23 октября 2000 года и особенно к цитируемым им источникам. Вы можете найти этот выпуск на www.ganssle.com/tem/tem53.pdf.) Именно в те моменты, когда вы сможете достичь этой вершины отрешённости, и будут созданы ваши наилучшие про- граммы. Вне этих моментов вы всегда будете в состоянии спешки. Это может привести к невнимательности и (что менее деструктивно) к большому числу решений, которые, как сказано в приведённом отрывке, «когда-то решили проблему, но к ясному пониманию реального действия которых вы так и не пришли». Помните об этом, когда собираетесь выдать «магическое» решение, похожее на данное, и осознанно старайтесь преодолеть искушение. Повтор- ное использование существующих наработок — ключ к повышению произво- дительности, но повторно использовать «магические» решения очень тяжело. Во многих небольших компаниях сотрудники работают в одном открытом всем взорам месте, без отдельных кабинетов. Поэтому вам, возможно, пона- добится метод создания своего собственного жизненного пространства, т. е. понадобится сделать так, чтобы за работой вас ничто не отвлекало. Во вре- мена рабочих кризисов, когда мне приходилось работать в подобных услови- ях, я приобрел хороший набор шумоизолирующих наушников и использовал их, чтобы слушать CD-диски с музыкой, способствующей релаксации. Моё внимание отвлекает прослушивание почти любой иной музыки, если я пыта- юсь глубоко сконцентрироваться. Вы, возможно, смотрите на это по-другому. Смысл в том, чтобы как можно сильнее дистанцироваться от всей происходя- щей вокруг вас суеты, заменить её чем-нибудь ненавязчивым, чтобы вы могли сфокусироваться на имеющейся задаче. Технологии, подобные этой, увеличат количество сделанного вами за вре- мя, оставшееся до назначенной даты передачи программного или аппарат- ного проекта заказчику, но всё же не приведут к действительному увеличе- нию человеко-часов, чтобы помочь вам выполнить работу. Вы можете заси- живаться на работе до позднего вечера или сидеть там все ночи напролёт, но я бы не советовал этого делать. Работая подобным образом, вы подвергаете свой организм гигантскому стрессу, и такие действия приведут к тому, что все остальные в компании буду считать, что вы именно тот парень, который при необходимости всегда останется на месте и будет работать ночами. Не стоит
252 ■ Глава 6. Работа в небольшой компании делать этого, даже если вам будут платить за переработку (а я уверен, что не будут). Если есть очень веский, кратковременный повод для работы допоздна, тогда, пожалуйста, оставайтесь и работайте (хотя я бы предложил вам предва- рительно сказать руководству, что вы бы хотели получить за переработанные часы один или два дополнительных выходных дня, когда кризис закончится). Очень веские поводы включаютпроизводственные проблемы, которые гото- вы потопить компанию, или конструктивные проблемы, которые ставят под вопрос безопасность эксплуатации уже поставленных устройств. Никакие менее значимые причины в этот список включать не стоит. Просто желание успеть к обещанному занимающимся сбытом сотрудником сроку поставки прибора не относится к числу достаточно важных причин, если только ожи- дающий поставки клиент не собирается аннулировать свой заказ, а убытки от потери заказа достаточно велики, чтобы серьёзно повлиять на жизнеспособ- ность компании. Изнеможение от переработок — весьма реальная проблема, не позволяйте ей вас настигнуть. Из-за постоянной нехватки времени, усиленной тем, что большинство со- трудников компании не занимаются инженерной работой и не понимают, что такое правильный процесс проектирования, в большинстве маленьких фирм мучительно трудно следовать жёсткому регламенту создания новых устройств. В результате этого, как мной указывалось ранее, легко докатиться до программ и схем, которые «просто работают», но не являются хорошо проработанными и понятыми. О последствиях этого говорит цитата, с которой я начал данный раздел. Если вы можете добиться ведения документированного, совместимого со стандартами процесса проектирования, то честь вам и хвала. Но вам всё же следует планировать вероятность «короткого замыкания» в цикле проектиро- вания. Часто случается так, что у вас нет времени даже сделать макет схемы перед изготовлением её на производстве. Возможно, в таком случае вам при- дётся на первые прогоны макетных плат ставить техника, который будет ме- тодом проб и ошибок подбирать номиналы резисторов и конденсаторов, тогда как вы сами будете лихорадочно работать над кодом или другими аспектами аппаратной части. Такая мера, конечно, нисколько не увеличит скорость, а скорее создаст суету, но объяснить всё это руководству очень тяжело. Работа в условиях ограниченных финансовых ресурсов также сильно вли- яет на то, какие решения инженеры закладывают в проект (в своей первой книге я вдавался в некоторые подробности на эту тему, возможно, вам было бы полезно её прочитать). Вот первый пришедший в голову пример. Вы, ве- роятно, будете предпочитать делать проекты на чипах в корпусах, пригодных
6.5. Работа в условиях жестко ограниченных ресурсов ■ 253 для ручной пайки, чтобы собирать макет самостоятельно. Однако это закры- вает дверь, ведущую к целому ряду микросхем, которые поставляются только в корпусах BGA и подобных им. Ограниченность в ресурсах также заставляет блюсти экономию при при- обретении инструментальных средств (как программных, так и аппаратных). Например, в течение уже нескольких лет среди программ САПР (CAD — Computer-Aided Design, программ компьютерного проектирования) я отдаю предпочтение пакету EAGLE компании Cadsoft (www.cadsoftusa.com). Это, не- сомненно, лучший сегодня по соотношению цена—качество пакет автомати- зированного проектирования печатных плат. И это превосходный выбор для небольших компаний и частных предпринимателей, которые не хотят поку- пать ПО стоимостью в десятки тысяч долларов. Впрочем, файлы EAGLE не переносятся непосредственно в САПР, которые используются большинством контрактных и конструкторско-производственных фирм0 в странах Азии (СМ — Contract Manufacturer и 0DM — Original Design Manufacturer, соот- ветственно). Это приводит к возможности появления ошибок при переводе в другие форматы, когда вы отправляете схемы заморским изготовителям, а также увеличивает время подготовки производства. Заметьте, что, чем сложнее становится ваша целевая система, тем, при усло- вии, что вы не нанимаете дополнительный инженерный персонал, менее вы- полнимой становится задача изготовления всех входящих в неё компонентов собственными силами компании. При разработке действительно сложного высокоскоростного устройства, приближающегося по сложности к настоль- ному ПК, вы будете принуждены к фактической покупке ПК в качестве ядра проекта, так как у фирмы просто не будет достаточного количества ресурсов для разработки собственного решения. В менее сложных случаях вы будете останавливаться на различных промежуточных компромиссных решениях. Общее правило таково: чем сложнее ваша система, тем во всё большей сте- пени она состоит из подсистем, являющихся «чёрными ящиками», которые были приобретены у сторонних поставщиков. В таком процессе «эволюции» й вашей системе неизбежно появление шероховатостей, поскольку интерфейсы между всеми этими компонентами не совпадают друг с другом в полной мере. Более того, ваши возможности менять поведение компонентов на низком 0 Контрактное производство (СМ — Contract Manufacturer) берёт ваши схемы и другие технические данные и изготавливает для вас продукт. Конструкторско-производственная фирма проектирует изделие по вашим спецификациям и ставит на него вашу торговую марку.
254 ■ Глава 6. Работа в небольшой компании уровне оказываются значительно ограниченными. Если вы приобрели чипсет беспроводной связи 802.1 lg и интефировали его в свою собственную плату, то можете заставить его делать всё, что ему позволяют делать его электрические характеристики. Но если вы купили модуль и просто подключили его к суще- ствующей плате, то офаничены только теми функциями, которые предлагает встроенное ПО производителя данного модуля. И наконец, по поводу офаниченных финансов. Вам следует понимать, что большинство поставщиков электронных компонентов не обращают особого внимания на небольшие компании (что вполне понятно)0. Они с удовольствием нанесут вам визит, если вы позвоните и скажете, что хотите закупить их продукцию, но в любом случае вам не следует ожидать от них большой помощи, если только для этого нет каких-то особых обстоятельств. В качестве примера скажу следующее. Если вам настолько повезло, что вы задали вопрос о какой-то новой микросхеме, которая пока не получила ши- рокого применения в практике проектирования, вы можете получить допол- нительную специальную техническую поддержку от производителя чипа. При этом его интерес состоит в показе вашего устройства на выставках как демонстрации использования микросхемы в конструкции реального, про- даваемого прибора. В обычной ситуации «звёзды» не будут оказывать вам помощь, поэтому придётся, по большому счёту, полагаться на помощь рав- ных себе. Ваш друг здесь — Usenet. Но помните, что это разделяемый ресурс. Если вы используете его, чтобы задать вопросы, относящиеся к вашим про- ектам, то, пожалуйста, не забывайте «отдавать долги» сообществу, затрачи- вая своё время на чтение вопросов, задаваемых другими людьми, и написа- ние ответов на них. 6.6. Распределение задач: типичная неделя Возможно, вам покажется полезным взглянуть на данное репрезентатив- ное распределение задач на неделю, выполненное одним инженером, рабо- тающим в небольшой компании. Оно предполагает 40-часовую рабочую не- 1} Из этого правила есть исключения. Работая в маленьких компаниях, я получал пре- восходную техническую поддержку от трех фирм-производителей: Sharp, Cirrus Logic и Microchip. Получаемая вами поддержка будет зависеть от региона, в котором вы находи- тесь, и от того, насколько ваша деятельность соответствует задачам, на решение которых направлены выпускаемые производителем компоненты.
6.6. Распределение задач: типичная неделя ■ 255 делю. В «кризисные времена», с требующими модификации устройства заказ- чиками, штампующими 90% брака производствами или иными инженерны- ми напастями, вы, возможно, увидите, как число этих часов удваивается. Вам также, возможно, придётся выходить на работу и в выходные дни. Разумеется, это расписание не представляет собой универсального свода, применимого для всех инженеров маленьких фирм, но оно даёт представление о том, какую часть времени в процентном отношении вы, вероятно, будете тратить на те или иные задачи. • Понедельник 1 час — ответы на письма с производств на Дальнем Востоке, при- шедшие на электронную почту. 2 часа — оказание технической поддержки конечным пользователям (телефон, электронная почта). 4 часа — совместная разработка схем и ПО. 1 час — разное (беседы с поставщиками, коллегами и т. д.). Эти за- дачи обычно занимают больше времени по понедельникам и пятницам, чем в другие дни недели. • Вторник 1 час — оказание технической поддержки конечным пользователям. 2 часа — встреча с заказчиками. 4.5 часа — совместная разработка схем и ПО. 0.5 часа — разное. • Среда 1 час — оказание технической поддержки конечным пользователям. 2 часа — встреча с поставщиком. 1 час — работа над черновым вариантом документации для конечных пользователей. 3.5 часа — совместная разработка схем и ПО. 0.5 часа— разное. • Четверг 1 час — работа с вопросами производства на Дальнем Востоке. 1 час — оперативная встреча с руководством. 5.5 часа — совместная разработка схем и ПО. 0.5 часа— разное.
256 ■ Глава 6. Работа в небольшой компании Пятница 1 час — оказание технической поддержки конечным пользователям. 2 часа — проверка разводки печатных плат. 4 часа — совместная разработка схем и ПО. 1 час — разное.
7 ГЛАВА РАБОТА В КРУПНОЙ КОМПАНИИ В большинстве крупных компаний установлены правила, требующие, чтобы всякий, занимающий в руководстве пост определённого уровня, пре- доставлял заданное минимальное число детальных отчётов о работе подчи- нённых ему структур. Поразмыслив над этим, я понял, что данное требова- ние установлено потому, что можно провести потрясающе точную аналогию между задачей управления техническими работами и задачей распределения тепловых потоков в космическом аппарате. Затенённая сторона стационар- ного космического аппарата будет подвержена воздействию очень низких температур, тогда как сторона, обращенная к Солнцу, будет сильно нагревать- ся. Космический аппарат, полностью находящийся в тени других объектов, должен иметь свой собственный источник тепла для возмещения тепловых потерь на излучение. При установке и проверке всего чувствительного к тем- пературе оборудования следует тщательно продумать вопрос о генерируемом им тепле. Космический аппарат закрывают фольгой, краской и покрытиями, разработанными для отсечения солнечной радиации. Сложные конструкции из ребристых поверхностей, теплоотводящих радиаторов, а иногда и из цирку- лирующих по трубам жидких хладагентов нужны для переноса генерируемого внутри аппарата и принесённого солнечным излучением тепла на затенённую сторону с последующим его сбросом. Замените концепцию «солнечное тепло» на «неблагоприятное внимание со стороны высшего руководства», и аналогия станет прозрачной. Успешный руководитель всё время потихоньку крутится, словно командно-служебный модуль Apollo в режиме прилунения, чтобы ни одна его поверхность не прини- мала 100% приходящего излучения. Мощность внимания спадает экспонен- циально, когда начальник отодвигается подальше от высшего руководства.
258 ■ Глава 7. Работа в крупной компании Детальные отчеты — теплоотводящие радиаторы руководителя. Их при- крепляют к главе команды и увеличивают тем самым площадь поверхности, отводящей от команды внимание. При некоторых обстоятельствах они также формируют основу сублимационной системы охлаждения. Хладагент погло- щает максимально возможное количество тепла, а затем, вскипев, испаряется в космическое пространство. Вам следует любой ценой избегать вероятности стать одной из частиц этого сублимированного хладагента. Поскольку идущее сверху внимание прямо пропорционально должности, которую руководитель занимает в компании, площадь радиатора, требуемого для рассеяния вышестоящего гнева, естественно, также должна становиться тем больше, чем выше поднимается руководитель по карьерной лестнице. По- литика компании, касающаяся числа детальных отчётов, закреплённых за ру- ководителем, занимающим определённую должность, отражает то количество внимания, которое требуется рассеять, находясь на этой должности. 7.1. Анализируйте свои цели: преимущества и недостатки большой компании Примерно половина всех американцев работает в крупных компаниях0, и приблизительно треть всех новых рабочих мест создаются этими большими фирмами. Работа в крупной корпорации — традиционный карьерный путь, по которому годами следуют инженеры, и маловероятно, чтобы он исчез в сколько-нибудь обозримом будущем. Разработка сложных электронных систем может быть очень недешёвым де- лом, требующим дорогого инструментария и значительных инвестиций в соз- дание макетов и проведение испытаний на соответствие установленным за- коном требований. Более того, в нынешних условиях большинство продуктов создаётся добавлением новой функциональности существующим платформам и протоколам, что означает (к сожалению), что они построены на патентах других людей. Поэтому барьеры, препятствующие выходу на какие-либо рын- ки, чрезвычайно высоки. Только крупные компании обладают финансовым влиянием, позволяющим проникнуть на некоторые из этих рынков. По этой 1} Это определённо неверно. Под крупной компанией в этой статистике понимается любая компания, которая не подпадает под правила Управления по делам мелких фирм (Small Business Administration).
7.1. Анализируйте свои цели: преимущества и недостатки большой компании ■ 259 причине, если вы хотите работать над действительно крупными проектами — аналогами программы Apollo XXI века, например, или устройствами, предна- значенными для массового потребителя, то вам абсолютно точно надо идти в большую компанию. Крупные компании предлагают финансовую стабильность (пока вы рабо- таете в отделе, который приносит хорошую прибыль, и пока исполняете свою работу в степени, достаточной для того, чтобы ваш руководитель был счастлив). У вас также будет доступ к хорошо оснащённым лабораториям, вас обеспечат самым лучшим оборудованием, пока вы сможете убеждать своего начальника, что приобретение такового абсолютно необходимо для дела. Наконец, самые главные выгоды (хотя и не обязательно в виде основной заработной платы и, определённо, не в виде выплачиваемых наличными премий), которые вообще можно найти в крупных компаниях: программы 401(к), выплаты за патен- тоспособные открытия, дополнительное медицинское страхование и оплата услуг стоматолога, компенсация затрат на образование, совместные с другими компаниями взаимные системы скидок сотрудникам, гарантированное время отпуска и т. д. Главный недостаток, обычно присущий работе в крупной компании, — это потеря индивидуальной креативности и свободы. По соображениям эффек- тивности, работникам приходится специализироваться в чем-то одном. У них нет нужды разбираться во всех деталях конструируемого устройства, кроме как в те моменты, когда они слушают отчёты входящих в команду коллег о тех или иных аспектах проекта. В большинстве крупных компаний также приняты обременительные про- цедуры проектирования, разработанные так, чтобы они отвечали теоретиче- скому общему случаю. Часто в этих процедурах имеются всякие встроенные требования, которые в той или иной степени соответствуют идее разработ- ки качественного продукта и его быстрого выпуска. Время, затрачиваемое на проектирование даже простых изделий, вроде игрушек, в больших компаниях велико (два года и более) по сравнению с типичным для небольших фирм ци- клом разработки в 6...9 месяцев. Всё это может быть очень утомительно для творческого человека. Поскольку в большинстве крупных компаний имеются значительные фи- нансовые резервы, существует также разграничение между «моими» деньгами и деньгами «компании». Поэтому работники часто вообще перестают обра- щать внимание на стоимость разработки. Во многих случаях инженеры уровня
260 ■ Глава 7. Работа в крупной компании «одного из участников проекта» даже не обладают достаточной информаци- ей, чтобы оценить стоимость разработки. Они бы изумились, если бы увиде- ли цифры. Время, в частности, становится легко растрачиваемой эфемерной сущностью. Связь между привлекательностью продукта для конечного поль- зователя и зарплатой инженера также малопонятна. В результате в созданных продуктах слишком часто пренебрегают человеческим фактором. Временами внутренняя политика компании может просто изуродовать хороший во всех отношениях продукт. Например, этому способствует желание выпустить пред- назначенную для домашнего использования версию устройства, которая бы не конкурировала со своими более дорогими версиями, предназначенными для коммерческого или промышленного применения. Решение работать в крупной корпорации для многих людей является ком- промиссом между финансовой определённостью0 и свободой. Что ближе вам — дело индивидуального предпочтения? Вы просто должны ясно пони- мать: маловероятно, что вам удастся найти в крупной компании такую долж- ность, которая будет предполагать ту же самую широкую гамму задач и воз- можностей для личных достижений, которые можно встретить в небольших компаниях. 7.2. Как устроиться на работу В большой компании приём нового работника на инженерную долж- ность — это довольно дорогостоящий и замысловатый процесс. Простой по- иск подходящего кандидата, выплата гонораров агентам по подбору персона- ла, потенциальная оплата расходов на перемену найденным человеком места жительства и другие «установочные» расходы (плюс, потенциально, выплата поощрения при подписании будущим работником трудового договора) лег- ко могут довести стоимость процесса заполнения инженерной вакансии до 15 000 долл. и даже до большей суммы. И это даже для вакансий не самого высшего звена: крупные компании платят такие суммы за приём нужного че- ловека на должность среднего уровня. Частично из-за такой сложности, частично из-за неизбывной любви больших компаний к формальным процедурам получение инженерной ра- 0 Это, конечно, иллюзия. Каждый день мы читаем об увольнениях и закрытиях, от ко- торых страдают работники больших компаний.
7.2. Как устроиться на работу ■ 261 боты в крупной фирме является весьма структурированным процессом, раз- делённым на этапы. Первый этап — просто попасть в кадровую систему ва- шей целевой компании. Это чрезвычайно просто: почти у каждой крупной фирмы есть собственный сайт с легко находимым разделом «Карьера», по- средством которого вы можете предоставить своё резюме на рассмотрение. Это стоит сделать, даже если вы планируете попасть в компанию, используя какой-нибудь альтернативный путь, потому что в процессе трудоустройства от вас, вероятно, всё равно потребуют ввести своё резюме стандартным обра- зом. Как только ваше резюме окажется в системе, вы сможете пользоваться имеющимися на сайте работодателя инструментами, связанными с подачей заявления о приёме на работу (и на вашу электронную почту, вероятно, так- же начнут приходить автоматически сгенерированные письма с имеющими- ся вакансиями, в которых есть совпадения с ключевыми словами из вашего резюме). Второй этап — добиться, чтобы кто-нибудь прочитал ваше резюме. Это действительно сложно, если резюме предварительно фильтруется каким- нибудь «интеллектуальным» ПО. У вас действительно немного шансов, если вы вошли в кадровую систему стандартным путем, но ваше резюме не соот- ветствует требуемым квалификационным параметрам слово в слово. В раз- деле 2.2 я говорил, что проще всего устроиться на работу, если у вас есть агент по подбору кадров, работающий на вас внутри фирмы. Этот совет, в общем, верен и для трудоустройства в крупную компанию, вне зависимости от ва- ших квалификационных данных. Как результат, я настоятельно рекомендую, чтобы основные усилия по поиску работы вы переложили на агентства по трудоустройству. В действительности, конечно, нисколько не повредит, если вы будете подавать заявления о приёме на работу по сети, но не слишком расстраивайтесь, если такой способ не приведёт к немедленному получению работы вашей мечты. Я снова повторю: крупные агентства в действительности являются не столь- ко агентствами по трудоустройству, сколько информационными центрами об имеющихся резюме и вакансиях. Они сравнивают бумаги, а затем высылают уведомления о кажущемся совпадении написанного там сторонам, подавшим эти бумаги. Гораздо предпочтительнее работать с живым человеком, который лично знает сотрудника нанимающей стороны (и было бы желательно, если бы он разбирался в интересующей вас отрасли промышленности). Вы могли бы также попасть на интервью к работодателю, используя имеющиеся связи. Например, если вы проходили в компании стажировку, то можете позвонить
262 ■ Глава 7. Работа в крупной компании в отдел кадров и сказать, что подали заявление о приёме на какую-то опреде- лённую должность. Этого может оказаться достаточно, чтобы ваше резюме переместили в папку, где содержатся резюме претендентов на эту должность, отобранных для приглашения на собеседование. Третий этап: получив приглашение на интервью, тщательно подготовьтесь! Многие крупные компании практикуют различные виды тестирования, пре- жде чем решить, что вы обладаете всем, требующимся для данной должности. Вопросы в этих тестах могут варьироваться от сложных до вызывающих раз- дражение. О вопросах, задаваемых на собеседованиях в компании Microsoft, уже ходят легенды (наберите в поисковой системе Google строку «вопросы на собеседовании в Microsoft», и вы обнаружите множество персональных сайтов, где приведены списки вопросов, которые задавались людям во время их интервью в этой фирме). Обычно всё же вам будут задавать специфиче- ские технические вопросы по каким-нибудь аспектам, относящимся к сфере деятельности компании. Например, когда я проходил телефонное собеседо- вание, проводившееся базирующейся на Западном побережье компанией- разработчиком игровых приставок, меня попросили описать, как бы я устра- нил проблему с кодом встраиваемой файловой системы. Во время собеседо- вания на должность в компании, в которой я в настоящий момент работаю, сотрудник, проводивший интервью, дал мне пять минут на изучение умеренно сложной схемы устройства, содержащего два микроконтроллера и различные коммуникационные подсхемы. Затем он попросил меня описать, насколько возможно, функционирование данного устройства. Потом он дал мне фраг- мент исходной программы того же самого устройства и повторил того же рода процедуру. Такие тесты являются вполне нормальными методиками оценки пре- тендента, которые не должны вызывать у вас чрезмерного волнения. Иметь дело с причудливыми и эксцентричными вопросами, однако, может ока- заться действительно нелегко. Я не уверен, что мне бы хотелось работать в компании, которая принимает решения о приёме на работу на базе таких «творческих» вопросов. Это прихоть руководства, и нехорошая прихоть. Однако вы должны быть готовы к подобным вопросам. Если вы идёте на собеседование в известную крупную корпорацию, то вам следует восполь- зоваться поиском, например, в Google и посмотреть, не рассказывают ли другие люди о странном или пугающем способе проведения интервью, при- нятом в этой компании.
7.2. Как устроиться на работу ■ 263 Я советую вам отправляться на собеседование с мыслью о том, каковы были бы ваши долгосрочные планы в случае, если бы вас приняли на работу в дан- ную компанию. Другими словами, если вам удастся вызвать воодушевление у руководства, вы должны быть способны ясно сказать, хотите ли вы провести свою оставшуюся жизнь, занимая должность инженера по работе с клиента- ми, или вам бы хотелось работать в подразделениях компании, занимающихся перспективными исследованиями и разработками. Если предположить, что вы понравились руководству, то четвёртым эта- пом будет получение письма с предложением о занятии вакантной должности. Физически это будет лист бумаги, в котором написан размер вашего жало- ванья и ожидаемая дата выхода на работу. В действительности вы можете и не получить этого письма до того самого дня, пока не начнёте работать. Как только вы примете предложение о трудоустройстве, в большинстве крупных американских корпораций от вас будут требовать прохождения теста на нар- козависимость, что является условием приёма на постоянную работу. В неко- торых компаниях требуют, чтобы вы проходили эти тесты периодически через случайные интервалы времени, в других прохождения тестирования требуют, только если вы были вовлечены в какой-либо произошедший на работе ин- цидент. Многие люди воспринимают это как неоправданное вторжение в их личную жизнь. Хотя я в основном согласен с такой точкой зрения, лично меня в тестировании на наркозависимость главным образом беспокоит то, что не- которые из используемых при этом методов могут дать неверные положитель- ные результаты0. В основном применяют два метода — анализ мочи и анализ волос. При использовании первого метода анализ может быть проведён не- сколькими различными способами. Предполагают, что он довольно уязвим и может показывать неверные положительные результаты в случае приёма некоторых назначенных или продаваемых без рецепта медикаментов. Метод анализа по образцам волос считается более надёжным (и, в виде бонуса ваше- му работодателю, может рассказать о более длительном периоде времени из вашего недавнего прошлого). Если у вас есть выбор, который некоторые ра- ботодатели всё же предлагают, я бы предложил вам воспользоваться методом анализа образцов волос. Естественно, я полагаю, что вам нечего скрывать. Если же есть, то думайте сами. 1) Я воспринимал бы всё совсем по-другому, если бы тестирование требовало взятие крови на анализ. По крайней мере, в настоящее время применяются разумные неинвазив- ные методы.
264 ■ Глава 7. Работа в крупной компании 7.3. Глобализация:аутсорсинг и временные рабочие визы Этот раздел предназначен главным образом для читателей в Соединённых Штатах Америки, но он также имеет отношение к европейским, австралий- ским и другим инженерам из стран «первого мира». Во всех развитых странах в профессиональных сообществах нарастает страх, что их работа, которая ра- нее считалась привязанной к одному месту, может быть передана инженерам, живущим в странах с меньшей стоимостью жизни, которые поэтому работа- ют за гораздо меньшее вознаграждение. Проявляется не столь желчная, но тем не менее ощутимая враждебность по отношению к компаниям, которые нанимают квалифицированных иностранцев, используя временные рабочие визы наподобие выдаваемых по действующей в Соединённых Штатах про- грамме Н-1В, Главная причина, по которой я включил данный раздел в читаемую вами книгу, состоит в том, что я слышу огромное число пессимистических выска- зываний на эту тему от озлобленных инженеров0. А именно, когда молодые специалисты задают вопрос о своих перспективах на публичных форумах, они часто натыкаются на злобную проповедь о том, что инженерная профессия — это тупик и сегодняшнему студенту лучше уйти в адвокаты, врачи или медсе- стры, так как эти рабочие места не так-то просто перевести за границу. Кстати, это уже не совсем верно, по крайней мере для юристов. Для защиты интеллек- туальной собственности и написания патентов, например, часто привлекают- ся иностранные юридические компании. Заметьте также, что я пишу этот раздел, находясь в забавном положении, поскольку работаю в компании, которая сделала значительные вложения в Индии и других популярных оффшорных зонах. Поэтому моя работа более или менее постоянно находится под угрозой переезда в одно из этих мест. Так- же я сам изначально приехал в США как квалифицированный специалист, получивший визу по программе Н-1В. И хотя я больше не являюсь одним из них, я определённо получил весьма познавательный опыт в области иммигра- ционного законодательства США. 0 Я также слышу огромное количество самоуверенной чепухи от занимающихся стати- стикой типов о том, как аутсорсинг позволяет действительно квалифицированным мест- ным работникам трудиться над важными перспективными проектами. Никто из тех, кто пропагандирует эту идею, не верит в неё всерьез.
7.3. Глобализация: аутсорсинг и временные рабочие визы ■ 265 Существует две конкурирующих точки зрения на конечный результат этой оффшорной тенденции. Из-за нехватки официальной терминологии для их описания я буду называть одну теорию мальтузианской1*, а другую — утопиче- ской. В действительности каждая из этих теорий представляет непрерывный спектр верований, на одном конце которого находятся крайние мальтузиан- цы, на другом — крайние утописты, а посередине — целая гамма разнообраз- ных мнений. Мальтузианцы предсказывают мрачное развитие событий по нисходящей спирали. Заокеанские инженеры дешевле американских или европейских ра- ботников, поэтому корпорации будут переносить всю свою конструкторскую работу в оффшорные зоны. Даже те корпорации, которые хотят «поступать правильно» и давать работу местным талантам, простой ценовой конкурен- цией будут вынуждены прекратить заниматься конструкторской работой дома или уйдут из бизнеса. В пределе в развитых странах для инженеров- разработчиков работы не останется, за исключением крошечной пригоршни мест, где занимаются работой над военными проектами, важными для нацио- нальной безопасности. Короче говоря, инженерные рабочие места повторят путь многих промышленных рабочих мест. В Америке не останется опытных преподавателей инженерных дисциплин, и мы в сфере обеспечения собствен- ных технических потребностей станем полностью зависеть от иностранных держав. Другой распространённый сюжет мальтузианской мысли заключается в том, что персональное благосостояние подобно качелям. Инженеры в дру- гих странах становятся богаче, инженеры в Америке — беднее, и постепенно будет достигнуто равновесие. Итог этого сюжета таков, что число желающих изучать технические дисциплины резко упадёт, потому что люди будут видеть, что выбор такой карьеры не сулит доходов. В свою очередь это ведёт к не- хватке преподавателей и опять же к постепенному исчезновению инженерных профессий в развитых странах. Более экстремальный вывод той же сюжетной линии предсказывает, что экономика Америки и её торговых партнёров будет вести себя подобно сообщающимся сосудам и в результате придёт к некое- 1} По имени Томаса Мальтуса (Thomas Malthus, 1766—1834), предсказавшего страшный глобальный голод из-за переизбытка численности людей и неспособности линейно расту- щего объёма жизненных ресурсов (в частности, еды) поспевать за экспоненциальным ро- стом населения. Его заключительная рекомендация заключалась в том, что размер семьи в низших классах общества следует регулировать, чтобы эти люди не производили на свет детей больше, чем они могут прокормить. Китайская политика «одна семья — один ребе- нок» — современный пример мальтузианского планирования.
266 ■ Глава 7. Работа в крупной компании му общему уровню. Все в Америке станут беднее, тогда как в Китае, Индии и других странах люди разбогатеют. Некоторые особо убеждённые социалисты относятся к такому сценарию как к неизбежному и фактически желаемому итогу. Утопическая теория туманнее, и у неё есть несколько вариантов. Одна по- пулярная версия просто говорит, что умы американцев выдумают «следующую великую штуку», и неважно, что эта штука будет собой представлять. И инже- неры прекратят заниматься тем, чем они занимаются сегодня, начав работать на мириадах рабочих мест, созданных «следующей великой штукой», тогда как иностранные специалисты будут тщетно пытаться дотянуться до этой но- вой технологии. Другая наиболее популярная утопическая теория мечтает, что постепенно работодатели обнаружат, что рабочая сила в оффшорных зонах не столь дешева, как кажется, и поднимется огромная волна, которая вернет до- мой выведенные в эти зоны рабочие места. Эти люди хватаются за все сообще- ния о неудачах оффшорных предприятий, считая их первыми предвестниками предполагаемого девятого вала. Теперь, когда всё сказано, замечу, что и сам Мальтус, как показывает опыт, ошибался (он не смог предвидеть влияние технологий на производство про- дуктов питания и тот факт, что рост населения замедляется, когда люди ста- новятся богаче и образованнее). Поэтому реальные результаты от процессов ухода в оффшорные зоны, заключения соглашений о свободной торговле и выдачи временных рабочих виз не будут прямо соответствовать результатам какого-либо из сценариев, предложенных описанными выше теориями. Один из изъянов мальтузианской точки зрения заключается в том, что просто невозможно поддерживать в стране инженерное сообщество миро- вого уровня, если само это сообщество состоит из тысячи (или около того) «яйцеголовых», разбросанных по всему континенту, и которые работают над секретными военными проектами. Вашим военным гениям положено быть лучшей частью урожая. Но если только они и составляют весь урожай, тогда у вас довольно крупная проблема, поскольку вы, по сути, говорите образо- вательным учреждениям: «Выдавайте нам тысячу гарантированных гениев в год с уровнем брака на выходе ноль процентов». Помимо всего прочего, кто будет учить этих протогениев и как гарантировать сбалансированность спроса и предложения? Поддержка программ вроде этой потребовала бы невероят- но жёсткого контроля и хорошей организации со стороны государственных ведомств, которые в настоящий момент не способны гарантировать даже то, что случайно выбранные дееспособные взрослые люди достаточно грамотны,
7.3. Глобализация: аутсорсинг и временные рабочие визы ■ 267 чтобы прочитать инструкцию к полуфабрикату, готовящемуся в микроволно- вой печи0. Что касается вопроса о том, что международные границы не будут препят- ствием для уравновешивания зарплат, то в декабре 2004 года Институт инже- неров по электротехнике и электронике США (IEEE — Institute of Electrical and Electronics Engineers) опубликовал пугающее коммюнике2) под названием «Опрос, проведенный IEEE-USA, свидетельствует о снижении доходов тех- нических специалистов». В данной статье представлены материалы, порож- дённые лобби, борющимся против засилья специалистов-иностранцев (про- стите за довольно грубую фразу, я написал её, чтобы подчеркнуть имеющуюся в статье неприязнь как к процессу вывода рабочих мест в оффшорные зоны, так и к политике выдачи временных рабочих виз). Проблема с подобной статистикой состоит в том, что числа обрабатывают так, что они допускают массу возможных объяснений. Возьмем для примера то, что сразу приходит на ум: • В действительности суммарный доход не уменьшился. Просто было про- ведено ограничение «первичных источников», которые определили как «базовая зарплата плюс доход от самостоятельной деятельности, комис- сионные или премии». Здесь имеется значительная неопределённость. Возможно, инженеры больше времени проводят дома, не занимаясь со- вместительством. Или произошло взрывное увеличение числа устройств на постоянную работу, и те люди, которые получали свой доход, занима- ясь частной предпринимательской деятельностью, сейчас получили по- стоянные рабочие места. Доход при переходе на постоянную должность снижается, потому что в этом случае на плечи работодателя переклады- ваются такие льготы, как медицинская страховка и взносы по программе 401 (к). Также это связано с тем, что налог на социальное обеспечение, который платит работающий на постоянной основе работник, состав- ляет половину того, что платит человек, занимающийся частной пред- принимательской деятельностью (вторую половину вносит ваш работо- датель, смотрите главу 5). 0 Часто цитируемая статистика из доклада 1993 года Департамента образования США «Грамотность взрослого населения в Америке»: в Соединённых Штатах 40 миллионов взрослых функционально безграмотны (т. е. не умеют читать на уровне третьего класса). Среди прочего это означает, что они не способны прочитать инструкцию на пузырьке с лекарством или на упаковке полуфабриката для микроволновой печи. 2) Полный текст можно найти в сети, пройдя по ссылке www.ieeeusa.org/communications/ releases/2004/ 122204pr.asp.
268 ■ Глава 7. Работа в крупной компании • Не было дано информации, говорящей о зависимости между доходом и опытом работы. Это выглядит весьма правдоподобно, когда для сравне- ния даются только усреднённые цифры. Но фактически мы сейчас ви- дим огромный поток новых специалистов, выходящих на рынок труда. Новички, естественно, будут получать более низкие стартовые зарпла- ты, чем их опытные коллеги, тем самым снижая выводимый статистикой средний доход. И абсолютно не очевидна причина, по которой это явля- ется роковым предзнаменованием. • Определение технических специалистов, даваемое IEEE-USA в этой статье, включает «среди прочих инженеров-электротехников и элек- тронщиков, инженеров по аппаратному и програмному обеспечению компьютеров, специалистов в области компьютерных наук и системного анализа». Это очень широкое определение. Также перенос рабочих мест в оффшорные зоны не обязательно приводит к немедленной и долгосрочной экономии, как это расписывается. Необработан- ная, характерная информация, которую мне предоставляют, показывает, что в конце 90-х годов стоимость найма инженеров в Индии составляла десятую часть стоимости «эквивалентных» талантов в Соединённых Штатах. Однако в начале 2005 года это соотношение выросло примерно до одной трети0. Воз- можно, частично это происходит из-за снижения заработков в Соединённых Штатах (хотя, говоря искренне, я не уверен, что такое снижение имеет место). Но по большей части причиной этого является то, что наиболее талантливые специалисты в Индии пользуются спросом, и они весьма мобильны. И эти инженеры меняют рабочие места, пытаясь получить более высокие зарплаты, точно так же, как это делают их коллеги в Соединённых Штатах. Фактически Индия сейчас пытается вести более жесткую конкурентную борьбу, чтобы из- бежать ухода рабочих мест в центры с пока ещё более дешёвой квалифициро- ванной рабочей силой, такие, как Китай. А что насчёт временных рабочих виз для квалифицированных специали- стов? Существуют многочисленные группы лоббистов, провозглашающие в Интернете программу Н-1В2) смертным приговором американской инженер- ной науке (хороший пример на www.zazona.com). Опять же определить, что приносят такие программы среднему местному работнику, нелегко. 0 Очень сложно получить достоверные цифры, остается только давать грубые оцен- ки. Компании, занимающиеся подбором инженерного персонала за рубежом, не снижают свои гонорары в таком соответствии, чтобы можно было легко сделать сравнение. 2) Это тип визы, которая позволяет «высококвалифицированным» иностранцам рабо- тать в Соединённых Штатах.
7.3. Глобализация: аутсорсинг и временные рабочие визы ■ 269 Прежде чем мы двинемся дальше, вот примерная схема процесса выдачи визы Н-1В°. Пожалуйста, обратите внимание, что этот материал никоим об- разом не следует рассматривать как руководство по вопросам иммиграции. Я максимально подробно описываю данный процесс, чтобы вам стало понят- но, как он примерно работает. Нет необходимости говорить, что на таком пути на каждом шагу встречаются трудные для понимания юридические и бюро- кратические сложности: • Работодатель, используя какой-то ведомый ему критерий, решает, что весьма важно нанять на вакантное место некоего иностранца. • Работодатель дает в местной прессе объявление, предлагая американ- цам, имеющим квалификацию того же уровня, устроиться на данное ва- кантное место. • Если такой человек не появляется, то работодатель может подать заяв- ление об условиях труда (LCA — Labor Condition Application) в качестве первого шага к поручительству за иностранного работника. Частью про- цесса подачи заявления является необходимость доказать Министерству труда (Department of Labor), что специалисту будут платить, по крайней мере, 95% от существующей ставки для работников этого типа в той местности, где он будет работать. • После одобрения LCA компания подает ходатайство о спонсировании временного иностранного работника. • После удовлетворения ходатайства работник может подать заявление на получение визы. • В процессе подачи заявления на получение визы податель должен до- казать, что он обладает дипломом бакалавра или имеет эквивалентный опыт работы. Существуют сторонние фирмы, которые оценивают предо- ставленные документы на соответствие правилам службы гражданства и иммиграции США (USCIS — United States Citizenship and Immigration Service)2*. Заметьте, что простое отсутствие диплома бакалавра не приво- 0 Очень хорошую справку о процессе выдачи визы Н-1В вместе с обсуждением того, как все это используется для снижения жалованья местных работников, можно найти в статье «На минимальном уровне: зарплаты программистов с визой Н-1В» (The Bottom of the Pay Scale: Wages for H-1B Computer Programmers»), которая находится по адресу www.cis. org/articles/2005/backl305.html. 2) Бывшая служба иммиграции и натурализации (INS — Immigration and Naturalization Service). Из-за различных перестановок после создания Министерства национальной без- опасности (Department of Homeland Security) вы увидите, что эту службу почти неизменно называют USCIS, BCIS (Bureau of Citizenship and Immigration Services — бюро по оказанию услуг по получению гражданства и иммиграции) или INS.
270 ■ Глава 7. Работа в крупной компании дит к автоматическому отказу в выдаче визы. Общее эмпирическое пра- вило — четыре года рабочего стажа засчитыраются за один год обучения. • Если работника увольняют или компания-работодатель выходит из биз- неса, работник не может перейти к другому работодателю, не подав сна- чала новое заявление о выдаче визы Н-1В или иной запрос о предостав- лении статуса, позволяющего легальное трудоустройство. • Виза Н-1В действительна в течение трех лет, и она может быть возобнов- лена один раз (ещё на три года). По истечении этого срока обладатель визы Н- 1В должен подать заявление о предоставлении статуса постоянно- го резидента (зелёная карта). Пока заявление находится на рассмотрении, человеку предоставляется право жить и работать в Соединённых Штатах. • Виза Н-1В позволяет повторно въезжать в Соединённые Штаты. Пока она действительна, её обладатель может выезжать из страны и возвращаться. • Визы Н-1В сейчас предоставляют несколько больше свободы. Если вы работаете, будучи обладателем такой визы, вы можете подать заявле- ние о приёме на работу в Соединённых Штатах, и вам будет позволено трудиться у нового работодателя, пока его заявление о выдаче вам визы Н-1В будет находиться на рассмотрении. Как вы видите, процесс структурирован таким образом, чтобы избежать снижения зарплат местных работников, а также обеспечить предпочтитель- ность трудоустройства на вакантное место жителя США перед авторизацией привезённого из-за границы работника. Некоторые законы также были под- правлены (смотрите, в частности, последний пункт вышеприведённого спи- ска), чтобы не подвергать обладателя визы Н-1В некоторым стрессам. До- вольно страшно быть обладателем визы Н-1В, если финансовое положение вашего работодателя не очень устойчиво. Так всё работает в теории. Сообщают, что всё же существуют различные нарушения, наиболее распространённым из которых является следующее. Компании-оболочки0 обеспечивают въезд в страну работников по визе Н-1В с минимальным уровнем заработной платы (основанным на существующих ставках в той местности, где расположена компания-оболочка). Затем этих людей трудоустраивают в фирмы, расположенные в каких-нибудь других ме- стах, где ставки очень низкие. Иногда обладателям визы Н-1В не платят даже 0 Shell company — официально зарегистрированная компания, не имеющая активов и не ведущая операций; обычно такие компании создаются для облегчения налогового бре- мени или для проведения незаконных операций. — Примеч. ред.
7.4. Процедуры и вы: держите голову над водой ■ 271 те суммы, которые были определены в LCA. Работники с визами Н-1В по- лучают крохи, а разница ложится в карман фирмы-оболочки. Предполагают также, что эти компании обращаются с такими работниками, в сущности, как с рабами, угрожая, что если они будут жаловаться, то поручительство на них отзовут (что означает конец законности их трудоустройства в США). В конце концов в значительной степени о доступности в Америке рабо- чих мест для специалистов по встраиваемым системам можно судить по той активности на рынке труда, которую я вижу. А эта активность высока и про- должает расти. Не обращайте внимания на пессимистические вздохи: аутсор- синг и рабочие визы не помешают вам найти работу в Соединённых Штатах. Я бы, впрочем, советовал продвигаться вверх по служебной лестнице, если вам предоставляется такая возможность. Перевод рабочих мест в оффшоры всё же существует. И если это происходит, то обычно касается «рядовых» со- трудников. С другой стороны, нужда в компетентных руководителях проект- ных работ растёт гигантскими темпами. Умение взять на себя и эту роль очень поможет вам избежать необходимости искать работу в новой компании, если ваша инженерная должность будет передана заграничному специалисту. 7.4. Процедуры и вы: держите голову над водой По крайней мере в Америке лишь немногие (если они вообще есть) круп- ные корпорации представляют собой монолитные организации, тогда как со стороны других это всего лишь притворство. Хотя они могут быть объедине- ны под одной торговой маркой, иметь единую, зафиксированную на бумаге корпоративную философию, на практике большинство крупных корпораций очень напоминают китайских драконов на праздновании Нового года по лун- ному календарю. Другими словами, они представляют собой группу потен- циально самодостаточных единиц, завёрнутых в нечто непрозрачное, чтобы заставить их выглядеть единым организмом. Эти единицы не обязательно разделяют общую философию, и обычно у них выработаны сильно отличаю- щиеся массивы внутренних процедур, некоторые из которых могут быть фун- даментально несовместимы с «начертанными» методами и целями родитель- ской корпорации. Такая ситуация в довольно большой степени неизбежна. Чрезвычайно до- рого (и в смысле финансов, и в смысле удовлетворения заказчиков) предо- ставить совершенно новый набор процедур и целей каждому работнику ново-
272 ■ Глава 7. Работа в крупной компании приобретённой дочерней компании и заставить всех за ночь переключиться на них. Фактически по стоимости это было бы равносильно увольнению всех сотрудников дочерней компании с последующим их повторным приёмом на работу в родительскую корпорацию. Работая в крупной корпорации, вы столкнётесь с куда большим числом процедурных требований, чем это было бы в небольшой компании. С точки зрения простого инженера по работе с клиентами, мы можем разделить такие процедуры на следующие три большие категории: • Тип 1. Задачи, которые необходимы или полезны для эффективного вы- полнения инженерных функций. Например, стандартизованный про- цесс работы с символами электронных компонентов в САПР, процедуры выпуска уведомлений о технических изменениях в существующих про- дуктах и т. д. • Тип 2. Задачи, не относящиеся к инженерным необходимостям, но каким-то образом важные в практическом плане и которые нельзя про- игнорировать. В эту категорию попадают процедуры ISO (International Organization for Standardization — международная организация по стан- дартизации), требуемые государством данные по испытаниям и т. д. Поч- ти все такие задачи непосредственно связаны с требованиями заказчика, и, следовательно, их выполнение оказывает недвусмысленное влияние на конечный результат. • Тип 3. Задачи, разработанные для генерации показателей или иных вы- ходных данных, которые ни в коей мере не влияют на выполнение ин- женерных функций. Иногда эти показатели существуют только для того, чтобы можно было измерить выполнение инженерных функций, ис- пользуя те же самые единицы, которые приняты, скажем, в маркетинге. Это немного напоминает попытку измерить кислотность апельсинового сока в дюймах. Существует ещё четвёртая категория — те задачи, которые в действитель- ности являются работой кого-то другого, но ответственными за их выполне- ние оказались вы. Это, очевидно, самые раздражающие задачи из всех выше- перечисленных. Задачи типов 1 и 2 относятся к тем вещам, с которыми вам придётся жить. Они являются частью выполняемой вами работы, и, хотя вы могли бы тактич-
7.4. Процедуры и вы: держите голову над водой ■ 273 но предложить кое-какие подходящие улучшения0, в конце концов вам про- сто придётся уступить и выполнить то, что предусмотрено этими процедура- ми. Интересна третья категория. Большая часть «потерянного» вами времени будет тратиться на выполнение задач из этой категории. Инженеры почти всегда испытывают сильную антипатию по отношению к подобным работам, и на то есть превосходная причина: они не выдают на выходе «полезного» ре- зультата. А единственная причина, по которой от вас требуют выполнения этих работ, заключается в том, что они предоставляют средства измерения ва- шего соответствия политике компании. В качестве ремарки можно отметить, что задачи «с потерей времени» диктуются необходимостью соответствия с ISO9000. Фактически соответствовать ISO900x несложно. Вы должны доку- ментировать процесс и уметь доказать, что следуете этой документации2*, и это всё, что надо делать. Номинально система совместима со стандартом, если вы говорите: «Наш процесс прогнозирования объёма продаж состоит в броса- нии куриных косточек на клавиатуру компьютера» — и можете доказать, что вы действительно проделали это в текущих проектах. Проблема с ISO9000 заключается в том, что кто-нибудь в руководстве захо- чет увидеть бумаги, соответствующие какому-нибудь отдельному этапу цикла проектирования, которые он добавит в список документов ISO9000, подлежа- щих выпуску. Почти как совокупность юридических норм, список подлежа- щих выпуску документов ISO9000 редко сокращается, поэтому груз забот по своевременному выпуску канцелярии беспрестанно растет. Так каким же образом эти задачи, приводящие к «потере» времени, про- никли в инженерный процесс? Согласно моим личным наблюдениям, боль- шая их доля — следствие неуместного применения управленческого инстру- ментария. Например, существуют очень надёжные, хорошо обоснованные методики анализа получаемых результатов постоянно работающего техноло- гического процесса и использования этой информации для подстройки его этапов или входных параметров с целью улучшения качества получаемых ре- зультатов. Во многих инженерных проектах эти инструменты не срабатывают, поскольку (по крайней мере, в теории) результатом работ является конструк- ция, которая полностью определена спецификацией продукта. Другими сло- 1} Нет нужды говорить, что ваш первый рабочий день, вероятно, не самое лучшее время для таких предложений. 2) Цель этой сертификации — установить, что у вас есть документированный способ ведения бизнеса. В действительности сама по себе она никак не связана с качеством.
274 ■ Глава 7. Работа в крупной компании вами, допустим, отдел маркетинга говорит: «Разработайте нам штуковину, ко- торая обеспечивает выполнение десятка мегафункций и срок службы которой составляет пять лет». Как только инженерные подразделения добились этого результата, их задача, номинально, завершена. Здесь нет постоянно работаю- щего технологического процесса, который может быть подстроен для улуч- шения какого-то специфического результата. Хотя продукт, конечно, может быть улучшен, но это уже другая, отдельная задача. Также можно изменить процесс производства, но опять же эти вопросы не являются первоначальной инженерной целью. Прежде чем я начну получать тысячи писем с жалобами, пожалуйста, об- ратите внимание на важное семантическое замечание. Инструменты анализа технологических процессов могут быть, на совершенно законных основани- ях, использованы для анализа и совершенствования процесса проектирова- ния изделий (включая инженерную фазу). Они просто не очень хорошо рабо- тают в огромном числе индивидуальных инженерных проектов, в частности при разработке новых изделий. Всё, у чего есть хорошо определённая точка окончания работ, само по себе не приспособлено для эффективного анали- за посредством инструментария, ориентированного на постоянно работаю- щие процессы. Представьте себе людей с дипломами MBA (Master of Business Administration — специалист по управлению бизнесом) на заводе Форда, смо- трящих на бракованный автомобиль, сходящий с конвейера, и пытающих- ся выработать процедуру, которая бы волшебным образом повернула время вспять и решила эту проблему, и тогда вы поймете, о чём я говорю. Ещё одна существенная часть задач третьей категории произрастает из гло- бальных на уровне компании технологий, которые не подходят для всех типов инженерных задач. Путь, по которому они обычно приходят, состоит в следую- щем. Одно подразделение компании вводит новую технологию, что приводит к большому росту производительности. Руководители других подразделений также хотят добиться подобного роста, поэтому импортируют эту технологию в совершенно неподходящие сферы деятельности. Это не всегда приводит к оглушительному успеху. Обычно в таких случаях приходится использовать ме- тодику Прокруста0, и результаты часто оказываются болезненными. 0 Легендарный Прокруст был в своём роде владельцем мотеля. Он гостеприимно при- глашал людей остановиться на ночь в его доме. Но если рост гостя не совпадал с длиной кро- вати, то Прокруст, чтобы добиться соответствия, либо вытягивал постояльца на дыбе, либо отрубал ему ноги. Слово «прокрустов» иногда используется в компьютерных науках, когда говорят о функциях работы со строками. Тезей заставил Прокруста испытать свою техноло- гию на себе, и многие инженеры с энтузиазмом пытаются повторить достижение героя.
7.4. Процедуры и вы: держите голову над водой ■ 275 В качестве примера давайте сравним схемы проектирования ручки для дверцы автомобиля и разработки радиоприёмника. Дверная ручка может быть с почти совершенной точностью смоделирована на компьютере. Зная, какого рода полимер будет использован для отливки этой детали; инженер-механик может получить чрезвычайно надёжные оценки веса, прочности и иных важных параметров. Он может также подставить виртуальную деталь в функ- циональную компьютерную трёхмерную модель автомобиля и проверить, на- сколько она подходит и как функционирует, даже не тратя ни цента на сте- реолитографическое или иное макетирование. С другой стороны, как только инженер объявляет: «Деталь хороша», это тут же приводит к трате нескольких десятков тысяч долларов на изготовление пресс-формы. Проектные отделы, созданные для работы с такого рода задачами (простыми в моделировании, но дорогими в макетировании), склонны к сложным, многоуровневым про- цессам принятия окончательного решения с отчётливо однонаправленными схемами проектирования. На каждом шаге будут выпускаться требуемые документы, в которые часто входят подробные результаты моделирования, проверяющие специфические свойства разрабатываемой детали. Исходной предпосылкой, основанной на высокой стоимости прохождения стадии ма- кетирования, здесь является то, что оплата времени, затраченного проекти- ровщиками на проверку, перепроверку и принятие чертежей и результатов си- муляций, обойдётся дешевле, чем создание натурных макетов. В такого рода системах возврат проекту с атрибутом «закончен» атрибута «этап конструк- торских работ», означающего необходимость переработки из-за проблем, вскрытых на макете, является редким событием. Обычно также невозможно пропустить не относящиеся к делу этапы процесса, если вам всё же каким-то образом удалось вернуться на более ранний этап проектирования. Создание радиоприёмника — задача совершенно иного вида. Хотя и можно найти коммерческое ПО, которое умеет моделировать различные эффекты, проявляющиеся на печатных платах, однако включить в модель все требуе- мые переменные фантастически сложно. Из-за этого проведение симуляции оказывается очень затратной по времени работой, зачастую дающей весьма неточные результаты: Провести компьютерное моделирование такого рода изделий с уровнем точности, необходимым для принятия критических про- ектных решений, — поразительно сложное дело. В результате типичный про- цесс разработки таких изделий выглядит примерно следующим образом: 1. Инженеры-схемотехники разрабатывают схему. Там, где это возможно, она часто будет состоять из уже проверенных схемотехнических элемен-
276 ■ Глава 7. Работа в крупной компании тов, позаимствованных из других изделий. Индивидуальные элементы могут быть промоделированы на компьютере на уровне схемы. 2. Схема проверяется и принимается всей проектной группой. Обычно для её утверждения достаточно санкции руководителя проекта, поскольку затраты на инструментальную обработку в таких проектах не относятся к главным капиталовложениям. 3. Схема передаётся группе проектировщиков печатных плат вместе с со- проводительным списком правил, специфичных конкретно для этого изделия, таких, как: «Разнести U5 и Q1 на максимально возможное рас- стояние друг от друга» или «Обеспечить разводку сигнальных дорожек подальше от U12». 4. Проектировщики печатных плат делают первый вариант платы и пере- дают бумажную копию обратно в проектную группу. 5. Проектная группа проверяет критические места платы. Если в кон- струкции платы обнаруживаются недостаточно оптимальные структу- ры, то замечания передаются в группу разработчиков печатных плат, и процесс повторяется. В большинстве случаев обычно для решения всех очевидных вопросов достаточно одной-двух итераций. 6. Производственный отдел выполняет проверку технологичности кон- струкции, чтобы гарантировать, что схема размещения компонентов со- вместима с используемым процессом монтажа печатных плат. На этом шаге привлечение инженеров-схемотехников требуется нечасто. 7. Заказывается изготовление прототипов. Стоимость изготовления за наличный расчёт небольшой поверочной партии макетных образцов обычно существенно ниже 1000 долл. Но сумма может быть и больше. Это зависит от особых обстоятельств, таких, как срочность заказа, при- нятых у изготовителя правил панелизации (размещение печатных плат на листе-заготовке) и требований к оборудованию, используемому для установки компонентов на плату и пайки. 8. Инженер-метролог выполняет лабораторные и натурные испытания макетных образцов и определяет эксплуатационные характеристики радиоприёмника. Этот шаг почти всегда влечёт небольшие изменения номиналов некоторых компонентов. 9. Если эксплуатационные характеристики оказываются адекватными с первого раза, то процесс завершён. Иначе команде проектировщиков придётся усесться вокруг макета и провести новый мозговой штурм. И весь процесс повторяется снова, начиная с третьего пункта.
7.4. Процедуры и вы: держите голову над водой ■ 277 Эффективна ли такая методика? Приблизительно час работы проектиров- щика в Соединённых Штатах составляет 100 долл.0 Число очень грубое, но полезное для простого анализа вроде этого. Если мы оцениваем, что изготов- ление нашей макетной платы будет стоить 1000 долл. (что эквивалентно 1.25 человеко-дней по инженерной ставке), а связанные с этим работы по уточ- нению номиналов и тестированию эксплуатационных характеристик займут три человеко-дня, то получим общую стоимость проектной итерации, равную 4.25 человеко-дням, или 3400 долл. Сравните это с тем фактом, что вы легко можете потратить неделю или две, создавая действительно аккуратную ком- пьютерную модель проекта (даже предполагая, что вы сможете собрать все параметры). Так что 3400 долл. плюс определённая доля риска выглядят до- вольно привлекательно. Вернёмся к животрепещущему вопросу: как выжить и преуспеть на новом рабочем месте? На настоящий момент я буду предполагать, что ваша главная цель — быть хорошим работником и двигаться маршем вверх по карьерной лестнице в выбранной вами компании. Понятно, что вам бы хотелось делать максимально возможный объём полезной работы. Поскольку задачи типа 3 крадут время, которое в ином случае можно было бы использовать на выпол- нение этой полезной работы, вы, очевидно, хотите минимизировать количе- ство таких возложенных на вас задач. Вот рецепт, объясняющий, как сделать это, сохраняя в то же время вид друга корпорации. Рассматривая только за- дачи типа 3, первым делом сделайте следующее: 1. Выясните, выполнение каких именно задач будет проверяться. 2. Выясните, кто именно будет вас проверять. 3. Определите, насколько проверяющий лично заинтересован в выполне- нии каждой процедуры из списка, полученного на шаге 1. 4. Узнайте, не делаются ли уже какие-либо из возложенных на вас задач другими людьми. Шаг 1 вполне очевиден. Если никто и никогда не собирается смотреть ре- зультаты выполнения порученной вам задачи, то нет и смысла ею заниматься. Вполне возможно, что проповедники процессуальных норм в вашей компа- нии лишились бы чувств, услышь они, что вы игнорируете какую-то задачу, 1} Это грубая бюджетная оценка того, во что обходится штатный работник компании. В эту оценку входят зарплата, медицинская страховка, налоги с фонда заработной пла- ты, электричество, IT-поддержка, туалетная бумага, кофе и множество других маленьких слагаемых. Фактическое жалованье инженера составляет около 50% от этой цифры, часто меньше.
278 ■ Глава 7. Работа в крупной компании обладающую мистической значимостью в корпоративной мантре. Но, в сущ- ности, это не ваша проблема. Самое главное здесь (и в моих словах нет ни кап- ли легкомыслия) — минимизировать свои контакты с такими проповедника- ми и сократить тем самым время, которое они проводят, тщательно изучая, как вы ставите точки над i. Шаг 2 также очевиден. Наиболее вероятно, что проверять вас будет ваш не- посредственный начальник. В других случаях вы сможете идентифицировать соответствующего человека без особого труда. Шаг 3 — дело мудрёное. И успешно пройти его можно, только поддержи- вая хороший двусторонний диалог с вашим проверяющим, чтобы знать его личный интерес и оценивать, насколько сильный энтузиазм вам надо выказы- вать, выполняя эти съедающие время задачи. Если ваш контролёр — стойкий сторонник «времязатратного» процесса, от которого вы пытаетесь увильнуть, вам придётся выказывать усердие. Однако, если у него нет сильного личного интереса к наличию этой канцелярии (или что оно там собой представляет), тогда вы можете, ничем не рискуя, обговорить чистый минимум требований и делать только его, и ничего более. Худший случай, с которым вам, возможно, придётся иметь дело, — это когда официальные корпоративные руководства предписывают вам исполь- зовать процедуру ABC, а ваш проверяющий активно препятствует этому и предлагает вместо неё применять процедуру XYZ. Эта процедура XYZ обычно является «унаследованной», оставшейся от прошлой жизни вашего бизнес- подразделения, когда оно ещё было независимой корпорацией, т. е. жизни до его приобретения. Если ваш контролёр совершенно отказывается позволить вам следовать «корпоративным путем», то вы попали в опасную ситуацию. Хотя вы потенциально прикрыты аргументом, что вам приказали действовать определённым образом, но этот аргумент столько раз в прошлом не спасал солдат, что и в вашем случае он тоже легко может не сработать. Я бы пред- ложил вам подчиниться вашему контролёру, но отправить руководству по электронной почте письмо с просьбой прояснить, каким образом тот способ, который вам приходится принять, согласуется с обнародованной политикой компании. Это письмо — контрольная запись, которая может быть использо- вана для прикрытия вашего тыла, если позднее проблема всё же возникнет. Шаг 4 обладает огромным потенциалом для экономии вашего времени, особенно в случае задач, которые состоят главным образом в создании кон- трольных записей, в частности документов ISO. Вероятно, вы обнаружите, что
7.5. Взаимоотношения с отделом маркетинга ■ 279 большая часть требуемого уже создается в виде протоколов заседаний, под- писанных санкций на закупку инструментария и т. д. Узнайте, где создаются эти «бесплатные» документы, и вам не понадобится бегать туда-сюда, собирая подписи и тому подобное. В итоге: хотя то, что я собираюсь сказать, расценивается как ересь, этой точки зрения, под которой лично я готов расписаться, обычно придерживают- ся инженеры. Процедуры, какими бы хорошо проработанными они ни были, не могут обеспечить качество. В лучшем случае они могут только дать стандартизо- ванный способ его измерения. Вы не можете избежать изучения и применения процедур, принятых в вашей компании, но можете попытаться минимизиро- вать количество ненужной работы, которую эти процедуры создают для вас. 7.5. Взаимоотношения с отделом маркетинга Границы общения между отделами крупной фирмы и разделение обязан- ностей между ними часто очень схожи независимо от типа компании. Телеология (сущ.) 1. Изучение замысла или цели в природных явлениях. 2. Использование высшей цели или замысла как средства изучения при- родного явления. 3. Вера (или осознание) в целенаправленное движение к конечной цели как в природе, так и в истории. Словарь английского языка (изд-во American Heritage, 4-е издание) Некоторые люди могли бы сделать телеологическое утверждение: причина эволюционирования корпоративного поведения таким путем в том, что это предопределено. Почти в любой организации — даже в очень небольшой компании, состоя- щей всего из двух-трёх человек, — характеристики изделий, графики выпуска и так далее задаются (или, возможно, пестуются) людьми, отвечающими за маркетинг. Это нормальное и, хотите — верьте, хотите — нет, желательное по- ложение вещей. Люди из отдела маркетинга, если они выполняют свою работу должным образом, держат руку на пульсе того, что и когда хотят покупатели и в какой степени их можно убедить заплатить за это. Нравится вам или нет,
280 ■ Глава 7. Работа в крупной компании но в компаниях, работающих ради прибыли, эти факторы представляют собой основные параметры, в соответствии с которыми вам, инженеру, надо сформи- ровать свою конструкцию. Даже в случае чисто исследовательской работы — а таковой проводится весьма мало — «маркетинговое» давление исходит от лю- дей, которые формируют фонды на определённые исследовательские цели, В гипотетической совершенной компании отдел маркетинга должен выдать список желаемых характеристик изделия. Затем технический отдел на основе проведённого анализа выдаёт ответ, в котором приведены оценённые с разу- мной точностью стоимость и сроки проведения разработки и себестоимости из- делий с различными наборами обсуждаемых характеристик. Отдел маркетинга сделает прогноз продаж продукта и представит всю информацию высшему ру- ководству, которое затем, посчитав доходы и расходы, примет требуемое реше- ние относительно того, достаточно ли данное изделие привлекательно с точки зрения предполагаемой прибыли, чтобы его производить. В некоторых случаях руководство может оценивать, не стоит ли производить изделие, даже если это не принесет прибыли, ради достижения каких-либо иных деловых целей. Компания Sony, например, делает множество демонстрационных техниче- ских новинок, которые не обязательно направлены на извлечение прибыли. Выпускаются же они просто потому, что корпоративная стратегия Sony вклю- чает желание, чтобы компания воспринималась как фирма, идущая впереди своих конкурентов в части инновационных разработок. Также довольно распространён выпуск приносящих убыток продуктов, ко- торые или расчищают место другим, теперь уже прибыльным изделиям, или их появление тем или иным образом связано с лицензированием интеллектуаль- ной собственности. Иллюстрацией этому служит то, что после первоначального появления карт памяти Memory Stick на продвижение их формата, являющего- ся собственностью фирмы Sony, были положены большие усилия. Sony, в сущ- ности, платила другим компаниям, чтобы те использовали в разрабатываемых устройствах карты Memory Stick. Сейчас ситуация прямо противоположная: стать членом клуба Memory Stick довольно дорого. И предполагается, что сей- час компания Sony начинает получать чистый доход от этой разработки1*. Настоящая жизнь, конечно, гораздо более запутана по сравнению с моим предыдущим, весьма идеализированным описанием. Например, неприятный, 0 Действительности этот конкретный пример не соответствует. В настоящее время кро- ме самой Sony в массовом порядке этот формат карт памяти использует, похоже, только Samsung. Все остальные (и Samsung в их числе) используют другие стандарты. — Примеч. науч. ред.
7.5. Взаимоотношения с отделом маркетинга ■ 281 но абсолютно непреложный факт, что многие (если не все) технические проек- ты предваряются определёнными теоретическими исследованиями. Обратите внимание, что я не использую фразу «теоретические исследования» в том же самом смысле, в каком её бы употребил учёный. Я использую её для обозна- чения процесса, посредством которого вы, взяв список предполагаемых пара- метров (обычно довольно туманных), решаете, какое аппаратное обеспечение понадобится для их реализации. Это процесс нахождения тонкого баланса, и это в гораздо большей степени форма искусства, нежели наука. В этом про- цессе ищется решение, ограниченное следующими рамками: • Сколько времени мы можем затратить на первичный анализ? Спектр до- ступных нам чипов близок к бесконечности0. Чем больше времени мы проводим, прочёсывая планету в поисках новых микроконтроллеров, специализированных микросхем и сборок, тем выше вероятность, что мы найдём решение, которое будет «лучше», чем наилучшее из предло- женных на текущий момент. • Сколько денег мы можем потратить на приобретение тестового обору- дования? Если мы фактически можем собрать на скорую руку прототип или, по крайней мере, перенести кое-что из нашего критически важно- го встраиваемого ПО на оценочную плату рассматриваемого чипа, мы можем быстро оценить, адекватен данный чип нашим задачам или нет. Такого рода траты — это, впрочем, финансирование научных исследо- ваний, а не технической разработки нового изделия. Высшему руковод- ству обычно такие расходы не нравятся. Также здесь есть опасность не устоять перед искушением и взять технологию создания на скорую руку демонстрационного прототипа за основу для реального изделия. • Какова стоимость переоценки возможностей чипа? Иными словами, ка- кими будут последствия, если мы, посмотрев все технические данные и проведя кое-какие расчёты, решим, что чип XYZ вполне нам подходит и его цена оптимальна, а позднее выяснится, что ему совсем чуть-чуть не хватает ресурсов для выполнения требуемой задачи. Большая компания сможет проглотить шесть месяцев потерянного на проектирование вре- 0 Под этим я подразумеваю, что единственным условием, эффективно ограничиваю- щим ресурсы, которые мы можем затратить, является та граничная точка, за которой уже не стоит продолжать поиски. Другими словами, мы можем найти «хорошее» решение и продолжить поиски «лучшего», но никогда не сможем найти «самое лучшее». Обычно даже невозможно определить, что является «самым лучшим» решением, хотя большинство по- пыток дать такого рода определение начинаются с предположения о гипотетическом за- казном устройстве, которое содержит только нужные нам функции.
282 ■ Глава 7. Работа в крупной компании мени и, скажем, десять тысяч долларов, затраченных на покупку специ- фичных для данной платформы инструментальных средств разработки. Для инженера-частника, оказавшегося в подобной ситуации, это, веро- ятно, будет означать крах. • Какова предполагаемая маржа и объём выпуска изделия? Эта информация, вероятно, будет включена в запрос отдела маркетинга на разработку из- делия (хотя вполне нормально, если эти оценки будут очень неточными, в частности для проекта, в котором есть что-то новое и не опробованное; у отдела маркетинга просто нет материалов для оценки себестоимости). Причина, по которой эти цифры фигурируют в наборе исходных данных, в том, что если вы собираетесь продать, скажем, пятьсот изделий и про- дажа одного устройства будет приносить прибыль в десять долларов, то не стоит тратить очень уж много времени на оптимизацию этих изделий. К сожалению, большинство инженеров не обладают достаточно хорошей интуитивной хваткой в деле аккуратной оценки всех этих вопросов. Здесь много неизвестных, а любой ответ без подготовки таит в себе опасность. Хуже того, у многих инженеров есть ужасная склонность давать обещания, которые не могут быть выполнены. Наиболее подходящим мне образом действия я на- хожу ограничение моих контактов и фактически контактов всей моей группы с людьми, занимающимися маркетингом. В частности, для инженеров жиз- ненно важно избегать обсуждения умозрительных и перспективных проек- тов с сотрудниками отдела маркетинга в неструктурированной манере. Если в вашей группе есть люди, которые не могут не поболтать о самой последней, новой, классной штуке, над которой они работают, то их надо принудить к молчанию или изолировать любой ценой. Эта ремарка применима даже в от- ношении тех «штук», реализация которых в существующих проектах возмож- на, по вашему мнению, с минимальными изменениями последних. Когда вы имеете дело с отделом маркетинга, я рекомендую помнить мак- симу Бо Дидли (Во Diddley): «He позволяйте своему языку выписывать чек, который ваш карман не может обеспечить наличными» (Don't let your mouth write no check that your tail can't cash). 7.6. Распределение задач: типичная неделя Подобно тому как это было сделано в разделе 6.6, в данном разделе по- казано распределение задач репрезентативной недели из жизни инженера, работающего в крупной компании. Цель данного раздела — дать примерную
7.6. Распределение задан: типичная неделя ■ 283 иллюстрацию того, на какие задачи, какую долю своего времени вы будете тратить. Я рекомендую вам посмотреть ещё раз на раздел 6.6 и сравнить два расписания. Они довольно точно иллюстрируют, насколько отличается набор задач инженеров в маленькой и большой компаниях. • Понедельник 2 часа — еженедельное собрание группы с целью планирования задач на неделю. 1 час — корректировка графиков и выпуск документов ISO9000 для текущих проектов. 1 час — поиск резервных поставщиков компонентов, проверка специ- фикаций более дешёвых компонентов, предложенных от- делом комплектации для замены применяемых в настоящий момент, и прочее. 1 час — проверка схемы для передачи в группу разработки печатных плат. 2 часа — написание программ и/или проектирование схем. 1 час — разное (общение с поставщиками, ответы на вопросы коллег, консультации по техническим вопросам, возникшим у дру- гих отделов). • Вторник 1 час — поиск резервных поставщиков компонентов, проверка специ- фикаций более дешёвых компонентов, предложенных от- делом комплектации для замены применяемых в настоящий момент, и прочее. 6 часов —- совместная разработка схем и ПО. 1 час — разное. • Среда 2 часа — еженедельное собрание группы/отдела с целью планирова- ния задач по проекту. 1 час — встреча с поставщиком. 2 часа — проверка соответствия схемного решения установленным стандартом нормам. 2 часа — совместная разработка схем и ПО. 1 час — разное.
284 ■ Глава 7. Работа в крупной компании Четверг 1 час — поиск резервных поставщиков компонентов, проверка специ- фикаций более дешёвых компонентов, предложенных от- делом комплектации для замены применяемых в настоящий момент, и прочее. 1 час — корректировка графиков и выпуск документов ISO9000 для текущих проектов. 2 часа — оценка топологии печатных плат, поступивших из группы разработки печатных плат. 2 часа — собрание по вопросам стратегии/планирования с сотрудни- ками отдела маркетинга. 1 час — совместная разработка схем и ПО. 1 час — разное. Пятница 0.5 часа — подготовка табеля отработанных часов за текущую неделю. 1 час — решение вопросов с производством. 2 часа — анализ проектных решений (или программных, или аппарат- ных; обычно вы не можете разбирать программные и аппа- ратные решения в одно и то же время, так как необходимо присутствие разных групп). 2 часа — решение вопросов обеспечения качества тестируемых в на- стоящее время проектов. 1.5 часа — совместная разработка схем и ПО. 0.5 часа— разное.
ГЛАВА О ЗАКЛЮЧЕНИЕ: ИДИ И ПОБЕЖДАЙ Поздравляю! Вы добрались до конца книги. Надеюсь, к этому моменту вы получили хотя бы предварительные ответы на некоторые из вопросов, наибо- лее часто задаваемых людьми, ищущими опоры в мире встраиваемых систем. Подытожим то, что вы узнали, прочитав эту книгу полностью: • Вы получили представление о том, какое обычно требуется образование, чтобы стать инженером по встраиваемым системам. • Я описал, как можно заняться этой сферой деятельности, используя не- традиционные подходы. Также была включена информация о том, как потом сохранить свои позиции, если у вас пока нет диплома. • В главах 3 и 4 в общих чертах описаны наиболее популярные встраивае- мые архитектуры с разными функциональными возможностями и даны некоторые критерии, призванные помочь вам решить, какие языки про- граммирования и какие архитектуры вам следует выбрать для изучения. Я также попытался описать, с чего вы могли бы начать, если на данный момент вы гуру в электронике, но не имеете большого опыта в програм- мировании. Или на что требуется направить своё внимание, если вы высококлассный специалист в компьютерных науках, не обладающий большим опытом в проектировании аппаратного обеспечения и ПО, ра- ботающего в режиме реального времени. В качестве иллюстрации я пред- ставил типичный 8-битный проект и дал ссылки на исходные програм- мы на тот случай, если вы заинтересуетесь этой конкретной схемой. • Вы вкратце познакомились с проблемами, радостями, глупостями и на- градами, с которыми встречается человек, работающий независимым консультантом, инженером (возможно, единственным) в небольшой
286 ■ Глава 8. Заключение: иди и побеждай компании или являющийся одним из огромной группы инженеров в большой фирме. Мне всегда интересно получать отзывы от моих читателей. Если у вас есть комментарии или вопросы по материалу этой книги (в частности, если вы чувствуете, что мной не объяснены какие-то вопросы, которые важны в вашей личной ситуации), пожалуйста, не стесняйтесь присылать их мне на электронную почту sysadm@zws.com. Часто возникающие вопросы и ответы на них, а также те вопросы, которые будут казаться представляющими интерес для многих людей, будут размещены на странице, посвященной моим публи- кациям. Её можно найти по адресу www.zws.com/publications/.
Предметный указатель 401(k) 27, 213, 227, 259, 267 1099-MISC 208,214 А А ABET 15, 19, 40 Acorn 9,164 Advantech 113,155 AMD ИЗ, 152 ARM 65, 75, 164 ARM720T 167,171 ASSP 53,149 ATmega32L 66,138 AtmelAVR 65 AVR Butterfly 72 avrdude 74,144 avr-libc 75,142 в BCM 755 binutils 142 BIOS 151,186 BlackBerry 233 BlueStreak 167 bond-out 92 BSEE 19, 36 BSEET 19,38 BSL 84 Buffalo Linkstation 180 С C++ 100 Cell Broadband Engine 179 CNA 42 CNE 42 Commodore 64 148 Commodore Amiga 148 CompactFlash 156 comp.arch.embedded 66 T\ debugWire 73 developerVtorks 109,180 DPTR 58 DSP 14 dsPIC 86 E eCos 194 EEPROM 70,145 Epia 154 Ethernet 65,169 F Fidonet 45 G GPIO 54 GPS-приёмник 113,141 GUI 149,163 I Intel 52 IP 238 IP-блок 165
288 ■ Предметный указатель Jazelle 177 JTAG-ICE 73 JTAG-интерфейс 77, 175 К Keil 63 KuroBox ПО L Linux 183 M mARMalade 169 Mini-ITX 154 MMU 171 N NAND Flash 193 О Olimex 73,175 P РЕ-лицензии 32 picoPower 69 PICstartPlus 93 PonyProg 63 R RC-генератор 67 RedBoot 176 RISC 81 Rowley Associates 75,176 Scenix 94 sdcc 64 SDRAM (синхронное динамическое ОЗУ) ПО SPICE 37 SpyBi-Wire 78 STK500 72, 142 StrongARM 165,203 TLB 172 Transmeta 152 U UART 49 Ubicom 94 U-Boot 176,190 USB-микроконтроллеры 160 Usenet 45,100,194 Via Technologies 152 W wiggler 111 WinAVR 75, 142 Windows 74,162,163 XFree86 183 XRAM 61 XScale 165 автоматический выключатель 157 активное охлаждение 150,154 анализ проектных решений 284 аппаратный стек 91 архитектура фон Неймана 81,172 асинхронный последовательный интерфейс 115, 159 аутсорсинг 10, 264
Предметный указатель ■ 289 буфер предыстории трансляций 172 В векторный контроллер прерываний 168 вектор ускорения 140 внешние шины 70 внутрисхемный эмулятор 54, 62 временные рабочие визы 264 гарвардская архитектура 57 гибридные квалификации 16 д датчик давления 138 датчик температуры 80,136 двухпроводной интерфейс 126 демультиплексор 58 Ж журнал регистрации событий 158 загрузочная программа 170,193 задержка ожидания обработки прерываний 175 задержки распространения сигналов 152 защищенные от копирования средства проектирования 105 заявление об условиях труда 269 И инженерная лицензия 32 интеллектуальная собственность 9, 99, 238, 264, 280 интерфейс RS-422/RS-485 157 К ключ-заглушка 107 «ковбои кода» 239 команды условного перехода 88, 173 конвертеры USB-to-serial 159 контроллер DMA 168 контроллер ЖК-дисплея 168, 201 косвенная адресация 61, 70, 90 кредит-часы 16 Л линейный регулятор 114 лицензирование J2, 280 логический анализатор 35 М манипуляция данными на битовом уровне 53 материнская плата 46, ПО, 153 микросхемы расширения периферии 58 модуль управления памятью 172 Н набор команд 61, 66, 97 наборы для сбора данных 162 навигационная система счисления 141 О одноплатный компьютер 61, ПО, 151, 203 осциллограф 35, 46, 52,117,145, 198, 247 отладчик 52, 75,161 оценочные платы 63,166, 180 П память данных 59, 89 память программ 59, 89, 161 панелизации 276 параллельный программатор 63 патент 43, 238, 258 первичный анализ 281
290 ■ Предметный указатель ПЛИС 77, 165 ПО встраиваемой системы 36 подтягивающие резисторы 55,135 показатель «цена-производительность» 756 порты ввода-вывода общего назначения 54 пример учебного плана 15 программа Н-1В 264 программирование баз данных 147 программы дистанционного образования 39 профили ускорения 132 процессоры цифровой обработки сигналов 14 прямая адресация 61, 90 разводка печатных плат 45 регистр связи 173 резюме 18, 105, 241, 261 С симуляция 36,275 совместительство 206 сопроводительное письмо 242 способы подключения внешней периферии 159 стажировка 13, 261 степень бакалавра 15 сторожевой таймер 757, 168 схема Дарлингтона 128 техническая документация 81, 232 трансляционная таблица 172 требования по работе в режиме реального времени 163 трехпроводной интерфейс 126 трудоустройство 18, 105, 242, 261 учебная нагрузка 30 Ф фабрики дипломов 40 форм-фактор 136 ц цифровые сигнальные процессоры 95 часовая ставка 227 часы реального времени 168 Ш шаговые двигатели 128 шина ISA 156 шины PCI 202