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

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

P.S .: Надеюсь, ответ не на ассемблере.


person harry    schedule 21.12.2009    source источник
comment
Собрать ... подожди ...   -  person Pierreten    schedule 21.12.2009
comment
Что ж, трудно сказать ... учитывая, что микроконтроллеры - это устройства относительно низкого уровня, которые обычно имеют непереносимые наборы команд. В какую семью ты попадаешь?   -  person futureelite7    schedule 21.12.2009
comment
Я пытался попасть в семью по имени Брэди, но это было давно. ;-)   -  person Thomas Matthews    schedule 22.12.2009
comment
если вы не разрабатываете микроконтроллер, а не микроконтроллер, я не думаю, что вам нужен Verilog   -  person jk.    schedule 22.12.2009
comment
См. stackoverflow.com/questions/596929/ для интересного обзора не-C вариантов.   -  person Craig McQueen    schedule 24.12.2009
comment
Не могу дождаться, чтобы научиться сборке (это такой низкий уровень!), И скоро мы будем учиться программировать микроконтроллеры в школе! Йиппи!   -  person Chakotay    schedule 23.08.2014


Ответы (10)


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

person Greg Hewgill    schedule 21.12.2009
comment
Хороший короткий прямой ответ на вопрос (не такой, как у меня!). - person Clifford; 22.12.2009
comment
Вы должны иметь общее представление о том, как C переводится на ассемблер, и о любых особенностях соответствующей платформы - например, вы можете написать код указателя на структуру для PIC, но это будет отстой. Умение читать сборку поможет в отладке. Вам редко нужно писать на ассемблере, C обеспечивает достаточно простой доступ. - person pjc50; 29.01.2010

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

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

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

person Yann Ramin    schedule 21.12.2009
comment
stdint.h хорош. Специально для тестирования вашего кода на ПК. - person Craig McQueen; 21.12.2009

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

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

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

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

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

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

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

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

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

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

person Clifford    schedule 22.12.2009

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

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

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

person joshperry    schedule 21.12.2009

По поводу ассемблера:

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

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

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

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

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

person Abhineet    schedule 21.12.2009

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

person Vijay    schedule 21.12.2009
comment
За 20 лет работы в качестве разработчика встроенных систем я не изучил полный набор инструкций ассемблера со времен 8051. Вам нужно знать, что такое ассемблер, и, возможно, иногда нужно уметь читать и понимать инструкции установить вручную, но я бы не стал особо подчеркивать это требование, если только вам не нужно писать код запуска C-runtime с нуля (и нечасто существующий пример недоступен). - person Clifford; 22.12.2009
comment
Сборка больше не является требованием для многих микроконтроллеров. Многие бакалавры инженерных специальностей даже бросают учебу из-за отсутствия будущего. C и C ++ полностью. - person Mast; 18.02.2015

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

person maga    schedule 21.12.2009
comment
Для микроконтроллеров не так уж и много. - person Yann Ramin; 21.12.2009
comment
Хотя у него есть тег fpga - person rzrgenesys187; 22.12.2009

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

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

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

person old_timer    schedule 07.01.2010

Первая сборка. После того, как К.

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

person Daniel Grillo    schedule 07.07.2010