Як стати вбудованим розробником програмного забезпечення?


22

Я хотів би отримати кілька порад для тих, хто хоче стати хорошим вбудованим розробником програмного забезпечення або хоче вдосконалитись у цій галузі.

Що мені потрібно дізнатися про обладнання, програмне забезпечення?

Які книги найбільше рекомендуються? Блоги?

Зрештою, як я міг перейти від початківця хобі до відмінного професіонала?

Відповіді:


39

На сьогодні всі відповіді були хорошими, але я закину два центи.

Ось повторення декількох порад із поворотом та деякі додаткові:

  • Дізнайтеся C: Основна мова апаратного забезпечення, яке все ще є портативним (занадто певна ступінь). Не просто вивчайте це, але станьте експертом у всіх його функціях, таких як непостійна та чому це важливо для написання драйверів пристроїв.
  • Почніть з гарного набору для розробки, як Arduino, але, як говорилося раніше, вивчіть інші архітектури, як тільки ви добре відчуєте це. На щастя, є кілька плат, сумісних з Arduino, побудованих з іншими процесорами, таким чином ви можете переписати один і той же дизайн на інший UC, не зіпсувавши весь ваш дизайн, отримуючи відчуття чогось нового.
  • На етапі навчання сміливо вигадуйте колесо на драйверах пристроїв або інших фрагментах коду. Не просто набирайте чужий код драйвера там. Є велика цінність у переосмисленні колеса, коли ви навчаєтесь.
  • Киньте виклик, щоб перезаписати код більш ефективно з точки зору швидкості та використання пам'яті.
  • Ознайомлення з різними стилями архітектур програмного забезпечення вбудованих систем. Почніть з базової обробки перемикання / керування фоновим циклом, потім перейдіть до планувальників фону, а потім операційних систем у режимі реального часу.
  • Отримайте хороший контроль над джерелами! Я більше віддаю перевагу Меркуріалу .
  • Навіть підпишіться на якісь безкоштовні хостингові сайти з управління джерелами, як Sourceforge.net або Bitbucket.org, щоб розмістити ваш проект, навіть якщо ви єдиний, хто працює над ним. Вони повернуть ваш код, тому вам не доведеться турбуватися про випадкові збої на жорсткому диску, що знищує все! Використання розподіленого VCS стане в нагоді, тому що ви можете перевірити зміни на вашому жорсткому диску, після чого завантажте їх на хост-сайт, коли будете готові.
  • Вивчіть свої інструменти добре для будь-якого чіпа, над яким ви працюєте! Знання того, як компілятор створює збірку, є надзвичайно важливим. Вам потрібно зрозуміти, наскільки ефективний код, тому що вам може знадобитися переписати в збірці. Знання, як використовувати файл лінкера та інтерпретувати вихід карти пам'яті, також є важливим! Як інакше ви дізнаєтесь, чи винна програма, яку ви тільки що написали, винна в тому, що ви зайняли занадто багато ROM / Flash!
  • Вивчайте нові техніки та експериментуйте з ними у своїх розробках!
  • Нічого не припускайте при налагодженні. Перевірте це!
  • Дізнайтеся, як програмувати оборонно, щоб виявляти помилки та перевіряти припущення (наприклад, використовуючи assrt)
  • Вбудуйте у свій код інформацію про налагодження, де ви можете, наприклад, виводити споживання пам’яті чи код профілювання за допомогою таймерів або використовувати запасні штифти на UC для перемикання та вимірювання затримки переривання на O-області.

Ось кілька книг:

Ось кілька веб-сайтів:

  • Вкладений Гуру
  • У групи Ganssle Джека Гансле є кілька чудових історичних історій. Прочитайте статті. Хоча він дещо проповідує про деякі речі.
  • Embedded.com Хороша інформація про найновіші методи та поради від Ganssle, Barr та інших експертів галузі.

1
@Adam: Я люблю цю книгу! Прагматичний програміст! Я не можу повірити, що забув!
Джей Аткінсон

1
+1 для Mercurial. Мені це подобається, хоча я маю відчуття, що знання вміння з git було б більш цінним. Ознайомлення з основами SVN є досить важливим, якщо ви хочете внести свій внесок або відмовитися від інших проектів, оскільки саме цим використовується багато хто з них.
tyblu

17
  • Пам'ятайте: "Срібної кулі немає" , не потрапляйте в пастку вірити, що існує один інструмент, методологія, мова або система, яка може вирішити всі проблеми
  • Станьте експертом C
    • Навчіться обійтися без malloc () та POSIX
  • Не зациклюйтесь на одній архітектурі, легко стати фанбайком PIC або AVR або ARM випадково
  • Створіть речі, налагодьте його, змусьте його працювати. Практика робить ідеальною
  • Вивчіть принаймні одну систему управління джерелом (SVN / git / тощо) та використовуйте її
  • Завжди будьте готові перевірити свої припущення. Помилка, як правило, у тому, що ви припускаєте, працює
  • Не ставте надто покладатися на налагоджувачі, вони різні в кожній системі та різної надійності
  • Думайте економно. Вирішуючи проблеми, подумайте про код коду, слід оперативної пам’яті та вартість обладнання

Для книг я рекомендую перекопати історію. Більшість сучасних вбудованих програмних методів походять із кровотоку краю минулих років.

Як що завгодно, практикуйте щодня.


5
З усіх речей, які я навчився, контроль над версіями (я зараз використовую підрив) є найціннішою для моєї продуктивності. Коли у мене почалося тут, у Microsoft було безпечне джерело, тому я використав погане рішення, а потім хороше.
Кортук

Я не уявляю свого життя без системи управління джерелами. Зараз я також використовую SVN. Я не знаю, як все працювало, перш ніж я знав SVN.
Даніель Грілло

1
+1 для "Помилка, як правило, у тому, що ви припускаєте, працює"
JustJeff

"Навчіться обійтися без малока" - Чому? Щоб мінімізувати ризик зіткнення штабеля / купи?
rzetterberg

@rzetterberg Багато вбудованих систем уникають використання динамічного розподілу пам’яті, оскільки це може призвести до роздроблення купи та індетермінізму
Toby Jaffey

8

Інші відповіді чудові, але найбільша різниця між любителем та професіоналом має бути розумом щодо якості. Тож нехай ваш проект пройде весь шлях, не зупиняйтеся, коли ви на 80% закінчите проект. Проведіть все так, доведіть, що він працює, і правильно задокументуйте.

Переконайтеся, що ваш код читабельний і доступний для обслуговування.

І не забудьте також повеселитися :)


7

Крім очевидних, як, наприклад, вивчення C і почати з якоїсь плати розробників, ви захочете навчитися читати таблиці даних мікроконтролерів .
Виробники додають все більше функцій мікроконтролерам, які, отже, стають все складнішими. Таблиця не містить лише електричних характеристик (що цікавіше інженеру-електроніку, ніж розробник програмного забезпечення), але також детальний опис регістрів, карт пам'яті тощо.
На першому читанні аркуш може виглядати непросто, але не розуміючи їх може викликати більш сильний головний біль у фазі налагодження.


3

"Вбудований" - це трохи завантажений термін.

З деякого відношення будь-яку систему, призначену для запуску однієї програми, можна назвати вбудованою системою, якщо є деяке обладнання, яким слід керувати. Можна, можливо, зателефонувати на 400 МГц PPC604 з 2 Гб оперативної пам’яті, що працює на Java-програмі поверх linux, вбудованої системи, якщо трапляється керувати процесом через локальні модулі вводу / виводу. З іншого боку, ардуїно, який просто працює з якоюсь мінімальною мережевою програмою, не був би вбудованою системою. Але, ймовірно, «вбудований» змушує більшість людей думати про флеш-контролери з лише кількома сотнями байтів оперативної пам’яті, жодної операційної системи, про яку говорити, і безліччю мікросхеми.

Незважаючи на це, ймовірно, два найбільші перешкоди, які не вбудовуються програмістами, зазвичай стикаються з вбудованими системами навчання - це регістри вводу / виводу та переривання.

Перебої можуть насправді бути легшими з двох понять для невбудованих програмістів, оскільки основні проблеми з цим, паралельністю та програмою, керованими подіями, часто зустрічаються в основних програмах. Те, що викликає переривання болю, - це реалізація надзвичайної чутливості системи до якості її роботи з перервами, а також тонкощі роботи з обладнанням для очищення стану переривання та налаштування на наступний. За допомогою GUI тупик вбиває лише додаток. З обробником переривань, тупик призводить до блокування всієї вашої системи.

Начебто пристрої вводу / виводу є тією сферою, яка викликає найбільші труднощі. Для непосвячених, це може бути дуже дивно виявити , що читання цього регістра тут впливає на цей регістр там . Написання символів 1 для очищення шматочків. Біти статусу, які очищаються, коли ви читаєте реєстр даних тощо. Існує так багато можливостей з обладнанням вводу-виводу, що немає загального правила поводження з ним, окрім того, як дізнатися, як знайти та інтерпретувати дані даних пристроїв. Написання драйвера пристрою для послідовного порту навчить вас багато чого про програмування вводу / виводу низького рівня.

Дійсно немає заміни для вивчення цих речей, ніж засукати рукави та запрограмувати кілька прямих мов C та / або мови монтажу на голому металі. Навіть вищезгадана вбудована система на базі Java, врешті-решт, потребує драйвера пристрою для вводу-виводу, а це означає, що в кінцевому підсумку мати справу з деяким С. Досвід - найкращий викладач. Виберіть мікроконтролер, будь то MSP430, TMS320, AVR, ARM, PIC, 68HC11, будь-що, знайдіть набір eval та побудуйте деякі системи.


3

$50то$але вам потрібно припаяти для pro mini. Я не прихильник сім’ї PIC, але ви, можливо, захочете щось там отримати як урок історії, те ж саме стосується 8051, обидві сім’ї все ще популярні та використовуються, просто не дуже ефективні та передані іншими архітектурами. Абсолютно вивчіть ARM та великий палець, можливо MIPS (що є pic-32, не плутати зі старовинною оригінальною архітектурою PIC). ARMmite Pro - це хороша плата ARM початкового рівня, хоча Stellaris також може бути.

Те, що ви хочете дізнатися тут, це асемблер для різних платформ. C. Взаємодія асемблера. Різні засоби GCC та non-GCC. Як прочитати таблицю даних / посилання програмістів (і зрозуміти, що всі вони мають деякі помилки або можуть бути введені в оману, ніколи не довіряйте їм, апаратне забезпечення перемагає документи) і як читати або використовувати схематично. Це зазвичай не складна схема. Деякі дошки корисні для взаємодії в проектах, тобто вони не мають сміття на дошці, просто прямий доступ до шпильок вводу / виводу. Але це не найкраще для навчання. Щось схоже на Stellarisна дошці, яка болісна для проектів, є багато цікавих матеріалів на борту для навчання вбудованих та навчання запозичення / використання драйверів або написання власних даних з таблиць. Метелик Atmel AVR - це також хороша дошка, якщо вона все ще доступна, можливо, потрібно буде припаяти власний серійний порт, щоб запрограмувати її або просто застрягнути кілька проводів у отворах. Це дає вам декілька периферійних пристроїв, які ви можете навчитися програмувати.

Навіть якщо ви закінчите виконувати вбудовану роботу, яка передбачає написання програм, використовуючи виклики SDK або API на Linux або RTOS (ніколи не торкаючись апаратних засобів та не читаючи таблиці даних), наведені вище знання все одно поставлять вас попереду решти.


3

Ця стаття (автоматично перекладена з португальської на англійську) має хороший огляд розвитку кар’єри як розробника вбудованого програмного забезпечення. Примітка: Оригінал тут .

Він починається з окреслення сфер знань, які ви повинні розвивати:

  1. Знання: Ви повинні знати теорію, що бере участь у вбудованих системах. Це означає апаратне та програмне забезпечення. Неможливо бути компетентним розробником вбудованого програмного забезпечення без ознайомлення з апаратною архітектурою, яка працює.

  2. Навичка: Вам потрібно отримати досвід роботи в цій місцевості. Потреби практикуються. Ви можете прикрасити всю мнемоніку асемблера PIC, але це не корисно, якщо ви не можете керувати світлодіодом з цими знаннями.

  3. Ставлення: Перш за все, вам потрібно погляди, які змусять вас рости в цій галузі. Це дуже динамічно з частими змінами та розробками. Вам потрібно завжди бути вмотивованим (а) бути самоучкою, насолоджуватися навчанням, «підлаштовуватися» та розуміти, як все працює. Без такого ставлення вам дадуть незабаром. Тому що в цій області вам потрібно бути дуже, дуже наполегливим.

Потім він дає наступні поради щодо оволодіння цими областями (і розвиває їх з подальшим текстом, це лише заголовки):

  1. Що потрібно вивчити обладнання (принаймні)
  2. Що потрібно вивчити програмне забезпечення (принаймні)
  3. Крім того, вивчайте операційні системи
  4. Вам потрібна підготовка
  5. Не зупиняйтесь, продовжуйте вчитися та розвивайте свої мережі!

1
Дякуємо за посилання! Переклад Google, схоже, вказує на те, що це ідеально підходить для цього питання. Однак ми вважаємо за краще, щоб (1) текст був англійською мовою (ми є англомовною спільнотою , хоча багато хто з нас принаймні двомовні). коротка інформація про статтю у випадку, якщо посилання перерветься Я відредагував вашу публікацію, щоб дотримуватися цих вказівок, і дав вам нагороду за неї!
Кевін Вермер

2

Подумайте двічі, перш ніж стати вбудованим програмним інженером. У мене були фази в кар’єрі. Перші 5 років я розробляв програмне забезпечення, ніж переходив до продажів / маркетингу, робив це протягом 15 років, керував 100 + мільйонними доларами бізнесу, і тепер я повернувся до програмного забезпечення.

Коли я повертаюся до програмного забезпечення після 15 років, я пам'ятаю, чому я пішов в першу чергу. Це важко. Йому потрібна концентрація, кілька сотень рядків коду, що торкаються один одного, і всім вам потрібно зберегти його в пам'яті. Вбудовуватися особливо важко.

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

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

Якщо все це перевіриться, ніж прочитає всі ті чудові книги, зробіть вправи, і ви зробите чудового інженера .. Удачі


1

Всі інші говорять чудові речі. Тому я дам вам загальну пораду: читати читати читати читати читати читати читати читати!

Прочитайте кожну статтю на http://embeddedgurus.com Якщо ви щось не розумієте, досліджуйте це. Якщо в поясненні цих речей ви знайдете щось, чого не розумієте, прочитайте ще трохи. Я збираюся очолити вбудоване програмне забезпечення, і мій досвід - це декілька професійних проектів за останні кілька років і багато читаю. Досвід дозволяє вам спробувати речі, але читання дає вам знати, чи те, що ви намагалися, робили раніше, можливо, краще, ніж ви могли. Він знайомить вас із поняттями, з якими можна працювати в будь-яких обставинах.

Просто прочитай!


0

Стати експертом у галузі C Understand Timers and Serial communication. Ви повинні забруднити руки. Розумійте протоколи РФ, налаштовуйте їх на свої вимоги. Не просто сліпо випробовуйте комбінації коду під час налагодження. Код робить саме те, що ви йому говорите. Прочитайте посібник користувача та інформаційний лист, а потім внесіть зміни, якщо щось не працює. Все, що сказано і зроблено, єдиний реальний спосіб стати експертом - це практикувати. Продовжуйте створювати додатки. Незабаром воно набуде другого характеру.

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