Архивы: по дате | по разделам | по авторам

Мелочевка

Архив
автор : Юрий Ревич   23.07.2001

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

«Вы познакомились с большим количеством программ на языке ассемблера. При работе с ними мы постоянно придавали большое значение самому процессу программирования, а не особенностям микропроцессора 8088…»
П. Нортон, Д. Соухэ. «Язык ассемблера для IBM PC»

Если в известный психологический тест, в котором нужно назвать первое приходящее на ум слово в ответ на некое понятие, произнесенное собеседником (поэт - Пушкин, фрукт - яблоко и т. д.), включить слово «микропроцессор», то вы с фатальной неизбежностью получите в ответ «Пентиум». Фирма, которая выдумывает имена процессорам Intel, не зря ест свой хлеб - ее придумки хорошо звучат и легко запоминаются. Конечно, главную роль здесь играет тот факт, что чипы семейства Pentium - самые распространенные процессоры для персональных компьютеров. Но являются ли они самыми распространенными среди микропроцессоров (МП) вообще? Отнюдь нет. Процессоров «не для ПК», которые чаще называют микроконтроллерами (МК), выпускается гораздо больше.

По прогнозу Ассоциации полупроводниковой промышленности (SIA) общий рынок полупроводниковых приборов в 2001 году составит 209 млрд. долларов, из них на долю процессоров для ПК придется 40 миллиардов, а на долю других микропроцессоров - 22 миллиарда 1. Если учесть, что рядовой процессор для ПК стоит несколько десятков, а то и сотен баксов, а обычная цена МК - единицы долларов, станет ясно, что даже при двукратном превосходстве объемов продаж в денежном выражении по количеству изготовленных экземпляров МК опережают процессоры для ПК в несколько раз. Что же представляет собой этот огромный рынок?

Как-то мне пришлось по электронной почте пересылать программу для МК, которая умела многое. По уравнению состояния воды она на основе данных с датчика давления рассчитывала истинную глубину, отображала ее на четырехразрядном индикаторе, контролировала состояние кнопок на пульте, связывалась с внешним компьютером по интерфейсу RS-232, отрабатывая при этом команды загрузки в память новых коэффициентов, непринужденно переходила из режима градуировки (скорость передачи 9600 бод, 8-битный формат) в режим ежесекундной посылки новых значений глубины во внешние устройства по интерфейсу RS-485 (57600 бод, 9-битный формат), успевая при всем при этом раз в секунду опрашивать по SPI-протоколу два канала 16-битного АЦП, который преобразовывал аналоговые сигналы с датчика давления и температуры, заносить их во флэш-память… и еще кое-что - всего и не перечислишь. Когда заказчики на том конце провода спросили меня, а все ли файлы я им переслал, их недоумение было мне понятно: программа занимала в исходном ассемблерном тексте 6674 байта, а скомпилированная в hex-формат вообще сжималась до 905 байт (правда, надо исключить отсюда таблицы пересчета глубины в давление, которые занимали во флэшке почти 4 Кбайт).

И еще один пример. Помнится, кто-то рассказывал такую легенду: у разработчиков бортового компьютера очередного «Маринера» оставалось несколько сотен лишних байт памяти, в которые умелец-программист умудрился втиснуть программу уточненной ориентации станции по звездам, благодаря которой удалось открыть новую планету.

Все вышесказанное хорошо иллюстрирует тот факт, что споры насчет того, какая ОС требует меньше дискового пространства - Windows или Linux, есть споры пустые, так как реализация, к примеру, функции связи с последовательным UART-портом в программе под той же Windows занимает лишних килобайт сто, а в микроконтроллере на это ушло примерно восемь байт кода (ну ладно, плюс еще байта четыре начальной инициализации порта). Конструктор навороченной системы контроля нефтяных скважин, реализованной на микропроцессоре фирмы Siemens, как-то говорил мне, что он впервые понял в процессе разработки, какая все-таки гадость эти ОС для ПК: они сделали собственную ОС (с графическими функциями для вывода на CRT-монитор!) и уместили ее в 8 Кбайт памяти процессора…

Прогресс в области микропроцессоров не для ПК не столь стремителен, как у «старшего брата», это и понятно - потребитель другой, реклама на него действует иначе, да и у существующих типов МП имеется еще значительный потенциал. Моральное старение МК происходит медленнее, чем у МП для ПК. Разработчики не стесняются применять чипы, выпущенные еще лет двадцать назад - они вполне годятся, к тому же использование старых наработок в части подпрограмм удешевляет и ускоряет проектирование. Еще несколько лет назад вполне можно было встретить устройства на основе 8080 (помните «Радио-86РК»?). И его бы продолжали выпускать, но уж больно он неудобен схемотехнически: три напряжения питания, да еще включи их в определенной последовательности… Зато семейство его собрата под общим названием 8051 сама даже сама Intel перестала развивать, но оно производится в огромном количестве модификаций множеством фирм во всем мире, включая именитые Atmel и Philips (и в СССР оно тоже выпускалось под серийным наименованием 1816 - правда, не уверен, что выпускается до сих пор). А всего, говорят, в мире существует более семидесяти семейств микропроцессоров…

Основным направлением развития «меньших братьев» было, в отличие от «старших», не увеличение быстродействия и даже не увеличение разрядности. В самом деле, много ли быстродействия требуется, чтобы считать аналоговый сигнал с датчика температуры, перевести его в цифровую форму и высветить на индикаторе? Стоимость чипа, умеющего выполнять подобные действия, порой не превышать одного-двух долларов, и он имеет «смешные» с точки зрения индустрии ПК тактовые частоты в 1-10 МГц, чего более чем достаточно. А оптимизированные по количеству занимаемой памяти (или, наоборот, по быстродействию) процедуры, позволяющие выполнять на 8-разрядном чипе аж 32-разрядные операции, бережно передаются программистами друг другу: зайдите на любой соответствующий форум в Интернете… Зато такие чипы не зря когда-то обозвали в отечественной литературе «МикроЭВМ»: если Pentium не умеет ничего, кроме как перемалывать числа, то МК стоимостью доллара в три имеет и UART-порт (а то и не один), и встроенный многоканальный АЦП, и аналоговый компаратор, и несколько таймеров с изощренным управлением…

Вершиной всей этой индустрии для меня на сегодняшний день служат разработки фирмы Atmel (приверженцев иной платформы прошу не бросать в меня камни). 8-разрядные контроллеры семейства AVR со встроенной флэш-памятью программ и данных (МК обычно имеют не фон-неймановскую, как у РС, а гарвардскую архитектуру, когда области программ и данных в памяти разделены - что, впрочем, довольно условное разделение) резко снизили необходимый порог компетентности специалистов и упростили и удешевили процесс разработки МК-устройств почти до уровня написания программ на «Паскале». Макет вашего устройства (c уже установленным в схему процессором) вы соединяете программатором с компом (подойдет любой старенький ХТ, программисты со стажем любят при этом использовать исключительно заточенный под это дело DOS-редактор MultiEdit), загружаете программу, проверяете работу схемы, тут же правите, компилируете, загружаете снова - и все это, не отсоединяя программатора и не отходя от рабочего стола. Причем программатор стоит долларов двенадцать, и никто вообще-то не мешает вам изготовить его самостоятельно. Другие семейства МК пока лишь подтягиваются к этому, но многие разработчики предпочитают программные эмуляторы, что не лишено смысла, если схема сложная и ее макет изготовить затруднительно. Так, для этих самых AVR есть программный комплекс AVR-Studio, который позволяет писать программы на Си (Си-компиляторы есть и для других распространенных семейств, в первую очередь для 8051 и PIC). Но тут та же ситуация, что и в «большом» мире: разрабатывая программы для МК на СИ, вы теряете компактность кода (впрочем, программисты, пишушие софт для ПК, в связи с увеличением емкости жестких дисков и удешевлением памяти уже давно об этом забыли, а вот те, кто имеет дело с МК, очень даже помнят).

Я не упоминаю специализированные МК - типа DSP, скажем, потому, что «Компьютерра» о них недавно писала. Но напоследок хочу сделать одно замечание. Лет пятнадцать-двадцать назад кто-то обронил крылатую фразу: «микропроцессоры придуманы раньше, чем области применения для них». Поразительно, как складывается судьба изобретений. Телефон и телевидение, автомобиль и самолет, голографию, фотонные ракеты, сверхпрочные сплавы, атомную бомбу, подводную лодку - все это изобретать не надо. В том смысле, что уже изобретено и часто - еще на заре цивилизации. Надо только выдумать способ, которым это делается. Идея компьютера в роли калькулятора витала в воздухе с тех пор, как мы научились считать. А вот идея компьютера как компьютера и тем более идея микропроцессора как некоего «мозга» технических устройств в воздухе не носилась. Не зря люди мысленно летали на Марс и разговаривали на расстоянии задолго до появления хотя бы самых слабых намеков на техническую реализацию этих идей. Даже атомная бомба была предсказана фантастами в деталях. А вот роботы-киберы в фантастической литературе появились не раньше ENIAC. И очень характерна история, которую приводит в мемуарах Гордон Мур, автор известного закона и основатель фирмы Intel. Мур признавался, что поначалу ни он, ни его сотрудники не понимали, что именно они изобрели в 1971 году, когда был создан первый микропроцессор 4004. «Поначалу, - вспоминает бывший директор Intel по маркетингу, - мы относились к этому чипу лишь как к средству увеличения продаж микросхем памяти и решили вложить в него деньги исходя именно из этой посылки». Когда в середине семидесятых один из сотрудников выдвинул идею «компьютера для домохозяек», Мур спросил: «И кому же такое понадобится?». «Домохозяйкам, - ответил сотрудник. - Они могли бы таким образом хранить кулинарные рецепты». Мур удивился: «И только- то?» Поскольку сотрудник не нашелся, что добавить, больше в фирме Intel к этому вопросу не возвращались. И лишь позднее стало ясно, что возможности, которые кроются в этом изобретении, принципиально шире, чем просто автоматизация вычислений. Вот тогда и начался информационный век, в котором мы сегодня живем.

Врезка 1
Врезка 2

[i40420]


1 (обратно к тексту) - Следует учитывать, что прогноз был подготовлен SIA еще до наступления кризиса в IT-индустрии. Сегодня эти цифры следует уменьшить процентов на 20-25. - Прим. ред. темы

В 1997 году я получил в распоряжение океанологический зонд передовой и одной из крупнейших в мире фирм по производству научного оборудования для исследований океана Sea Bird и в придачу кассету батометров к нему. С некоторым трепетом мы распаковали дорогущий прибор и обнаружили, что программное обеспечение к нему прилагалось на 5,25-дюймовых дискетах (слава богу, на судне еще имелись «двойки» с таким дисководом), и написано оно было на компилирующем Бейсике - даже без использования всяких модных тогда библиотек типа Turbo Vision. И вы знаете, это было крайне удобно: так как все исходники имелись, а компилятор находился на той же дискете, мы быстренько переписали текст обрабатывающей программы так, как нам требовалось. Но больше всего меня тогда потрясла схемотехника: в качестве центрального процессора использовался древний-древний 8031 (упрощенная модификация i51), в то время как мы сами - российские разработчики - уже давно перешли на PIC или те же 51-е, но в современной конфигурации со встроенными флэшками и прочими прибамбасами…

Если вы учились программированию на Паскале или на Си (тем более, если вы используете визуальные программные среды типа Delphi или Visual Basic), то, вероятно,знаете, что употреблять оператор go to в программах на языках «высокого уровня» считается дурным тоном (впервые это положение ввел Дейкстра в середине восьмидесятых). Действительно, многочисленные безусловные или условные переходы на метки сильно затрудняют чтение текста программы - а для чего тогда придумывали языки высокого уровня, как не для облегчения чтения текста? (Забавный эпизод из практики: мой знакомый программист-микропроцессорщик, даже близко не знавший никаких языков кроме ассемблера, когда впервые столкнулся с текстом программы на Паскале, удивленно возопил: «а я тут все понимаю!») Но если вы желаете освоить любой ассемблер, забудьте про все эти «циклы с предусловием» или с «постусловием». Никаких циклов, никаких переходов, кроме безусловных и условных типа go to, для процессора не существует (в Intel-ассемблере это многочисленные модификации jmp - к примеру, команда jne, что расшифровывается, как jump if not equivalent), и все циклы вы должны организовывать, что называется, ручками…

© ООО "Компьютерра-Онлайн", 1997-2024
При цитировании и использовании любых материалов ссылка на "Компьютерру" обязательна.