Мови програмування для інженерів-електроніків


22

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

Я знаю VB .Net, C # і C ++. У мене є багато часу у відпустці, тому я хочу глибше програмно заглибитися у "електроніку". То що б ви порадили вивчити чи зосередити увагу?

Я хочу, щоб ті мови, які використовуються при програмуванні мікроконтролерів та інших інтегральних мікросхем. Чи достатньо C ++ або я також повинен опанувати C? Скажіть мені, будь ласка, свої думки.


3
"Паяльник" Або, якщо серйозніше, звичайний C є досить традиційним для інструментів підтримки, хоча python зараз трохи модний.
Кріс Страттон

Відповіді:


29

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

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

Я б стрибнув прямо та захопив кілька плат для розробки та отримав кодування. Ви можете вибрати 8-бітний мікрофон низького рівня, як PIC16F (безліч наборів для початківців на Microchip Direct)
. Середина діапазону 16-бітових мікро, як PIC24, а також C / C ++ / вбудований Linux ARM якогось типу - 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), низький рівень ARM Cortex або навіть поважні процесори 8051 забезпечать легші передачі навичок.
uɐɪ

Дуже дякую ... Це було дуже корисно. Але підводячи підсумок вашої відповіді: мені зараз потрібно працювати над C ++ і опановувати C, вивчати Verilog або VHDL або те і інше, а також захопити кілька плат для розробників або просто використовувати ці тренажери.
Сірай Мухаммед

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

4
@Ian - Я не стверджую , що має бути ПОС, це просто приклад (звідси і «як ПІК») У будь-якому випадку, якщо ви програмуєте на 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 ++ є досить багато приємних функцій, які мають засмічення або відсутність розміру або швидкість покарання, ви просто повинні знати, що ви робите, і писати код таким чином далі на кінці спектру в стилі С, ніж кінець спектру STL з точки зору розумного використання функцій.

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

Не витрачайте занадто багато часу на складання. Непогано бути знайомим з поняттями, але навряд чи ви виявите, що ви робите багато, якщо якесь програмування монтажу. Ось така звичайна мудрість з іграми та вбудованою, що це «добре знати» збірку, часто повторювану людьми, які насправді не працюють у цих сферах. Але насправді це малоймовірно, що ви взагалі будь-коли будете писати будь-яку збірку, і якщо ви це зробите, можливо, це буде лише кілька рядків для оптимізації або щось із апаратним забезпеченням, для якого у вас просто немає API (але ви будете мати після того, як ви напишете той, який обгортає кілька рядків складання). Я працював над декількома іграми, і цей проект дизайну дошки / прошивки та загальна кількість ліній складання, які я написав для комерційних проектів, мабуть, у підлітків. Це '


1
Варто сказати, що ваші декілька рядків складання, ймовірно, будуть вбудованими твердженнями про складання ( asm()), добре вбудованими у ваш код C. Це виграшна комбінація в усіх відношеннях. Високий рівень, але компактний з випадковим зануренням у збірку, коли, наприклад, терміни повинні бути правильними. Мережа avr-gccінструментів вже робить це багато за допомогою макросів C, тому ви ніколи не помічаєте.
Олексій

9
Напевно, важливіше вміти читати збірку, а не писати її. Це дозволяє зрозуміти, що компілятор говорить мікро-мікроскопу, і в дуже рідкісних випадках можна виявити, коли компілятор помилився. Вам також потрібно мати певне розуміння для складання, щоб отримати максимальну користь від ваших інструментів налагодження та використовувати функцію однокрокового функціонування, яку вони надають.
uɐɪ

1
Однозначно з цим згоден. Я думаю, що одне з найкращих вправ для починаючого програміста - написання компілятора мови іграшок та генератора коду, який принаймні обробляє функції, масиви та структурує, щоб дізнатися, як виглядає фрейм стека та як виглядають основні елементи мови програмування в зборі .
Субоптимус

3
@Ian - Вміти читати асемблер марно, якщо ви не знаєте, як його написати. Вам потрібно прочитати його і порівняти його з тим, що ви зробили б, якби це написали.
Rocketmagnet

2
@Rocketmagnet - Ви не хочете перевірити, чи компілятор створив найбільш ефективну реалізацію збірки. Вимога полягає в тому, щоб у вас була можливість читати створений асемблер і перевіряти, чи відповідає логіка реалізованого коду вашому наміру. Це те саме, що використання інших людських мов. Я можу читати та розуміти набагато більше французької, німецької та латинської мов, ніж можу говорити чи писати.
uɐɪ

10

Я погоджуюся з усіма іншими, що вам потрібно бути дуже компетентними в С.

Я також рекомендую вивчити хоча б одну мову складання. Це зробить вас набагато кращим програмістом на C. Вам потрібно знати, що відбувається під капотом, і це набагато вірніше у вбудованому світі, ніж це у світі ПК.

Розуміння асемблера, який генерує ваш C, дозволить вам написати більш оптимальний C з точки зору швидкості та компактності. Швидший код означає:

  • ви можете використовувати повільніші дешевші MCU та підбивати конкурента.
  • ви можете відключити тактову частоту, щоб покращити відповідність ЕМС.
  • у додатку з малою потужністю MCU може проводити більше часу уві сні, що безпосередньо призводить до збільшення тривалості роботи акумулятора.

Більш компактний код означає, що ви можете використовувати дешевший MCU з меншою кількістю пам'яті. Або мати місце для додаткових функцій.


Іншою мовою, яку ви можете розглянути, є вивчення - Verilog . Це мова опису апаратних засобів, і вона справді зовсім відрізняється від C не тільки за своїм виглядом, але і за її функціональністю. Verilog відкриє шлях до використання таких потужних чіпів, як Cypress PSoC3 та 5 . Це мікроконтролер з аналоговим та цифровим перепрограмуваним обладнанням, який дозволяє робити дивовижні речі, які дуже важко зробити з будь-яким іншим MCU. Ви також зможете зробити дизайн FPGA .


Що ви маєте на увазі під "однією мовою складання"? Я знаю, що існує мова під назвою Асамблея, чи є у неї гілки чи щось подібне? Ви можете назвати якісь ласка? І велике спасибі за вашу відповідь.
Сірай Мухаммед

4
Кожен тип процесора або MCU має власну мову складання з різними інструкціями. Всі вони досить схожі, але з важливими відмінностями. Вивчіть мову складання для будь-якого MCU, який ви використовуєте.
Rocketmagnet

1
Збирався сказати саме це. C і зборка найчастіше використовуються в електроніці, тому що ви зазвичай маєте справу з речами низького рівня. Об'єктно-орієнтована насправді не так добре використовується, тип низького рівня мислення, що виходить від 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 Мене просили підтримувати та / або розширювати код, який був майже таким же поганим, може бути і гіршим, оскільки були й динамічні VI-дзвінки, і глобальні. Ця проблема - меч з двома кінцями, який є LabVIEW. З одного боку, вони продають його як мову, якою може запрограмувати будь-який інженер, однак без будь-якої міцної основи в архітектурі програмного забезпечення ви отримуєте код саме так. На щастя, NI в достатній мірі вирішив цю проблему з LabVIEW 2012, надавши добре написані та коментовані шаблони для архітектур, починаючи від простої державної машини, до складних акторських систем на базі OOP.
SiegeX

@markrages Проблема двояка. По-перше, керівництво дає інженерам достатньо просто підготовки, щоб бути небезпечною. Я б сказав 9/10 програмістів LabVIEW, яких я зустрічав у своїй компанії, які пройшли навчання, взяли лише перші два основні курси, які по суті навчають вас лише синтаксису. По-друге, LabVIEW стала багатофункціональною мовою, яка сьогодні конкурує з будь-якою сучасною мовою, оскільки графічне управління вважає, що це повинно бути легко. Managemnt ніколи не дасть завдання інженеру-програмісту розробити середню та складну схему, але у них немає проблем з
виведенням

@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 накручує вас, створює помилки, краде кліщі годинника тощо, а також видавлює найбільшу продуктивність із вашої платформи. Це все припускаючи, що ви говорите про мікроконтролер, а не про ардуїно, 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, навіть якщо дизайн виражений цими мовами. У повному користувальницькому та силіконічному дизайні ви побачите подібні до Lisp мови та C - функціональні мови.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.