ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
5 июля
145990
teap0t (26.01.2009 20:12, просмотров: 18159)
Коллеги, прошу вас покритиковать текст. Предыстория.. Начал общаться с человеком, писавшем на CPP, C# (7 лет, Motorola, т.е. не студент). Он попадает под сокращение и озаботился вопросом повышения квалификации (диверсификации знаний). Попросил меня рассказать о встраиваемых системах. Ну я и написал. Дополнения и исправления приветствуются. Думал куда засунуть и решил сюда. Речь идёт об обзоре для профессионалов, но в смежных областях. PS Прошу вас без гусарства и религиозных воин. Я, возможно, не очень почтительно описал некоторые виды процессоров. Прошу вас предложить более объективные сведения, если имеются.
Меня в первую очередь интересует, сильно ли отличается работа системного инженера от работы обычного программиста (кем я был последние 7 лет)? Т.е. Ваша работа заключается только в проектировании/написании кода для контроллеров, или есть много специфической работы, для которой моего образования системного программиста не хватит?
Предупреждение. Я не изрекаю абсолютных истин и всё нижеизложенное является только моим мнением, возможно, ошибочным или противоречащим формальным определениям и классическому взгляду на данную область человеческой деятельности. Некоторые сведения обо мне. 42 года, образование среднее, работаю с микроконтроллерами с 1995. Моя зона ответственности: разработка технического задания, подбор компонентов и разработка электрической принципиальной схемы, разводка печатной платы (включает подбор конструктива), разработка и написание программы для микроконтроллера или прошивки для микросхемы программируемой логики, монтаж и настройка изделия и мелкосерийное производство. Имеющиеся навыки: знание современной элементной базы, умение искать компоненты по заданным параметрам, навык построения схем и разводки печатных плат, навыки технологической доводки изделия и начальные навыки промышленного дизайна, разработка, написание и отладка программ. Встраиваемые системы. Что, зачем и как. Встраиваемые системы это нечто столь же расплывчатое, как медицина или программирование. Различных вариантов, сходных по названию и отличительным признакам и совершенно различных при этом, слишком много. Приведу несколько примеров: "мозги" для стиральной машины, роутер, система впрыска топлива ДВС, МР3 плейер, головка наведения ракеты... Определение из Википедии "Встраиваемая система, встроенная система (англ. embedded system) — это специализированная компьютерная система, в которой сам компьютер обычно встроен в устройство, которым он управляет." на мой взгляд совершенно не верно. Оно исходит из реализации, а не из функциональности. Основное свойство встраиваемой системы - объектная ориентированность реализации аппаратного узла, т.е. ВС это "чёрный ящик" обеспечивающий заданную функциональность, предоставляющий внешний интерфейс контроля и управления, отвязанный от аппаратных особенностей и пригодный, в большинстве случаев, к относительно безболезненному встраиванию в сложные иерархические системы. Пример: "голова" топливораздаточной колонки (ТРК). Подключается к рабочему месту оператора по стандартному соединению, скажем, RS232 или USB, и выполняет команды (набор условный) "задать дозу", "начать налив с остановкой по дозе (стоимость или объём)", "останов", "калибровка датчика объёма". При этом разработчика рабочего места оператора не интересует какой тип двигателя стоит в ТРК - постоянного тока или асинхронный, какой тип датчика применяется, как налитый объём выводится на индикатор покупателя и т.д. Своим появлением ВС обязаны общей тенденции в развитии инженерного дела - делению устройства на функционально законченые блоки, допускающие повторное использование в других устройствах аналогичного назначения (наследование ?) и пригодные для параллельной разработки (глобализация и интенсификация). Этот принцип реализовывался и раньше, но появление микропроцессоров позволило радикально изменить подход к управлению аппаратурой и её разработке. Вместо жёстких механических систем (см. швейную машинку Зингер) перейти к управлению по принципу обратной связи - контроль вторичных параметров и внесение корректирующего воздействия в работу устройства. Повсеместный переход на принципы математического моделирования позволил перенести основной упор с электронных принципов управления на программные, что радикально сказалось на стоимости разработки и явилось причиной появления термина "встраиваемые системы". (Лирическое отступление: в 1997 году, пишучи резюме, из выпендрёжных соображений, я определил самого себя системным инженером. Термин ВС и "системный инженер" тогда ещё отсутствовали.) Основные направлени развития современных встраиваемых систем по степени привязанности к электронике. Перечислю основные направления развития ВС: устройства цифровой обработки информации, коммуникационные устройства, системы управления аппаратурой и измерительные системы. Устройства цифровой обработки - экспандеры/компрессоры звука и обработки изображений. Ориентированы на обработку потока цифровой информации. Малая зависимость от аппаратной части или возможность хорошего разделения аппаратной и программной частей устройства. Интенсивное использования принципов математической обработки. Реализуются, как правило, на специализированных процессорах - DSP (digital signal processor), имеющих специальные команды вычислений с фиксированной или плавающей точкой. Коммуникационные устройства - маршрутиризаторы, шлюзы, модемы. Условная зависимость от аппаратуры. Высокая зависимость от коммуникационных протоколов. Ориентированы на своевременную и надёжную передачу информации. Конкретные требования сильно зависят от скоростей и сред передачи. Например, беспроводная передача требует знаний дискретной математики, принципов контроля целостности и восстановления информации. Берясь за работу с коммуникационными устройствами, вы должны знать, что означают термины CAN, TCP/IP, SPI, USB, и уметь работать с ними на уровне пакетов. Конкретный набор интерфейсов перечисляется потенциальным работодателем ибо всё знать невозможно. Системы управления аппаратурой - управление асинхронными, шаговыми и др. двигателями, пускателями и т.д. Математические требования ниже, чем в первых двух категориях. Часто они ограничиваются умением спроектировать программный автомат. Возможно хорошее разделение программной и аппаратной частей, но требуется приличное знание принципов работы аппаратной части. Асинхронный двигатель требует совершенно отличных от шагового приёмов управления. Другими словами, вам желательно знать принципы построения мостовых преобразователей (электроника), но вы обязаны знать векторные принципы управления (асинхронные двигатели - математика). Опять же, конкретный набор знаний определяется требованиями к соискателю. Измерительные системы - системы завязанные на преобразование физических величин. Требуют интенсивных знаний аппаратной части и принципов построения измерительных систем (шумы, точность и т.д.). Лезть в эту сферу, не имея знаний электроники на сколь-нибудь приличном уровне, - чистая авантюра. Мозги встраиваемых систем. В любой современной ВС присутствует процессор, реализующий функцию программного автомата. Рассмотрим наиболее представительные архитектуры. 8-и разрядные. С них всё начиналось. Основные представители MCS51(Intel), HC08(Freescale formely Motorola), PIC(Microchip) и AVR(Atmel). MCS51. Архитектура стала классикой. Многие книги для новичков содержат её детальное описание. Большой выбор фирм-производителей. Широкая гамма кристаллов со всевозможной периферией. Высокая степень совместимости по базовому набору аппаратных средств (таймеров-счётчиков, коммуникационных портов). Звание state-of-the-art сыграло с семейством злую шутку - аппликейшены для MCS51 есть, но гораздо меньше, чем можно ожидать от архитектуры с 29 летней историей - чего о них писать, если их и так все знают. Современные клоны, в отличие от оригинальной реализации, содержат поддержку внутрисхемной отладки. HC(S)08(Freescale) Столь же старое и заслуженное семейство, как и предыдущее, но выпускается только фирмой-разработчиком. Это с одной стороны плюс - изучив один кристалл, вы получаете знания, применимые ко всем остальным, с другой стороны минус - доступность, стоимость, средства разработки. Впрочем, сейчас минусы почти исчезли. Очень богатая периферия. Много примеров по применению. Основная среда разработки от самого Freescale, что есть большой плюс, на мой взгляд. На данный момент модифицировано до семейства HCS08, содержащего в ядре поддержку внутрисхемного отладчика и несколько дополнительных команд поддержки отладки. PIC(Microchip) Очень распространённое семейство. Ранее позиционировался, как процессор начального уровня для людей без специальной подготовки. На данный момент претендует на звание серьёзного чипа. Очень плохая архитектура. Кажущееся противоречие (плохость и распространённость) объясняется политикой фирмы-разработчика - агрессивный маркетинг, дистрибьюторская политика (от одной штуки) и стоимость. Одни из самых дешёвых кристаллов и средств разработки. Очень богатый набор периферии. Масса библиотек и примеров рабочего кода от производителя, включающего драйвера для операционок. Ранее считался самым лояльным к плохой схемотехнике процессором. С увеличением сложности и разнообразия периферии и, соответственно, переходом на меньшие проектные нормы производства кристаллов подобное преимущество утерял. Возможно самый большой набор примеров по применению от фирмы. Примеры очень хорошие - весьма информативны и содержат много сопроводительной документации, имеющей общеобразовательное значение (положение кристалла для начального обучения обязывает). Самое большое количество книг, использующих данный процессор в качестве примера. AVR(Atmel) На мой взгляд, не совсем (совсем не) удачная попытка улучшить архитектуру MCS51. Наравне с PIC, очень распространён, как процессор начального уровня, и по тем же причинам. Ранее считался чувствительным к плохой схемотехнике. На данный момент выправился, вроде. Ввиду вычислительной слабости все 8-разрядники позиционируются, как процессоры непосредственного управления аппаратурой и требуют знаний электроники. Вам они вряд ли подойдут. С другой стороны, у них очень низкий стартовый порог - незначительный объём документации по архитектуре, огромное количество целевого кода, форумов и т.д. 16-разрядные. 8086, MSP430(Texas Instruments), HC12. HC12 малораспространён и мне не известен. MSP430 Наследник архитектуры PDP. TI её зачем-то подрихтовал, но что есть, то есть. Основные достоинства: ортогональная система команд и сверхмалое потребление. Достаточно дорог, если сравнивать только соотношение цена/производительность. Много документации и рекомендаций по применению. Очень мало сообщений о проблемах в работе. Может быть потому, что занимаются им обычно довольно грамотные люди (не новички). Я сам пользовал его с 2001 до настоящего момента, но настоятельная необходимость работать с интерфейсами CAN, LIN и USB, отсутствующими (sic!) у представителей семейства, заставляет меня переходить на ColdFire. Умеренная вычислительная мощность, умеренный объём документации по архитектуре. Много примеров кода. Хороший старт. 32-разрядные. Современный мэйнстрим. ARM(ARM), x86(Intel), TMS320(Texas Instruments), ColdFire(Freescale). ARM Один из самых интенсивно используемых 32-разрядных процессоров для встраиваемых применений. Компания-разработчик вычислительного ядра является fabless фирмой. Её бизнес - лицензирование своего ядра сторонним производителям кристаллов. Распространённость, по видимому, имеет ту же природу, что и распространённость MS-DOS - бросовые деньги за лицензию. Выпускается всеми кому не лень - NXP(Philips), Freescale, TI, Atmel, Intel... У стороннего наблюдателя это порождает ложное чувство широкой совместимости программных решений под ARM, что совершенно не верно. Дело в том, что процессоры разных производителей действительно совместимы по вычислительному ядру (системе команд и отладочному порту) - предмету лицензионного соглашения, но всё остальное у них совершенно различно. Каждый производитель лепит свой набор периферии, совместимый в лучшем случае с соседними чипами серии, но никогда с периферией конкурентов. Как результат, переносимость программ, написаных на Си близка к нулю из-за отсутствия стандартизации периферийного интерфейса. Это единственный чип имеющий софтовую поддержку от Microsoft (среда разработки и операционка), что, безусловно, говорит в его пользу. С точки зрения программиста на ассемблере, данная архитектура - не лучший выбор. Система команд содержит только команды загрузки/выгрузки в память. Никаких других операций с переменными в памяти не предусмотрено. Например, для того чтобы провести операцию сравнения двух переменных вы должны загрузить обе в регистры процессора и затем провести операцию сравнения. Отладочный интерфейс, входящий в состав ядра, стандартизован, что определяет универсальность отладочных средств разных производителей и их дешевизну. Много документации и рекомендаций по применению. Самый дешёвый и распространённый 32-разрядник. х86 С началом массового производства ядра Atom (Intel) современное засилье ARMов может быть поколеблено. Интел, похоже, решил серьёзно взяться за данный сегмент рынка. Остальное сами знаете. TMS320 DSP и этим всё сказано. Семейство включает х2000 - контроллеры без специализированных команд работы с фиксированной или плавающей точкой, х5000 - команды с фиксированной точкой, х6000 - команды с фиксированной и плавающей точкой и OMAP - ARM ядро и х6000 сопроцессор. Ориентирован на цифровую обработку сигналов. Производится только Тексасом. Очень дорогие аппаратные средства разработки, как отладочные платы, так и аппаратные дебаггеры. Богатый набор периферии. Скромный для столь мощного семейства набор аппликейшенов. Бесплатный набор библиотек и HAL (hardware abstraction layer - система драйверов периферии) т.н. "DSP BIOS" от Тексаса. Большой набор коммерческих библиотек сторонних производителей для всех случаев жизни и задорого. ColdFire(Freescale) 32-разрядный наследник архитектуры PDP. Широкая номенклатура чипов с самой разнообразной периферией и сочетаниями интерфейсов. Кризис заставляет Freescale, разработчика и единственного производителя кристаллов, интенсифицировать работу с российским рынком. Микросхемы становятся доступнее, в т.ч. по цене. Архитектура - само совершенство (на мой взгляд, конечно), что позволяет надеяться на постепенное увеличение занимаемой ею доли рынка. Появление версии ядра V1 - Flexis, полностью совместимого по набору периферии, разводке кристалла (!) и отладочному интерфейсу с семейством 908Sx (HCS08), позволяет переключаться между 8-разрядным малопотребляющим и 32-разрядным высокопроизводительным ядрами без внесения изменений в схемотехнику устройства и топологию печатной платы. Самое перспективное направление для первоначального вхождения в тему. Серьёзный недостаток - очень большой объём документации, требующий усвоения до начала работы. Сложность сред разработки. Общие требования к инженеру-проектировщику встраиваемых систем. Основное требование - вы должны вести разработку с уровня системы. Системный инженер это в первую очередь системный архитектор. Он должен знать из чего состоит устройство и принципы работы этого "чего". Здесь очень трудно обойтись без знаний электроники и принципов работы "железа". Первые два типа встраиваемых систем (исключая wireless) - наименее аппаратно зависимы. Современная тенденция в разработке - разделение труда системного архитектора, электронщика, трассировщика печатных плат и программиста, но иметь элементарные сведения о работе сослуживцев и соратников необходимо. Необходимые специализированные знания можно приобрести, изучая предлагаемые производителями рекомендаций по применению и примеры рабочего кода. Наверное, больше ничего определённого на эту тему сказать нельзя - всё сильно зависит от поставленной задачи. Как начать ? Следует заметить, что производители чипов думают на эту тему (особенно в последнее время) и начинающий эмбеддер не оказывается в положении слепого щенка на середине пруда. Под любое семейство производится огромное количество плат начального изучения, включающих в себя собственно плату с процессором и набором источников тестовых воздействий (потенциометры, кнопки и т.д.), исполнительных устройств (светодиодов, индикаторов) и набора внешних интерфейсов (RS232, USB), а также (но не всегда) минимальный набор бесплатного софта. Состав периферийных устройств ограничен целевым процессором, что естественно. Цены зависят от процессора и периферии - от $50 и выше. Вышеуказанные платы начального обучения могут содержать в своём составе аппаратный отладчик, а могут и не содержать - только разъём отладочного порта, т.е. надо смотреть. Но практически под любое семейство есть переходники LPT->отладочный порт по цене до $100. Кстати, появился такой переходник и для TMS320 (Olimex, до 1000р.). Наметилась тенденция к производству т.н. USB-Stick - мелкой фигни, вставляемой в USB порт, содержащей USB-отладчик, целевой процессор (как правило, самый слабый проц семейства), кнопку и светодиод. Стоит такое чудо обычно долларов 30 и является самым дешёвым способом практически изучить систему команд и базовый набор периферии целевого семейства. Что будет новым ? Первое с чем вы никогда не сталкивались, программируя по Windows на C#, - errata. Сообщения производителя о несоответствии реальных кристаллов официальной документации. Объём и степень критичности указанных ошибок зависит от производителя. Фактически, переходя в область встраиваемых систем вы начинаете работать на уровне драйверов устройств для Windows, но без жёстких требований операционной системы, и вторгаетесь в область, ранее скрытую драйверами железа и операционкой. Память. Вы привыкли к неограниченному объёму памяти, предоставляемой по первому требованию, часто столь прозрачно, что вы даже не подозреваете о работе подсистемы памяти. Во встраиваемых системах требования к программной памяти и памяти данных одни из самых критичных ограничений. Память данный исчисляется БАЙТАМИ (от десятков в слабых кристаллах), а память программ - КИЛОБАЙТАМИ (от одного килобайта в слабых кристаллах). Память. Она мало того, что небольшая, так ещё и разнотипная. Есть память программ - постоянная (её содержимое изменить нельзя или сложно). Есть память данных - обычная оперативка. Есть память типа EEPROM - постоянная память данных. В ней нельзя хранить исполняемый код, но она не меняется при выключении питания. Проблемы начинаются когда вам нужно иметь инициализированную память данных - придётся изучать прагмы компилятора, позволяющие записать нужные значения в нужный тип памяти при "прошивке" кристалла (загрузке программы через отладчик или программатор). Проблемы с памятью и её инициализацией занимают изрядную часть форумных обсуждений программных проблем. Получение помощи от участников форума. 1. Точно изложите, что конкретно вы хотите получить. 2. RTFM 3. Изложите, что конкретно вы сделали, дабы получить желаемый результат. 4. RTFM ! 5. Изложите, что детально вы получили и в чём отличие от желаемого. 6. RTFM !! 7. Отправьте сообщение на форум. Мои рекомендации. Я не люблю ARM, но вынужден заметить, что он будет самым перспективным выбором для первоначального ознакомления. Достоинство - очень большой выбор плат начального ознакомления и документации. "Недостаток" - большое разнообразие и реальная несовместимость кристаллов разных производителей.
Это я, здравствуйте. http://the-epic-file.com/bookshelf.htm