Вхождение встроенный [закрытый]

20
задан cooper 12 July 2010 в 15:38
поделиться

9 ответов

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

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

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

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

25
ответ дан 29 November 2019 в 22:38
поделиться

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

msp430

У Texas Instruments есть несколько очень недорогих USB-комплектов разработки, которые они называют EZ430 и основаны на семействе микроконтроллеров MSP430. Самый простой из них имеет msp430 f2013, который имеет 2 Кбайт программной флеш-памяти, 3х128 байтов используемой пользовательской флеш-памяти (существует еще 128-байтовая страница, но она особенная), 128 байт ОЗУ (да, 128 байт, но этого достаточно для многих вещей. ) и 16 регистров ЦП (некоторые из них предназначены для специального назначения, например, указатель стека, указатель инструкции, регистр состояния и, возможно, еще один или два). MSP430 также имеет несколько специальных функциональных регистров с отображением памяти, которые используются для настройки и управления встроенными периферийными устройствами. MSP430 - это процессоры фон Ньюмана, поэтому все находится в одном адресном пространстве. Они стоят около 20 долларов США как для программиста, так и для съемного вкладыша (печатной платы), содержащего msp430 f2013. Примерно за 10 долларов вы можете получить 3 сменные вкладки с msp430 2012, который совместим по выводам с 2013 (в основном) и имеет несколько различных периферийных устройств. На этих вкладках есть светодиод, кнопка и несколько больших переходных отверстий (отверстий в плате), которые подключены к контакту процессора.В эти переходные отверстия легко впаивать провода, даже если вы никогда раньше не паяли - из-за капиллярного действия переходные отверстия просто всасывают расплавленный припой, и пока он горячий, вы можете просто воткнуть туда конец провода.

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

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

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

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

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

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

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

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

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

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

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

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

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

MIPS - Очень RISC-процессор. Самый РИСКОВЫЙ.

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

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

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

16
ответ дан 29 November 2019 в 22:38
поделиться

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

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

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

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

Embedded, как и большинство программирования, обычно вращается вокруг:

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

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

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

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

Удачи!

4
ответ дан 29 November 2019 в 22:38
поделиться

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

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

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

EDIT: ПРИЧИНА, по которой рекомендуется использовать C или C++, заключается в том, что сам C был разработан для системного программирования. C++ сохраняет все свои преимущества, но добавляет возможности для ООП-программирования. В некоторых системах может потребоваться ASM. Однако многие производители микросхем, такие как TI, предоставляют инструменты, позволяющие сделать всю систему на C++. :END EDIT

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

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). На простой системе без ОС это может быть все. В системе на базе RTOS у вас может быть несколько задач, которые выглядят примерно так же, как эта, но передают данные туда и обратно между задачами.

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

Основные концепции работы с аппаратным обеспечением или драйверами устройств (с которыми вы можете поэкспериментировать, взломав код драйвера устройства Linux, который находится в свободном доступе), большинство аппаратных средств выглядит для программиста как просто еще один адрес памяти. Это называется "Memory mapped 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

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

EDIT:

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

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

11
ответ дан 29 November 2019 в 22:38
поделиться

Представьте, что ваш встроенный контроллер находится в отключенной цепи ...

  1. Подается питание Vcc, и схема сброса выдает сигнал сброс .

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

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

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

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

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

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

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

8
ответ дан 29 November 2019 в 22:38
поделиться

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

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

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

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

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

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

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

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

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

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

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

2
ответ дан 29 November 2019 в 22:38
поделиться
  1. Область применения встраиваемых вычислений стала очень широкой, поэтому ответы в некоторой степени зависят от того, на какое устройство вы нацелились. С одной стороны, существуют 8-битные контроллеры с памятью всего в несколько КБ, которые обычно программируются полностью на ассемблере или C. С другой стороны, процессоры, такие как в вашем роутере, достаточно мощные (200 МГц и несколько МБ оперативной памяти - не редкость) и часто работают под управлением ОС типа Linux, что означает, что вы можете использовать практически любой язык, хотя C и Java являются наиболее распространенными.

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

3
ответ дан 29 November 2019 в 22:38
поделиться

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

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

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

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

1
ответ дан 29 November 2019 в 22:38
поделиться
  • C и сборка, специфичная для вашего чипа.

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

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

1
ответ дан 29 November 2019 в 22:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: