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

13
задан Mast 18 February 2015 в 07:13
поделиться

10 ответов

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

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

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

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

3
ответ дан 1 December 2019 в 17:11
поделиться

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

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

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

13
ответ дан 1 December 2019 в 17:11
поделиться

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

38
ответ дан 1 December 2019 в 17:11
поделиться

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

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

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

11
ответ дан 1 December 2019 в 17:11
поделиться

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

2
ответ дан 1 December 2019 в 17:11
поделиться

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

2
ответ дан 1 December 2019 в 17:11
поделиться

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

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

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

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

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

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

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

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

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

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

.
12
ответ дан 1 December 2019 в 17:11
поделиться

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

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

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

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

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

2
ответ дан 1 December 2019 в 17:11
поделиться

Первый Ассемблер. После C.

Я думаю, что тот, кто знает Ассемблер и C, лучше того, кто знает только C.

0
ответ дан 1 December 2019 в 17:11
поделиться
Другие вопросы по тегам:

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