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

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

Suboptimus
источник
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 .

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

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

SiegeX
источник
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 прямо сейчас.

Johan
источник
3

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

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

Скотт Сейдман
источник
2

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

Paddy3118
источник
2

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

mjh2007
источник
0

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

заполнитель
источник