Чи буде можливість у майбутньому писати код у C ++ для мікроконтролерів PIC?


8

Чи коли-небудь можна буде використовувати C ++ для кодування PIC? Чи є якісь апаратні обмеження, які заважають нам використовувати C ++? На скільки збільшується розмір генерованого .hex-файлу та час роботи програми, коли ми використовуємо C ++ замість C? Чи практично можливо використовувати C ++ для поточних ПІК? Чи є якісь плани на майбутнє чи поточний розвиток щодо цього?


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

3
Для обговорення придатності - electronics.stackexchange.com/questions/3027/…
Тобі Джаффі

2
Оскільки відповідь - «Так, вже існують компілятори C ++», я збираюся дозволити цьому висловитись, але в майбутньому ви повинні знати, що питання Stack Exchange має стосуватися до перевірених фактів, а не припущень про майбутнє.
Кевін Вермер

2
@clabacchio: Не обов'язково правда. В C ++ ви платите лише за те, що використовуєте. Дивіться мою відповідь за адресою: electronics.stackexchange.com/questions/3027/…
Rocketmagnet

"ПОС" - це марне узагальнення. На деяких фотографіях низького класу (думаю 10F200) використання C майже неможливо. На деяких PIC-колах високого класу (серія 32MX), по чутках, зараз використовується C ++, і, безумовно, немає технічних причин, чому це не вдалося. Тож деякі кращі фокусування можуть дати більш корисну відповідь, зараз усі фактично відповідають на інше питання.
Wouter van Ooijen

Відповіді:


17

Чи коли-небудь можна буде використовувати C ++ для кодування PIC?

Так, це можливо і зараз. Для dsPIC є компілятор IAR Systems C ++ (хоча він дуже старий і не підтримується).

Інший варіант - використовувати перетворювач C ++ до C. Використовуючи крок попереднього збирання, перетворіть C ++ на C, а потім переведіть (неприємно виглядає) C у звичайний компілятор C. Погляньте на LLVM або компілятор C ++ Comeau, які обидва роблять це. Кома коштує лише 50 доларів, але, мабуть, знадобиться певні зусилля, щоб весь ланцюжок інструментів і бібліотеки працювали належним чином.

Чи є якісь апаратні обмеження, які заважають нам використовувати C ++?

Коротка відповідь, ні, обмежень щодо апаратних засобів немає. Якщо відповісти, C ++, безумовно, заохочує використання купи та / або стека, з яким будуть боротися менші MCU з обмеженою оперативною пам’яттю.

Чому вони борються з купою / стеком? З двох причин: A) багато MCU мають обмежену оперативну пам'ять, звичайно, недостатньо для купи, і ледве достатньо для стека. Б) багато MCU не працюють з покажчиками добре, тому використання змінних на стеку дійсно вбиває продуктивність.

Коли люди запитують про використання C ++ у MCU, я вважаю конструктивним порівняння C ++ до C. Точно такі ж запитання були (і досі є) про C на MCU. Люди звикли балакати цю ідею. Мова високого рівня, на 256 байт оперативної пам'яті MCU ?? Неможливо. Але тепер ми всі знаємо, що це можливо. Я написав C для PIC12. Нема проблем. Це можливо тому, що A) розробники програмного забезпечення знають, що потрібно бути обережними: не використовуйте malloc () тощо та B), компілятор написаний спеціально для MCU. Компілятор також буде дуже обережним при розподілі пам'яті, він не намагатиметься створити купу і може не створити стек. Деякі компілятори C просто не дозволяють писати повторний (рекурсивний) код, який абсолютно вимагає стека.

Знаючи, що можна записати C для MCU, такі самі відповіді стосуються питання запису C ++ на MCU. Поки компілятор розуміє обмеження цільового пристрою, і користувач також розуміє мову, насправді проблем немає. В C ++ ви платите лише за те, що використовуєте. Цілком можливо написати C ++ (з об'єктами та всім), що створює точний вихід ASM, який ви отримали, якби використовували C.

Тепер, PIC32, безумовно, може впоратися з C ++. Вони мають до 64 кБ оперативної пам’яті і базуються на ядрі MIPS, який є належним чином вирощеним 32-бітовим процесором. Він може працювати з покажчиками та стеком, а також з ПК. Дійсно, є ПК на базі MIPS (або, принаймні, раніше).

На жаль, існує стільки непорозумінь навколо C ++. Навіть дуже досвідчені кодери, здається, не мають уявлення про те, як працює мова. Дивіться мою відповідь про те, чому C ++ підходить для вбудованих процесорів.

На скільки збільшується розмір генерованого .hex-файлу та час роботи програми, коли ми використовуємо C ++ замість C?

Як я вже сказав, різниці може бути і немає. Bjarne Stroustrup зіставив купу компіляторів C / C ++ для порівняння продуктивності часу та простору для ряду операцій. Результати були різними. У деяких випадках C ++ виходив повільніше і більше, в деяких випадках повільніше і менше, або швидше і більше, а ще швидше і менше! Отже, відповідь на ваше запитання полягає в тому, що це сильно залежить від компілятора, але в цілому, це взагалі не має значення. Більш детально див. Технічний звіт щодо продуктивності C ++

Чи є якісь плани на майбутнє чи поточний розвиток щодо цього?

Що я не знаю. Я знаю, що компілятор Microchip C32 відкритий, і ви можете завантажити джерело. Я також знаю, що хтось, з ким я працював, насправді знайшов в Інтернеті деякі вказівки і вдалося змусити компілятора зібрати код C ++. Але він покинув компанію ще до того, як зміг налагодити мене належним ланцюжком інструментів.


ОНОВЛЕННЯ

Microchip тепер має компілятор C ++ для своєї серії вбудованих MCU.



з веб-сторінки IAR: "Спадковий продукт: Вбудований робочий стіл IAR для dsPIC - це застарілий продукт. Система IAR не оновлює його, і придбати угоду про підтримку та оновлення для нього неможливо."
Jason S

Я знаю, що продукція IAR - це чудово, але, на жаль, дуже дорога і здається "старою". Я знаю, що C ++ можливий на будь-якій платформі, якщо ви не використовуєте всі функції. Однак це додає можливості для додаткового шару абстрагування класами. Я не використовую шаблони часто, а також не використовую динамічні розподіли пам'яті взагалі. Хтось знає кого-небудь іншого конкурента на C ++ на PIC24 / PIC32?
Ганс

Так, вибачте, це була насправді не чудова знахідка. Дозвольте додати ще кілька речей до своєї відповіді.
Rocketmagnet

1
Я б вважав C конкурентом за C ++ на мікроконтролері. Я не можу придумати нічого, що хотів би зробити в C ++, чого не можу зробити в C, і є менше викликів невидимих ​​функцій (конструктори, деструктори тощо). Робить код більш детермінованим та простим. Які особливості C ++ є обов'язковими, які неможливо заблукати за допомогою C?
AngryEE

1
Можна запитати: "Які особливості C обов'язкові для того, щоб їх не можна було заблукати в ASM?" Відповідь: "Нічого". Переваги - це підвищена здатність дизайнера конкретизувати дизайн, а компілятор перевірити правильність виконання. Дивіться мою відповідь electronics.stackexchange.com/questions/3027/… для переліку реальних та негайних переваг C ++ у цьому плані.
Rocketmagnet

5

На скільки збільшується розмір генерованого .hex-файлу та час роботи програми, коли ми використовуємо C ++ замість C?

Залежить від того, які функції ви використовуєте. Якщо ви використовуєте основні об'єктно-орієнтовані функції (клас + методи), швидше за все, вони матимуть дуже незначний ефект (імена змінених змін / функцій довші, тому таблиця символів, ймовірно, дещо збільшиться). Шаблони також не повинні додавати багато з хорошим компілятором.

Якщо ви з глузду з’їхали і втягуєте в себе такі речі, як Бібліотека стандартних шаблонів, і використовуєте динамічне розподілення пам’яті та винятки, то ви, ймовірно, зіткнетеся з роздувом коду.


Будучи попередженням для ОП, будьте дуже обережні щодо розподілу пам’яті на малі архітектури пам'яті та вбудовані завжди працюючі системи.
kenny

міг би "-1" прокоментувати будь-ласка, чому він / вона не погоджується?
Джейсон S

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

Для цього вам фактично доведеться використовувати шаблон з кількома різними типами даних, і однієї копії НЕ БУДЕ достатньо, якщо ви не використовуєте поліморфний код, який має загальний базовий клас. (У цьому випадку коштує час виконання.) Шаблони не магічно змушують ваш код розквітати, вони спричиняють роздутий код лише тоді, коли ви використовуєте їх у кількох типах даних, коли ви не знаєте про наслідки.
Джейсон S


1

Дещо узагальнивши своє запитання, існують процесори ARM, створені для вбудованого ринку, які містять MMU (блок управління пам'яттю). Розмір пам’яті та розподілення пам’яті зробили такі мови, як java та c ++ поганий вбудований вибір. Оскільки вбудовані процесори продовжують ставати швидшими та потужнішими, а оскільки пам'ять стає все щільнішою і дешевшою, вибір мови, доступний вбудованим інженерам, різко змінюється. 32-розрядний процесор ARM з частотою 600 МГц з MMU та 64G флеш-карткою є прекрасним кандидатом для додатків c ++. Чи відповідає воно визначенню класичного вбудованого процесора - інше питання.


0

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

  • якщо ви знаєте, як використовувати функціональні покажчики тощо. Ви можете кодувати, як C ++, там немає жодної проблеми.

5
Дозволю собі не погодитися. Ви можете використовувати безліч функцій C ++ (класи, шаблони, перевантаження оператора, посилання) з невеликими витратами на час виконання. Так, ви можете робити всі ці речі в простому C з хакерськими конструкціями, але це затягує ваш мозок, і я набагато краще використовувати C ++. (звичайно, я б краще скористався кращою мовою, але я б вибрав компілятор C ++ у серцебитті над звичайною С.)
Jason S

1
Класи = структури (без вбудованих методів, але якщо вам подобається, ви можете зберігати в структурі вказівник функції і викликати це). Шаблони = ти використовуєш ці ??? Перевантаження оператора = так, я теж хотів би цього. Посилання = покажчики, ні? Щонайменше, з C ви можете використовувати лише ті "функції" C ++, які ви хочете, не турбуючись про надмірне генерування коду або необхідність включати випадкову велику бібліотеку, щоб отримати щось для компіляції.
AngryEE

1
Я також прошу різнитися.
Rocketmagnet

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

3
Я не знаю, що ви маєте на увазі під "С - це мова вбудованої". Звичайно, це дуже популярно. Ви кажете, що це найкраща мова? Напевно ні.
Rocketmagnet
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.