C ++ для 8051 микроконтроллера? - PullRequest
8 голосов
/ 22 мая 2009

Может кто-нибудь сказать, можно ли записать микроконтроллер 8051 с помощью программы на C ++? Я пытался искать об этом в Интернете, но не могу точно определить, возможно это или нет. Keil использует C, но программа, которую мне нужно написать, очень строковая, и C довольно недружелюбен по сравнению с C #, к которому я привык. В данный момент я пытаюсь написать код на C, но он становится очень запутанным, поэтому я был бы очень рад, если бы вместо этого мог написать его на C ++.

Мне понадобится компилятор C ++, который создает выходной файл Hex, который затем можно записать на микроконтроллер. Кто-нибудь слышал о чем-то, что я мог бы использовать? Кроме того, C использует заголовочный файл, который позволяет вам ссылаться на порты, но когда я попытался выяснить, используется ли этот заголовочный файл также в C ++, я не смог найти никакой информации о нем.

Дополнение: Я использую микроконтроллер Atmel AT89C51 с перепрограммируемой флэш-памятью 4 Кбайт и 128 х 8-битной внутренней оперативной памятью. Это на самом деле для робота для проекта в университете, и кодирование на самом деле не требует ООП. У него просто есть много таблиц поиска в формате массива 2D строк. Единственная причина, по которой я хотел рассмотреть C ++, заключалась в том, что казалось, что беспорядочные манипуляции со строками кажутся (из-за моего отсутствия опыта в C).

А кто-нибудь знает про заголовочный файл? C использует #include reg51.h, но я попытался выяснить, работает ли это для C ++, и не смог ничего найти на нем.

Ответы [ 11 ]

10 голосов
/ 22 мая 2009

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

Что следует иметь в виду:

  • Поддержка отладки на уровне исходного кода будет где-то между плохим и невозможным.
  • Время выполнения OOP на 8-битной машине. Я бы настоятельно рекомендовал провести серьезный сравнительный анализ перед тем, как приступить к использованию инструмента.
  • Память во встроенных системах стоит недешево, и у вас, несомненно, будут некоторые ограничения адресного пространства.

Кроме того, если вы действительно собираетесь заниматься серьезной обработкой строк, я бы порекомендовал использовать стандартную библиотеку C, а не библиотеку строковых объектов, просто потому, что вы лучше контролируете подстановку на месте, и поэтому копии строк становятся очевидными в код.

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

4 голосов
/ 23 мая 2009

Системы IAR имеют 8051 компилятор, который может компилировать C ++ изначально (без перевода на C), и отладка на уровне исходного кода также не должна быть проблемой.

2 голосов
/ 22 мая 2009

Есть коммерческий компилятор от ceibo .

Однако возможность использования c ++ (особенно строки STL) зависит от того, сколько ресурсов (как ПЗУ, так и ОЗУ у вас будет).

Есть 8051 сайт с форумами, учебными пособиями и загрузками, где вы можете получить дополнительные ресурсы для программирования 8051.

1 голос
/ 23 мая 2009

IAR предлагает компилятор C / C ++ для 8051-х компилятор C / C ++ для 8051-х . - Но в полном раскрытии я использовал только компиляторы Keil C для разработки 8051.

Что касается ваших проблем с заголовочными файлами: Заголовочные файлы часто распространяются либо поставщиком IDE, либо производителем оборудования, и часто предоставляют символическое представление отображений вашего регистра. Небольшое количество может потребоваться для включения для включения заголовочного файла на основе C в проект C ++. - Если вы собираетесь переключать IDE / компиляторы, вы часто можете ожидать некоторой обработки вашего исходного кода для размещения нового компилятора. (Читайте: доступ к коду C из базы кода C ++ часто заставляет меня остановиться на один день, чтобы сделать это правильно.)

1 голос
/ 23 мая 2009

Возможно, вы захотите предоставить дополнительную информацию о типе программы, которую вы собираетесь запускать на этом микроконтроллере:

Вы упомянули C ++, а также C # в своем сообщении, оба из которых, безусловно, не идеально подходят для обработки тяжелых строк на микроконтроллере , не говоря уже о том, что вы, вероятно, учитывая интенсивное использование STL, что, кроме того, увеличит размер исполняемого файла?

Итак, каковы ваши основные ограничения (RAM, CPU, ROM и т. Д.)?

Если вы действительно думаете, что вам нужно выполнить эту обработку строк в ОО-режиме, вы можете подумать о запуске облегченного встроенного интерпретатора сценариев на контроллере, чтобы вы могли затем предоставить свои процедуры обработки строк с использованием языка сценариев, в то время как сам интерпретатор будет ANSI C, скомпилированным в HEX-файл (например, lua или nasal оба будут подходящими кандидатами).

Однако, примите во внимание, что язык сценариев, такой как lua, обычно накладывает примерно 100 КБ + накладных расходов в пространстве, Nasal несколько легче и может компилироваться до 50-70 КБ, если вы отключите определенные расширения.

Кроме того, доступны другие скриптовые интерпретаторы, которые специально предназначены для использования на встроенных платформах.

0 голосов
/ 24 апреля 2013

да, вы можете записать память микроконтроллера 8051 с помощью программы на C ++, а также есть несколько бесплатных компиляторов, которые можно использовать для создания шестнадцатеричных файлов и последующей отправки файлов в микроконтроллер. Вы можете найти любую информацию о процессе программирования микроконтроллера в всеобъемлющей статье с учебными пособиями, компиляторами, симуляторами и т. Д.

0 голосов
/ 25 мая 2009

Почему бы не использовать библиотеку C-строк? Как bstrlib или подобное? C ++ просто не то, что вам нужно для этого микроконтроллера.

0 голосов
/ 25 мая 2009

Звучит так, будто вам нужен компилятор C ++, чтобы вы могли использовать std::string. std::string требует кучи. У вас не будет полезной кучи только с 128x8 бит внутренней оперативной памяти, особенно не для std::string объектов. Учтите, что если вы читаете 80-символьную строку из последовательного порта, она потребляет более 60% доступной памяти. Вы также собираетесь использовать внешнюю оперативную память? Сколько стоит

Нужно ли вашей прошивке обрабатывать строки во время выполнения? Например, он отправляет / получает команды в виде строк через последовательный порт или какой-либо другой интерфейс? Если это так, вы должны максимально изолировать обработку строк от остальной части вашего кода и использовать токены (перечисляемые типы или #defined интегральные константы) в другом месте. В противном случае у вас будет гораздо меньше проблем с встраиванием вашей логики в ограниченную память вашего процессора, если вместо строк использовать токены.

Кроме того, если вам нужно выполнить синтаксический анализ строк, вам лучше написать конечный автомат, который обрабатывает символы по одному, чтобы вам не приходилось иметь дело с полными строками. Опять же, 128 байтов - это не много места для обработки строк.

0 голосов
/ 23 мая 2009

Другие упоминали, что для 8051 есть компиляторы C ++. Я думаю, что ваша главная проблема с ними будет стоить. Многие компании позволят вам писать ассемблер бесплатно, но платят за компилятор C или C ++. Мы, вероятно, говорим здесь несколько сотен долларов.

Мой главный вопрос: что запутано в вашем коде? Какие функции вы пытаетесь использовать в C ++, который запутывается в C? Некоторые функции в C ++ плохо переводятся в такую ​​минимальную встроенную среду (потоки, конструкторы, деструкторы и т. Д.). C может выполнять многие функции объектно-ориентированного типа со структурами. Следует просто избегать других функций (что-нибудь с динамическим управлением памятью).

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

0 голосов
/ 23 мая 2009

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

Вы должны иметь возможность создать Makefile, который вызывает компилятор C ++, а затем запускает компилятор C.

Это не самое элегантное решение, но на самом деле довольно необычно использовать C ++ на небольших устройствах, таких как 8051.

Отказ от ответственности: я на самом деле не пробовал это так удачи! Если бы это был я, я бы придерживался C и написал бы несколько надежных функций обработки строк.

...