Мой фон такой: встроенный / C, затем C ++, затем языки OO более высокого уровня (Java, Scala, Ruby, Groovy и т. Д.), И сейчас я делаю небольшой проект с использованием микроконтроллера MSP430. Между тем, вдохновленный этим, я обдумываю ряд потенциальных проектов встраиваемых систем для домашних животных (сетки и / или RTLS выглядят привлекательно). Так что мой вопрос сейчас сосредоточен, прежде всего, на MSP430, хотя, кроме того, я бы хотел иметь и более широкую картину, касающуюся других микроконтроллеров.
Я был немного удивлен, узнав, что через столько лет мне, возможно, придется вернуться к C с его макросами, соглашениями об именах и всем остальным. Мой мозг раньше был подключен к C, но это было много-много лет назад.
Итак, какие альтернативы доступны?
C ++ кажется мне гораздо более приятным, и, к счастью, кажется выполнимым: http://stonepile.fi/object-oriented-approach-to-embedded-programming-with-c/
Так что, если я хочу программировать на C ++, мне просто нужно много встроить, по возможности избегать виртуальных функций, и я должен быть хорошим, верно? (по крайней мере, в отношении памяти; они не измеряли производительность по приведенной выше ссылке).
Однако, если это так просто, почему люди программируют на C? Я должен что-то упустить.
Похоже, что приведенная выше ссылка также предоставляет библиотеку-оболочку для ОС pico]. Кто-нибудь использовал picoOS на MSP430, насколько он надежен и сколько ресурсов он занимает?
Каковы плюсы и минусы Energia для простого проекта MS430? Я попробовал это, это кажется очень интуитивным и самодокументирующимся, но приводит ли это к как аккуратному коду под капотом? Например, Energia инициализирует неиспользуемый GPIO в выключенном состоянии для экономии энергии? Инициализирует ли он неиспользуемые прерывания? Каковы накладные расходы с точки зрения памяти и скорости? И т.п.
Изменить: Как давний человек Eclipse, я хотел бы использовать CCS. Я видел, что эскизы Энергии можно импортировать в CCS. Означает ли это, что CCS полностью поддерживает Energia и может использоваться как IDE Energia?
Кто-нибудь использовал Java Grinder? http://hackaday.com/2014/02/10/java-grinder-spits-out-dspic-and-msp430-assembly-code/ ? Это кажется привлекательным, но, поскольку он выплевывает ассемблер, а не код C / C ++, немного страшно его фиксировать: что, если я заперт в нем, и он не готов к прайм-тайму? Если бы он генерировал C-код, я мог бы легко отбросить его, если бы он не работал.
Я упомянул Java, и мой вопрос был удален, поскольку само собой разумеется, что, кроме синтаксического сахара, похожего на дробилку (не то, чтобы я имел в виду синтаксический сахар!), Java не может работать на MSP430. Думаю, я задам еще один вопрос о том, ГДЕ может работать Java. Это уже выросло слишком долго.
Какие еще языки / среды существуют, которые занимают нишу между языками низкого и высокого уровня?
у вас, кажется, есть несколько вопросов здесь, поэтому я рассмотрю их в порядке их нумерации.
Большинство микросхем действительно работают на C ++ (при условии, что производитель или проект с открытым исходным кодом предоставляет серверную часть компилятора), однако вам следует опасаться ряда недостатков. C ++ менее детерминирован, поскольку обеспечивает значительно более высокий уровень абстракции, который, скорее всего, не требует встроенной системы с ограниченными ресурсами, и в целом он также не нужен, так как встроенные системы редко бывают достаточно мощными для полезной работы чрезвычайно сложные алгоритмы, которые требуют языка высокого уровня, такого как C ++. Это также может привести к большому количеству трудно отслеживаемых ошибок, поскольку сложность отладки кода из встроенной системы, имеющей простые и легко отслеживаемые ошибки, намного приятнее. Однако, что очень важно, стандартные библиотеки C ++ огромны, они будут использовать слишком много памяти и, скорее всего, будут тратить большую часть вашего ограниченного пространства памяти. Таким образом, даже если вы используете C ++, вы не сможете использовать любой из методов, которые делают его мощным.
Я просто не использовал его, однако, как и в любой ОСРВ, это полезно, если вам нужен интерфейс немного более высокого уровня, однако для микропроцессора маленького размера MSP430 это кажется излишним, я не могу себе представить, что вы делаете что-то там, что требует ROTS, если вам нужна многозадачность, было бы лучше обеспечить простую совместную задачу самостоятельно.
К сожалению, я также не использовал эту платформу, однако, учитывая, что она основана на проводных соединениях, я предполагаю, что она не обеспечивает высокий уровень аппаратной оптимизации, если вы хотите, чтобы я рекомендовал использовать ее для большей части вашего кода, но делать вызовы в библиотеки более низкого уровня, когда это необходимо. Помимо этого, однако, он обеспечивает прекрасный, самодокументированный интерфейс, я настоятельно рекомендую вам попробовать. Это также облегчит перенос вашего кода во много раз, если вы позже переключитесь на другой микро (многие системы от многих компаний предоставляют привязку проводки).
Вы действительно сами отвечаете на это здесь, это может быть очень мощным, но все еще очень незрелым, я бы избежал этого просто из-за этой привязки, пока она не станет более зрелой, тогда ее стоит пересмотреть.
Java прекрасно работает на более мощных чипах ARM, это единственное место, где я видел его в широком использовании и реализовано довольно эффективно в микро (ARM предоставляет аппаратную помощь специально для Java). Помимо этой Java плохо подходит для микромира, в какой-то момент казалось, что он может куда-то пойти, но это было в значительной степени неосуществимо, так как теперь C-лайки — это путь для небольших микро.
К сожалению, на самом деле нет большого выбора, кроме C. Моя лучшая рекомендация — использовать библиотеки высокого уровня, такие как проводка. Это дает вам немного более приятные интерфейсы, не убивая эффективность, иначе нет смысла использовать маленький микро, если вам нужен высокий уровень абстракции.
Подводя итог, можно сказать, что C неплохо справляется с этой задачей, я не думаю, что была какая-либо мотивация или попытка сделать хорошую замену. И, честно говоря, я тоже так чувствую, C никогда не становился плохим языком, он по-прежнему хорошо подходит для небольших систем по тем же причинам, что и раньше. Это обеспечивает мощность, эффективность и предсказуемость.
Я надеюсь, что это поможет, если у вас есть какие-либо вопросы, пожалуйста, прокомментируйте меня, и я посмотрю, что я могу сделать, чтобы помочь.
Других решений пока нет …