Языки программирования для инженеров-электронщиков


22

Я учусь на инженера по электронике и коммуникациям, до того как я поступил в колледж, я интересовался программированием и компьютерными приложениями. Я сосредоточился на разработке приложений для Windows и изучении их методов, но теперь я чувствую, что это бесполезно в моей области ... Мне не нужно изучать все о компьютерных науках и разработке программного обеспечения! (Я прав по этому поводу?)

Я знаю VB .Net, C # и C ++. У меня много времени в отпуске, поэтому я хочу глубже вникнуть в «область электроники». Так что бы вы посоветовали изучить или сосредоточиться?

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


3
«Припой» Или, если быть более серьезным, обычный C довольно традиционен для вспомогательных инструментов, хотя в настоящее время Python немного моден.
— Крис Страттон

Ответы:


29

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

Большинство микроконтроллеров ниже определенного размера (например, PIC, AVR, MSP430 и т. Д.) Используют C (или ассемблер), поскольку существует много высококачественных (бесплатных и $$ версий - например, многие коммерческие компиляторы основаны на бесплатном компиляторе GCC). ,
Вы получаете другие языки, такие как превосходный JAL для PIC (первоначальный автор Wouter Van Ooijen, который здесь участвует), PICBASIC, варианты Ada, но из-за его популярности и количества доступных компиляторов, я бы сказал, C - это язык выбора для большинства. Хотя это, разумеется, не означает, что это лучший язык, использование самого популярного языка имеет очевидные преимущества (документация, поддержка, переносимость, совместная работа и т. Д.).
Для более сложных и больших 32-разрядных микросхем, таких как многие варианты ARM, также есть C ++ и другие доступные компиляторы.

Я прыгнул бы прямо, взял несколько советов по разработке и получил код. Вы можете выбрать младший 8-битный микро, как PIC16F (много стартовых наборов на Microchip Direct)
. Средний 16-битный микро, как и PIC24, а также какой-то ARM C / C ++ / встроенный в Linux - STM32F4 ARM Cortex M4 Discovery - это очень дешевая доска для разработчиков, которую стоит взять.
Что касается языка описания программируемой логики и аппаратного обеспечения (HDL - большие два - Verilog и VHDL), возможно, стоит также приобрести плату разработки FPGA или CPLD от Diglent или аналогичной.

Если вы не хотите ждать разработки, вы можете скачать MPLAB или MPLABX и использовать отличный симулятор, чтобы попробовать свои силы в разработке PIC. То же самое касается и других инструментов, например, вы можете бесплатно скачать Xilinx ISE Webpack и попробовать HDL и программируемую логику.


9
PIC могут быть дешевыми, но рискуя начать войну пламенем, я бы сказал, что использование PIC в качестве учебного пособия учит вас программировать PIC, а не программировать микроконтроллер общего назначения. Для этого MSP, AVR (Arduino), Low End ARM Cortex или даже почтенные процессоры 8051 обеспечат более легко переносимые навыки.
— uɐɪ

Большое спасибо ... это было очень полезно. Но подведу итог вашему ответу: что мне сейчас нужно, так это продолжать работать над C ++ и осваивать C, изучать Verilog или VHDL или и то, и другое, и брать несколько плат разработчиков для практики или просто использовать эти симуляторы в качестве начала.
— Сирадж Мухаммед

1
@SirajMuhammad - Да, вот и все, кроме изучения как Verilog, так и VHDL, вероятно, нет необходимости, поскольку они обычно могут использоваться вместе в проекте (например, вы можете использовать процессор с мягким ядром, разработанный кем-то другим в VHDL, в ваш дизайн Verilog, и он будет работать нормально) так что просто выберите один.
— Оли Глейзер

4
@Ian - я не утверждаю, что это должен быть PIC, это всего лишь пример (отсюда и «как PIC»). В любом случае, если вы программируете на C, я не думаю, что в целом Разница между любыми маленькими микрофонами. Конечно, полезно по-настоящему ознакомиться с одним микро наизнанку (сборка и все), но для старта на более высоком уровне все должно выглядеть примерно одинаково, только инструменты будут разными. Я думаю, что стоит попробовать несколько, прежде чем совершать что-либо.
— Оли Глейзер,

2
"не должно быть слишком сложно, если вы уже знаете C ++"? Я бы не согласился с этим, кто-то, кто знает «VB .Net, C♯ и C ++», вероятно, использует последний в довольно высокоуровневом объектно-ориентированном стиле RAII, и ему, возможно, потребуется некоторое время, чтобы правильно понять руководство управление памятью.
— оставлено около

23

Изучите C и приобретите дешевую плату для разработки микроконтроллеров, такую ​​как MSP430 или ARM Cortex, и, по крайней мере, напишите и загрузите несколько программ на C.

У меня есть степень по компьютерным наукам и опыт разработки программного обеспечения, в основном программирование на C ++ для игр, а теперь - игры и приложения для iOS, но моей последней работой был полупрофессиональный концерт EE, который начался с кучей программных прошивок для системы ARM Cortex M3. и затем я научился делать базовые схемы и макет платы, а также пару простых плат. Поэтому мне пришлось столкнуться с проблемой использования лучшего языка программирования для соединения дизайна аппаратного и программного обеспечения как человека, который отвечал за оба конца этого.

C это абсолютно тот язык, который вам нужно знать. Людям, которые программируют на C ++, просто не нужно ограничивать себя набором функций C, чтобы сказать «это одно и то же», но это не так. Особенно то, как C ++ развивал и собирал функции, и то, как обычные программисты на C ++ используют эти функции, это действительно совсем другое дело - работать над достаточно большим C-приложением по сравнению с C ++-приложением. Ваш SDK прошивки будет представлять собой набор библиотек C, все остальное, что поместится на MCU, будет библиотекой C, любая ОС, имеющая смысл на MCU, будет написана на C и т. Д. И т. Д.

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

Не обращайте слишком много внимания на людей, которые говорят, что вы можете использовать Lua или Python на MCU с правильным встроенным интерпретатором, бла, бла. Это правда, я сделал это, и это весело, но на данный момент это больше для игрушечных проектов и тому подобного, что появляется на Hack a Day. Я думаю, что мы увидим больше такого рода вещей, поскольку закон Мура неуклонно применяется даже к самым маленьким процессорам, это происходит с играми, в которых раньше было много сборок, а затем они дольше выдерживают C и C ++. чем все остальные, и теперь все так быстро, а производительность разработчика настолько важна, что большая часть разработки выполняется с использованием встроенных языков высокого уровня или напрямую на языке высокого уровня. Несмотря на это, пройдет несколько лет, прежде чем вы увидите, как компании нанимают программистов для прошивки с опытом работы с Python и Lua.

Не тратьте слишком много времени на сборку. Неплохо быть знакомым с концепциями, но вряд ли вы обнаружите, что много делаете, если вообще программируете на ассемблере. Есть такая традиционная мудрость с играми и встроенными, что это «полезно знать» сборку, часто повторяемую людьми, которые на самом деле не работают в этих областях. Но на самом деле очень маловероятно, что вы вообще когда-либо напишете какую-либо сборку, и если вы это сделаете, вероятно, это всего лишь несколько строк для оптимизации или что-то с аппаратным обеспечением, для которого у вас просто нет API (но вы будете после того, как вы напишите одну, которая обернет несколько строк сборки). Я работал над несколькими играми, и этот проект по разработке плат / прошивок, а общее количество сборочных линий, которые я написал для коммерческих проектов, вероятно, невелик. Это'


1
Стоит сказать, что ваши несколько строк сборки, скорее всего, будут в виде встроенных операторов сборки ( asm()), красиво встроенных в ваш C-код. Это выигрышная комбинация во всех отношениях. Высокий уровень, но компактный со случайными провалами в сборку, когда, например, время должно быть точно правильным. Набор avr-gccинструментов уже делает это много с макросами C, так что вы никогда не заметите.
— Алексиос

9
Вероятно, более важно иметь возможность читать сборку, а не писать ее. Это позволяет вам понять, что компилятор говорит микро, и в очень редких случаях сможет определить, когда компилятор делает это неправильно. Вам также необходимо иметь некоторое представление о сборке, чтобы получить максимальную отдачу от ваших инструментов отладки и использования предоставляемых ими одношаговых функций.
— uɐɪ

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

3
@ Ян - Умение читать ассемблер бесполезно, если ты не умеешь его писать. Вам нужно прочитать это и сравнить с тем, что вы сделали бы, если бы написали.
— Ракетный

2
@Rocketmagnet - Вы не можете проверить, что компилятор сгенерировал наиболее эффективную реализацию сборки. Требуется, чтобы у вас была возможность прочитать сгенерированный ассемблер и убедиться, что логика реализованного кода соответствует вашим намерениям. Это то же самое, что и использование других человеческих языков. Я могу читать и понимать на французском, немецком и латинском языках гораздо больше, чем могу говорить или писать.
— 2012 года

10

Я согласен со всеми, что вы должны быть очень компетентны в C.

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

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

  • Вы можете использовать более медленный более дешевый MCU и подрезать конкурента.
  • Вы можете уменьшить тактовую частоту для улучшения соответствия EMC.
  • в приложениях с низким энергопотреблением MCU может проводить больше времени во сне, что напрямую ведет к увеличению времени автономной работы.

Более компактный код означает, что вы можете использовать более дешевый MCU с меньшим объемом памяти. Или есть место для дополнительных функций.


Другой язык, который вы могли бы рассмотреть, это Verilog . Это язык описания оборудования, и он действительно сильно отличается от C не только по внешнему виду, но и по функциональности. Verilog откроет путь к использованию очень мощных чипов, таких как Cypress PSoC3 и 5 . Это микроконтроллер с аналоговым и цифровым перепрограммируемым оборудованием, который позволяет вам делать удивительные вещи, которые очень трудно сделать с любым другим MCU. Вы также сможете сделать дизайн FPGA .


Что вы подразумеваете под "одним языком ассемблера"? Я знаю, что есть язык, называемый ассемблер, есть ли у него ветки или что-то в этом роде? Можете ли вы назвать некоторые, пожалуйста? И большое спасибо за ваш ответ.
— Сирадж Мухаммед

4
Каждый тип CPU или MCU имеет свой собственный язык ассемблера с различными инструкциями. Все они довольно похожи, но с важными отличиями. Изучите язык ассемблера для любого используемого MCU.
— Ракетный

1
Собирался сказать именно это. C и Assembly наиболее часто используются в электронике, потому что вы обычно имеете дело с вещами низкого уровня. Объектно-ориентированное не очень хорошо используется, но низкоуровневое мышление C / Assembly также применимо ко всему, с чем вы работаете.
— Муз

9

Как MSEE, который работает в оборонной отрасли в течение 8 лет, я могу вам сказать, что понимание того, как правильно программировать в LabVIEW (графический язык со строгой типизацией, поток данных), означает, что у вас никогда не будет недостатка в работе.

LabVIEW начинался как язык программирования для аппаратных инженеров, вы можете убедиться в том, что код очень похож на принципиальную схему. Однако за последние 25 лет LabVIEW превратился в полноценный, многофункциональный язык с поддержкой объектной ориентации и многопоточности. На самом деле, я бы сказал, что нет другого языка программирования, основанного на тексте или каким-либо другим способом, который был бы проще для программирования многопоточного приложения, чем LabVIEW; во многом это связано с его парадигмой потока данных. По мере того, как количество ядер ЦП продолжает увеличиваться, LabVIEW будет становиться все более и более актуальным в качестве языка общего назначения.

Еще одно преимущество знания LabVIEW состоит в том, что вы в двух шагах от программирования FPGA с использованием модуля LabVIEW FPGA, который берет ваш код LabVIEW и преобразует его в VHDL за кулисами, прежде чем передать его компилятору Xilinx. Вы также можете использовать свои навыки LabVIEW для перехода к программированию кода в реальном времени через модуль реального времени LabVIEW, который использует VxWorks или Phar Lap.

Примечание: я сертифицированный разработчик LabVIEW.

введите описание изображения здесь


5
Все производственные LabVIEW, которые я видел, выглядят примерно так: thedailywtf.com/Articles/Labview-Spaghetti.aspx Я не сомневаюсь, что для тех, кто хочет поддерживать такой код, существует сильный рынок труда.
— Markrages

@markrages Меня попросили поддерживать и / или расширять код, который был почти таким же плохим, может быть, хуже, чем динамические вызовы VI и глобальные переменные. Эта проблема - обоюдоострый меч, это LabVIEW. С одной стороны, они позиционируют его как язык, на котором может программировать любой инженер, однако, не имея прочного фундамента в архитектуре программного обеспечения, вы в конечном итоге получаете такой код. К счастью, компания NI в достаточной степени решила эту проблему с LabVIEW 2012, предоставив хорошо написанные и прокомментированные шаблоны для архитектур, начиная с простого конечного автомата и заканчивая сложной структурой акторов на основе ООП.
— SiegeX

@markrages Проблема двоякая. Во-первых, руководство дает инженерам достаточно подготовки, чтобы быть опасным. Я бы сказал, что 9/10 программистов LabVIEW, с которыми я встречался в моей компании, которые проходили обучение, прошли только первые два базовых курса, которые, по сути, учат вас только синтаксису. Во-вторых, LabVIEW стал многофункциональным языком, который сегодня конкурирует с любым современным языком, поскольку его графическое управление считает, что это должно быть легко. Managemnt никогда бы не поручил инженеру-программисту спроектировать схему от среднего до сложного, но у них нет проблем с использованием EE для решения сложной программной проблемы, если они «знают LabVIEW»
— SiegeX

@markrages: Когда мне напомнили, почему мне нравится LabVIEW, я увидел твой комментарий и вспомнил, почему я его ненавидел. О, часы разочарования вернулись сразу.
— Джонни Б Хорошо

6

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

Для общих инженерных работ математически ориентированные языки, такие как Matlab (также Scilab и GNU Octave), будут широко использоваться для моделирования и создания прототипов.

Кроме того, многие IDE для программного и аппаратного обеспечения являются сценариями, как правило, с использованием TCL или LUA, поэтому было бы полезно некоторое знакомство с языками сценариев в целом (также Perl, Python, PHP, Javascript и т. Д.).

Для проектирования оборудования вам понадобятся навыки Verilog и / или VHDL.


6

Достаточно ли C ++? Может быть.

Пожалуйста, помните, что C используется примерно в 90-99% всех mcu: s, поэтому C обязательно в вашем резюме.

Но поскольку вы парень высокого уровня, вы можете начать играть с Arduino: s, так как они запрограммированы на уменьшенный C ++, и это дало бы приблизительное представление о том, что C ++ может сделать в мире mcu прямо сейчас.


3

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

Трудно сказать, что полезно для «вашей области» - и предположить, что, будучи студентом, вы, возможно, еще не знаете, какая у вас область !! - но я думаю, что ваш языковой набор кажется довольно разумным, и вы обнаружите, что используете его снова и снова. По крайней мере, хорошее владение одним структурированным языком делает следующий намного проще, но я думаю, что вы всегда найдете свои навыки программирования Windows хорошо иметь в кармане.


2

Вы можете изучить C и тип ассемблерного кода, который генерируется операторами C, если вы работаете с процессорами, но вы также должны научиться использовать оболочку командной строки Unix, такую ​​как bash, и инструменты, которые идут с ней, такие как sed, ed, awk, vim / vi, find, tar, gzip, ... а также Python, который вы можете использовать на многих платформах и который является хорошим способом "добиться цели".


2

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


0

Сначала я определю инженера-электронщика, чтобы иметь в виду кого-то, кто занимается разработкой аппаратного обеспечения, начиная с микропрограммного обеспечения и заканчивая проектированием платы и разработкой чипа. В некоторых случаях вы будете делать прошивку, как указано выше, вам понадобится «C». Более глубокое программное обеспечение становится просто инструментом, понимание некоторых компьютерных концепций на дополнительных языках от C / C ++ до Lisp-подобных языков будет важнее специфики. Вам понадобится программное обеспечение для поддержки ваших усилий по проектированию, но это не имеет преимущественного значения для понимания фундаментальных ограничений того, что можно сделать в физической реализации. Цифровой дизайн НЕ Verilog / VHDL, даже если дизайн выражен на этих языках. В полностью индивидуальном и in-silico дизайне вы увидите Lisp-подобные языки и C-функциональные языки.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.