Подтвердить что ты не робот

Как попасть в встроенный

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

  • Какой хороший язык заворачивать голову вокруг встроенного, не вкладывая слишком много времени, опираясь на встроенный язык? Я больше всего знаком с PHP, Java, Actionscript, но, к сожалению, знаю очень мало C. Я помню, где-то читал, что кто-то использовал PERL для программирования встроенных систем, но не уверен, что это действительно возможно.

  • Можно ли учиться без необходимости покупать чипы и т.д. с помощью тренажеров или таких?

  • Может ли кто-то рекомендовать упрощенную дорожную карту, чтобы показать, как можно попасть на сайт? Я немного не уверен, где даже начать.

4b9b3361

Ответ 1

Вам нужно знать C (но каждый программист должен знать C!)

На большинстве этих платформ есть симулятор /emualtor, но поскольку необходимо изучить реальные приложения и реальные проблемы (которые связаны с проблемами реального времени в реальном времени), тогда вам нужна реальная плата.

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

Самый простой способ - это, вероятно, Arduino, возможно, более профессионально, но немного сложнее стартовая панель MSP430

Ответ 2

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

MSP430

Texas Instruments имеет несколько очень недорогих комплектов для разработки USB, которые они называют EZ430, и основаны на семействе микроконтроллеров MSP430. Простейший имеет msp430 f2013, который имеет 2K флэш-пространства программы, 3x128 байт используемой пользовательской flash (еще одна 128-байтная страница существует, но она особенная), 128 байт ОЗУ (да, 128 байт, но этого достаточно для многих вещей ) и 16 регистров CPU (некоторые из них являются особыми целями, такими как указатель стека, указатель инструкций, регистр состояния и, возможно, один или два). MSP430 также имеют несколько специальных регистров функций с памятью, которые используются для настройки и управления встроенными периферийными устройствами. MSP430 - это процессоры von Newman, поэтому все живет в одном адресном пространстве. Они стоят около $20us как для программиста, так и для съемной вкладки (pc-плата), содержащей msp430 f2013. Примерно за $10us вы можете получить 3 замещающих вкладки с msp430 2012, который совместим с принтером в 2013 году (в основном) и имеет несколько разных периферийных устройств. На этих вкладках есть светодиод, кнопка и несколько больших отверстий (отверстия в ПК-плате), которые подключены к выходу процессора. Эти пузырьки легко припаять провода, даже если вы никогда не паяли до этого - из-за капиллярного действия виски просто всасывают расплавленный припой, и, хотя он горячий, вы можете просто пробить конец провода.

У них также есть еще несколько похожих комплектов с радиостанциями 802.15.4. Даже если вас не интересует радио, вас все равно может заинтересовать их, потому что их программист также имеет UART, снятый со съемной вкладки и совместимый с вкладками, используемыми в других наборах, упомянутых выше. Эти наборы также содержат по крайней мере одну дополнительную программируемую плату и аккумуляторную батарею. (один из этих наборов может содержать больше, но у меня нет моего со мной прямо сейчас, и я не собираюсь его искать).

У них также есть комплект, который имеет программируемые часы в качестве целевой платформы. У меня никогда не было ни одного из них, но у них есть дисплей, акселерометры и несколько других интересных вещей, но это может сорвать вас для вашего первого проекта. Я бы предложил один из предыдущих наборов, чтобы вы начали работу с MSP430.

Вы можете получить бесплатные компиляторы C и среды разработки для MSP430 в виде кикстарта IAR Embedded Workbench (ограниченное программным пространством 4 kb) IDE, Code Composer Studio (также ограниченный размер программы, но более высокий предел, я думаю) и gcc/gdb для MSP430. IAR kickstart довольно легко начать быстро, хотя и не идеально. Вы можете обнаружить, что вам нужно закрыть его, отключить USB EZ430, перезапустить IAR и снова подключиться, чтобы снова запустить его. Или, может быть, какой-то другой порядок будет работать лучше для вас.

TI также предоставляет множество примеров в сильно именованных файлах (все их загружаемые файлы выходят из своего пути, чтобы их было плохо названо). Будьте осторожны - аналогичные MSP430 могут иметь разные интерфейсы регистра управления устройствами для аналогичных периферийных устройств, что может сбить с толку. Убедитесь, что любой документ или пример, который вы читаете, действительно применимы к используемому микроконтроллеру.

другие небольшие системы

Есть много других семейств и наборов процессоров, с которыми вы можете пойти, и вам, вероятно, по крайней мере немного узнать о них.

AVR - архитектура Atmel 8/16 бит Гарварда. Гарвард ссылается на отдельные адресные пространства для кода и рабочей памяти. Он имеет 32 8-битных регистра, некоторые из которых могут использоваться парами как 16-битные регистры. Это очень популярный и довольно классный процессор. У некоторых из самых маленьких есть регистры без дополнительной памяти, что страшно. Atmel также имеет AVR32, который не является тем же самым, что и AVR. Если вы не используете существующий загрузчик, способный загружать новый код, вам нужно будет получить модуль JTAG для этого.

8051 - Это старый, как холмы и боль в прикладе, чтобы использовать, пока вы, наконец, не поймете это. Это 8/16 бит процессор, с гораздо большим ограничением на то, как вы собираетесь выполнять 16-битную математику и имеет только одну пару регистров, которые могут действовать как указатель. Он имеет 3 отдельных адресных пространства (стек, глобальную память и код) и множество нечетных (по сравнению с другими архитектурами) функций. Материал низкого уровня может не означать многого для вас, если вы программируете на C, за исключением того, что очень простые операции C могут превратиться в гораздо больше кода, чем вы думали. Вы не хотите начинать с одного из них, скорее всего.

пропеллер - Parallax очень интересный многоядерный процессор, который очень отличается от других процессоров. Он имеет несколько ядер, которые действуют в основном независимо и могут использоваться для имитации периферийных устройств или выполнения более традиционных вычислительных задач. Я никогда не использовал один из них, хотя хотел бы. Просто никогда не было задачи, которая, казалось, соответствовала ей. У них есть свой язык высокого уровня для их программирования, а также язык ассемблера процессора.

более крупные системы

После того, как вы выйдете из 8/16/24-разрядных процессоров, вы начнете размывать линии между программированием на уровне встроенного и настольного уровней, даже если это технически встроено.

AVR32 - Есть 2 основных версии этих. Один из них - архитектура Гарварда, а другой - фон Ньюман. Версия von Newman по сути является лучшей ARM, чем ARM, но она не так популярна, как ARM. Насколько я могу судить, он был разработан с учетом "запуска Linux", хотя и не привязан к нему безумным способом. Раньше вы могли получать дешевые платы разработки для них, а код часто почти так же легко загружать, как копирование файлов с одного компьютера на другой, хотя вы, вероятно, будете использовать uboot и tftp для выполнения некоторых задач. JTAG нужен только тогда, когда вы загружаете загрузчик. Я думаю, что все они поддерживают ускорение JAVA. www.AVR32.org

ARM - самый популярный встроенный процессор. Там много версий. У некоторых нет MMU (блок управления памятью), а некоторые - нет. Слишком много о них говорить. В некоторых версиях есть встроенное ускорение JAVA, хотя я думаю, что владельцы ARM не могут свободно рассказать все подробности о том, как использовать его, поэтому вам нужно найти JVM, который знает, как его использовать. Многие производители делают их, включая Atmel, Freescale, Intel и многие другие.

MIPS - очень RISC-процессор. RISCiest.

Есть много других.

Стили программирования

Я мог бы написать 3 книги по этому поводу, но общее правило делает вещи такими же простыми, как приложение может позволить вам. Исключением является то, что если вы можете легко использовать операционную систему, вы можете использовать ее, если она упрощает вашу задачу.

Ответ 3

Первое, что вам нужно знать при ответе на этот вопрос: "ЧТО ТАКОЕ" - встроенная система? ОБЩЕЕ определение - это компьютерная система, которая посвящена одной конкретной цели. Это не ограничивает тип оборудования, которое вы можете использовать, поскольку на самом деле "встроенные ПК" использовались в течение многих лет. Операционная система QNX реального времени существует с начала 80-х годов и уже много лет используется на промышленных ПК для встроенных приложений. Я лично использовал в системах управления для толстолистовых сталей мельницы XRAY. С другой стороны, я в настоящее время использую TI DSP без поддержки ОС и использую только 256K Ram. Другим примером будет ключевой фоб для вашего автомобиля. Старые использовали микроконтроллер PIC от Microchip. (Это фактически название компании.)

Некоторые люди называют IPhone встроенной системой, но из-за того, что вы можете загружать приложения, чтобы делать практически все, что я имею в виду, это карманный компьютер с возможностями телефона. Сотовый телефон OLD DUMB, который является телефоном, а не PDA, является встроенной системой. Это немного философия.

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

EDIT: REASON, почему рекомендуется C или С++, сам C был разработан для программирования систем. С++ поддерживает все преимущества, но добавляет возможности для программирования ООП. Некоторые ASM могут потребоваться в некоторых системах. Однако многие поставщики чипов, такие как TI, предоставляют инструменты, которые в основном позволяют делать всю вашу систему на С++. : END EDIT

ALOT простых встроенных систем выглядит примерно так:

While(true) // LOOP FOREVER... There is no command prompt
{
  // Typically you want I/O to occur on fixed "timebase."
  wait(timerTick);
  readDigitalIO(&dioStruct);
  readAnalogIO(&aioStruct);

  // Combine current system state with input values
  // and do some useful calculations.  (i.e. Analog input to temperature calc)
  Process(dioStruct,aioStruct,&CurrentState);

  // This can be a serial output/audio buzzer/leds/motor controller
  // or Whatever the system REQUIREMENT call for.
  driveOutputs(CurrentState);

  // The watchdog timer resets your system if it gets stuck.
  petWatchDogTimer();
}

Здесь нет ничего, что вы не можете сделать с помощью ПК. (Ну, ПК, который все еще имеет параллельный порт в любом случае. Это более или менее просто порт DIO.) В простой системе без os это может быть все, что есть. В системе, основанной на RTOS, у вас может быть несколько задач, которые выглядят несколько симулятивно, но передавайте данные между задачами.

Интересные части приходят, когда вам нужно взаимодействовать с оборудованием, которое у вас есть, первая работа, которую я закончил в колледже, заключалась в написании драйвера устройства для платы сбора данных под QNX.

Основные понятия работы с оборудованием или драйверами устройств (которые вы можете испытать, взломав код диска с Linux-устройством, который свободно доступен.), большинство аппаратных средств обращается к программисту как к другому адресу памяти. Это называется "I/O с отображением памяти". Что это значит? Позволяет использовать последовательный порт в качестве примера:

// Serial port registers definition:
typedef struct  
{
   unsigned int control;  // Control bits for the port.
   unsigned int baudDiv;  // Baud rate divider.
   unsigned int status;   // READ Status bits/ Write resets fifos;
   char TXdata;           // The head of the hardware TX fifo.
   char RXdata;           // The tail of the hardware RX filo.
} serRegs;
// Using the volatile keyword to indicate the hardware can change the value
// independantly from the software.
volatile serRegs *Ser1 = (serRegs *)0x8000;  // Hardware exists at a specific location in memory.
volatile serRegs *Ser2 = (serRegs *)0x8010;  // Hardware exists at a specific location in memory.

// Bits bits 15-12 enable interupts and select interupt vector,
//      bits 11-8 enable,bits 7-4 parity,bits 3-0 stop bits.
Ser1->status = 1; // Reset fifos.  
Ser1->baudDiv = CLOCKVALUE / 9600;  // Set the baudrate 9600;
Ser1->control = 0x1801; // Enable, 8 data, no parity, 1 stop bit.
// Write out a "OK\r\n" message; (Normally this would be a loop.)
Ser1->Txdata = 'O';  // First byte in fifo Transmission starts.
Ser1->Txdata = 'K';  // Second byte in fifo still transmitting first byte
Ser1->Txdata = '\r'; // Third byte in fifo still transmitting first byte
Ser1->Txdata = '\n'; // Fouth byte in fifo still transmitting first byte

Обычно у вас есть функция или обработчик прерываний для обработки TXing данных, но, например, я хотел бы указать, что аппаратное обеспечение работает, пока программное обеспечение продолжает работать. В основном аппаратное обеспечение работает, как, я пишу значение для адреса, а "STUFF" происходит независимо от программного обеспечения. Это, пожалуй, одна из ключевых концепций встроенного программирования, как заставить компьютер влиять на изменение в реальном мире.

EDIT:

Если вы действительно хотите получить дешевую плату, текущая тенденция от разработчиков Micro заключается в том, чтобы поместить комплект разработчика на USB-накопитель. На этой странице есть информация о нескольких версиях: от 8 бит до архитектур ARM: http://dev.emcelettronica.com/microcontrollers-usb-stick-tool

Cypress PSOC был одним из первых, кто сделал это с помощью "FirstTouch Starter Kit". PSOC - очень уникальная часть в том, что у него есть микроконтроллер и "Настраиваемые аналоговые и цифровые блоки", которые позволяют вам сбрасывать ADC, последовательный порт или цифровой ввод-вывод с помощью gui и автоматически настраивать приложение C использовать его. PSOC также доступны в DIP-пакетах, что упрощает их использование на макете прототипа.

Ответ 4

Изобразите встроенный контроллер, сидящий в выключенной цепи...

  • Напряжение Vcc подается, а схема reset сигнализирует reset.

  • Часы достигли скоростей и стабилизации напряжения, поэтому reset отменяется.

  • Теперь ваш контроллер устанавливает указатель на инструкцию "reset vector", который является физическим адресом 0xE0000000 на этом конкретном чипе. Контроллер получает команду в этом месте.

  • Прерывания отключены, и первый порядок ведения бизнеса - инициализировать регистры, такие как указатель стека. На некоторых микросхемах есть биты флагов (например, флаг направления x86), которые необходимо очистить или установить.

  • После правильной настройки регистров и битов флага становится возможным выполнение программ обработки прерываний. К настоящему моменту мы должны запустить код для определения местоположения 0xE0000072, когда мы перейдем к коду, который разрешает прерывания, сначала переключая некоторые контакты GPIO на внешний контроллер прерываний, а затем включает маски прерываний CPU.

  • В этот момент эквивалент "драйверов устройств" выполняется в виде процедур обслуживания прерываний. Предполагая, что среда C имеет библиотеку, которая соответствует интерфейсам структур данных этих программ, к настоящему времени наш код загрузчика может перейти к функции main() некоторого объектного кода C.

Другими словами, код, который привел нас к включению питания в main() и который обрабатывает низкоуровневый ввод-вывод, написан в ассемблере, свойственном выбранному чипу. Это означает, что если вы хотите быть универсальным во встроенном программировании, вы должны знать, как реализовать код сборки, начиная с вектора reset.

Реальность заключается в том, что встроенное программирование для хобби не позволяет времени для реализации всех ISR и кода загрузчика. По этой причине многие люди используют стандартные программные среды, доступные для конкретных чипов. Другие используют специальные языковые чипы, такие как BASICstamp. BASICstamp - это встроенный чип, на котором размещается интерпретатор языка BASIC. Интерпретатор и все ISR предварительно написаны для вас. Среда BASIC дает вам возможность управлять выводами ввода-вывода, считывать напряжения, все, что вы можете сделать с сборки со встроенным контроллером, но немного медленнее.

Ответ 5

Что касается языка, то C, вероятно, является самым важным языком для изучения. С Java вы должны быть в состоянии адаптироваться, но просто помните, что много Java высокого уровня не будет доступно вам. Загрузок учебников там, но я бы рекомендовал оригинальную книгу программирования C от Kernighan и Ritchie http://en.wikipedia.org/wiki/The_C_Programming_Language_(book)

Для хорошего введения в встроенный C вы можете попробовать книгу Майкла Дж. Понта:

http://www.amazon.com/Embedded-C-Michael-J-Pont/dp/020179523X

Что касается встроенной части вещей, которую вы можете начать с Microchip, среда IDE подходит для разработки с использованием разумного симулятора, а компиляторы c бесплатны для немного ограниченных компиляторов c18 и c30 студенческих изданий, установщик IDE также будет спросите, хотите ли вы установить сторонний компилятор HI-TECH C, который вы могли бы использовать. Что касается процессора, я бы рекомендовал выбрать стандартный PIC 18 серии, такой как PIC18F4520.

http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en019469&part=SW007002

Независимо от производителя чипа, вам нужно ознакомиться с таблицами данных. Вам не обязательно изучать все это сразу, но вам нужно будет это сделать!

Встроенный, как и большинство программ, имеет тенденцию вращаться вокруг:

1) инициализация ресурса, в данном случае, а не данных из хранилища данных из компьютерных регистров. Просто включите файл заголовка процессора (.h), и он позволит вам получить доступ к ним как к портам (обычно байтам) или булавкам (битам). Также микропроцессоры поставляются с полезными ресурсами на чипе, такими как таймеры, аналого-цифровые преобразователи (АЦП) и последовательные системы связи (UART). Помните, что сам чип является ресурсом и нуждается в инициализации перед чем-либо еще.

2) с использованием ресурса. C позволит вам сделать данные максимально глобальными, и каждый может получить доступ ко всем в любое время! Избегайте этого соблазна и сохраняйте его модульным, как Java поощрял вас (хотя для скорости вам может потребоваться немного ослаблять эти правила).

Но у них есть дополнительное оружие, называемое прерываниями, которые могут использоваться для обеспечения поведения в режиме реального времени. Их можно считать немного похожими на события OnClick(). Прерывания могут быть сгенерированы внешними событиями (например, кнопками или получением байта с другого устройства) и внутренними (завершены таймеры, завершены передачи, завершены преобразования АЦП). Поддерживайте процедуры обслуживания прерываний (ISR) короткими и сладкими, используйте их для обработки событий в реальном времени (например, возьмите полученный байт и сохраните его в буфере, а затем поднимите флаг), но позвольте второму коду справиться с ним (например, проверить полученный байт флаг, если он установлен, тогда прочитайте полученный байт). И помните все важные volatile для переменных, используемых в процедурах ISR и фоновых программах!

В любом случае, читайте, я рекомендую на www.ganssle.com советы в целом.

Удачи!

Ответ 6

  • Объем встроенных вычислений стал очень широким, поэтому ответы несколько зависят от того, на каком устройстве вы нацеливаетесь. С одной стороны, есть 8-битные контроллеры с только несколькими КБ памяти, обычно запрограммированные полностью в сборке или C. С другой стороны, такие процессоры, как маршрутизаторы, довольно мощные (200 МГц и несколько МБ ОЗУ не редкость) и часто запускают ОС как Linux, что означает, что вы можете использовать практически любой язык, хотя C и Java являются наиболее распространенными.

  • Лучше всего купить настоящий чип и эксперимент. Основная часть работы связана, как правило, с тем, чтобы узнать устройство и как с ним взаимодействовать, поэтому использование имитатора может привести к поражению цели.

Ответ 7

Какой хороший язык, чтобы обернуть голову вокруг встроенных, не вкладывая слишком много времени, опираясь на встроенный язык?

Как все будут предлагать: C. Теперь, в зависимости от того, насколько глубоко вы будете копаться в своей платформе выбора, вам также может понадобиться сборка, но не бойтесь этого: обычно вы будете использовать немного.

Если вы изучаете C, мое личное предложение: работайте так же, как и в сборке; язык программирования не даст вам много абстракций, поэтому подумайте об управлении памятью. Когда вы научились делать это, двигайтесь к абстракциям и живете счастливыми.

С++ также популярен на встроенных платформах, но IMHO сложно, если вы не знаете, как программировать на C, вы также можете понять, что под капотом его абстракции.

Когда вы чувствуете себя уверенно в C/С++, вы можете начать работать со встроенными операционными системами. Вы заметите, что они могут полностью отличаться от вашей ОС выбора (например, не все операционные системы имеют стандартную библиотеку C, процессы и разделение между пользовательским пространством и ядерным пространством).

Вы узнаете, как создать кросс-компилятор, как сослаться на скрипты компоновщика, трюки бинарных форматов и много классных вещей.

Для теоретической точки зрения есть много вещей: если вы изучаете Computer Science, вы можете получить степень магистра в встроенных системах.

Можно ли учиться без необходимости покупать чипы и т.д. с помощью тренажеров или таких?

Да: многие операционные системы могут запускаться на таких симуляторах, как qemu.

Может кто-то порекомендовать упрощенную дорожную карту, чтобы показать, как можно попасть на сайт? Я немного не уверен, где даже начать.

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

Ответ 8

1) В большинстве случаев для большинства и, как правило, для встроенной системы нижнего конца вам необходимо знать C.

И я по-прежнему рекомендую вам получить совет по разработке ванили, чтобы ознакомиться с потоком работы и сложной частью работы со встроенной системой, такой как отладка и кросс-компиляция. У вас возникнут проблемы, если вы будете полагаться только на эмулятор.

Вы можете попробовать The Linux Stamp, это не дорого и хорошо для новичков, но вам понадобятся некоторые предварительные знания в Linux.

2) Для высокопроизводительной встроенной системы хорошим примером является смартфон от HTC (скорость процессора может достигать 1 ГГц) или какой-то другой Android-телефон, на котором он работает быстро, и вы даже можете кодировать Java на нем.

Ответ 9

  • C и сборка, специфичная для вашего чипа.

  • Нет, вам действительно нужен настоящий чип. Симуляторы - это не настоящая вещь. Вам нужно иметь дело с дрожанием нажатия клавиш, фанкойсом напряжения и т.д.

  • Arduino - это настоящая прихоть для встроенных любителей. Лично я не большой поклонник архитектуры Гарварда. Но вы найдете для него полезные советы. Я использую XCore для моей работы над диссертацией, и я нашел, что очень легко программировать многоядерные вещи. Я предлагаю начать с AVR32 и идти оттуда.

Ответ 11

В ближайшее время корабль Доска малины Pi выглядит невероятно дешевым способом попасть в эту область.

Ответ 12

Да, Ардуино был бы способ пойти. Согласовано.. Дешево (около $20 для начала) и имеет отличный API для начала работы с функциями высокого уровня. C является обязательным, хотя, не может этого избежать. Но если вы можете программировать на других языках, все будет хорошо.

Моя рекомендация - начать покупки в http://www.sparkfun.com много примеров для работы и полезных советов о том, какие устройства покупать.