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

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

P.S.: Я надеюсь, что ответ не является языком ассемблера.

Ответы

Ответ 1

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

Ответ 2

Если вы не имеете дело с очень маленькими микроконтроллерами (например, серия RS08), C на сегодняшний день является предпочтительным языком. Познакомиться с C, понять функциональность, как volatile и const. Также понимайте архитектуру - что эффективно, а что нет, что может делать процессор. Они будут сильно отличаться от среды рабочего стола. Учитесь любить stdint.h.

Вы столкнетесь с С++ (или ограниченным подмножеством) по мере увеличения масштабов проектов.

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

Ответ 3

Какие "контрастные" взгляды вы слышали? В какой-то степени это будет зависеть от микроконтроллера и приложения. Однако C доступен практически для всех архитектур (я стесняюсь говорить все, но, вероятно, все, с чем вы когда-либо столкнетесь); так что только в этом вопросе обучение C даст вам наибольший охват.

Для всех архитектур доступность ассемблера и компилятора C в значительной степени задана. Для 32-битной и самой 16-разрядной архитектуры С++ также будет доступна. Известные исключения, с которыми я столкнулся, - это части Microchip PIC24/dsPIC, для которых С++ не поддерживается компилятором на основе GNU на базе Microchip (хотя сторонние компиляторы могут это сделать).

Пока существуют компиляторы С++ для 8-битного микроконтроллера С++ не является повсеместным на таких платформах, и часто компиляторы являются подмножествами полного языка. Для типов (или, более конкретно, размера) приложения, для которого обычно используется 8-разрядный, С++ может быть полезен, но не в той степени, в которой он находится в гораздо более крупных приложениях, поэтому C обычно является адекватным.

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

Точка о C (и С++) заключается в том, что это язык системного уровня; он будет работать на вашем микропроцессоре без дополнительной поддержки, за исключением очень простого запуска во время запуска для инициализации процессора (и, возможно, внешнего SDRAM), инициализации статических данных, установки стека, а в случае С++ - использования статических конструкторов. Вот почему наряду с целевым ассемблером он используется для создания операционных систем и ядер - для его работы не требуется никакая операционная система или ядро.

Одна из причин, по которой я предположил, что это может зависеть от микроконтроллера, заключается в том, что, если, например, это ARM9 с несколькими Мбайтами внешней SDRAM и, по крайней мере, говорит 4Mb Flash (также обычно внешняя память занимает много die space), тогда вы можете запустить на нем "тяжеловесную" ОС, такую ​​как Linux, WinCE или Symbian, или даже большие RTOS, такие как QNX или VxWorks. Тогда ваш выбор языка (как только вы заработаете ОС) будет зависеть от ОС, хотя для приложений реального времени C и С++ все еще будут доминировать (или часто Ada в военной, авионике и некоторых транспортных приложениях).

Для приложений среднего размера - несколько сотен килобайт кода и пространства данных - возможно выполнение С# на платформе .NET-Micro; Однако я сидел в презентации этого на выставке Embedded Systems Show в Великобритании несколько лет назад, сразу после того, как она была запущена; когда я задал вопрос "но это в режиме реального времени", и ему сказали: "Вам не нужен WinCE для этого", из большой аудитории раздался вздох и стон, и некоторые перестали тратить свое время на презентацию (включая меня).

Поэтому меня все еще интересуют "контрастные" мнения, которые вы слышали; потому что, хотя можно использовать другие языки; ответ на ваш вопрос:

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

тогда окончательный ответ - C; по причинам, которые я дал. Для тех, кто может выбрать, чтобы оспаривать это утверждение вот статистика (обратите внимание на другой метод опроса после 2004 года, описанный в тексте). Однако, чтобы добавить к коллекции альтернативы, я однажды провел два года программирования в Forth на встроенных системах, и я знаю людей, которые все еще используют это, но это немного ниша.

Ответ 4

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

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

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

Ответ 5

Что касается ассемблера:

  • Предпочитайте C/С++ над ассемблером как можно больше. Вы получите лучшую производительность, написав как можно больше на C или С++. Это включает в себя возможность запуска некоторых из вашего кода на ПК, что может помочь в разработке кода более высокого уровня (функции уровня приложения).
  • На многих встроенных платформах хорошо иметь кого-то из проекта, который удобен с небольшим ассемблером. В основном, чтобы получить код запуска, а прерывания идут красиво и, возможно, функции включения/отключения прерываний. Это не то же самое, что знать это действительно тщательно - просто базовое рабочее знание будет достаточным.
  • Если вы переносите ОСРВ (например, μC/OS- II) на новую платформу, вам нужно будет больше узнать об ассемблере. Но, надеюсь, ваши RTOS уже хорошо поддерживают вашу платформу.
  • Если вы настаиваете на ограничении производительности процессора, вам, вероятно, нужно знать ассемблер более тщательно. Но, надеюсь, вы не слишком сильно нажимаете ограничения производительности, потому что это может быть тягой к жизнеспособности проекта.
  • Если вы пишете DSP, вам, вероятно, достаточно хорошо знать ассемблер DSP.

Ответ 6

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

Многие микроконтроллеры настолько изворотливы, что им действительно требуются собственные нестандартные диалекты C, такие как SDCC для 8051, которые предотвращают использование стандартных инструментов (таких как библиотеки кода или инструменты статического анализа) даже для кода, не связанного с аппаратными функциями, Интерпретаторы часто используются, чтобы скрыть такие причуды низкого уровня.

Прошивка переводчика также доступна для некоторых микроконтроллеров. Например, BASIC на ранних микроконтроллерах Intel 8052 [4]; BASIC и FORTH на Zilog Z8 [5], а также некоторые современные устройства. Обычно эти интерпретаторы поддерживают интерактивное программирование.

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

Ответ 7

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

Ответ 8

И не забывайте о VHDL.

Ответ 9

Для микроконтроллеров ассемблер приходит до C. До того, как ARM начали продвигаться на этот рынок, компиляторы были ужасны, а память и ROM действительно крошечные. Недостаточно ресурсов или общности для переноса вашего кода, поэтому запись на C для переносимости не имеет смысла.

Некоторые ассемблеры микроконтроллеров менее желательны, и ARM берет на себя этот рынок. За меньшие деньги, меньше энергии и меньше занимаемой площади вы можете иметь 32-разрядный процессор с большим количеством ресурсов. Это имеет смысл. Многое, если ваш код по-прежнему не будет порт, но вы, вероятно, можете пройти с помощью C.

Нижняя строка, ассемблер и C. Если они рекламируют BASIC или Java или что-то в этом роде, отметьте эту компанию в своем "черном списке" и двигайтесь дальше. Были там, сделали это, есть шрамы, чтобы доказать это.

Ответ 10

Первая сборка. После C.

Я думаю, что кто знает, что Assembly и C лучше, чем кто знает только C.