Программирование микропроцессора с использованием C в объектно-ориентированной парадигме, это целесообразно? - PullRequest
4 голосов
/ 28 декабря 2010

Поскольку C обычно используется в микроконтроллерах, и можно делать объектно-ориентированное программирование на C, целесообразно ли реализовывать объектно-ориентированное программирование микроконтроллеров с использованием C?Какие плюсы и минусы?

Ответы [ 6 ]

4 голосов
/ 28 декабря 2010

Мой короткий ответ - нет.Микроконтроллеры строго ограничены, когда речь идет о памяти программного кода, скорости выполнения и оперативной памяти.Желательно, чтобы с C было как можно проще.C не предназначен для объектно-ориентированного языка.Максимум, что вам следует рассмотреть, - это использовать указатели и структуры, но не пытайтесь имитировать полиморфизм или что-либо подобное

3 голосов
/ 28 декабря 2010

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

3 голосов
/ 28 декабря 2010

Да, это не только возможно, но, на мой взгляд, иногда целесообразно.

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

Возможно, самый известный пример этого - ядро ​​linux.

3 голосов
/ 28 декабря 2010

До тех пор, пока вам не нужен полиморфизм, все в порядке.Но как только вы используете полиморфизм / виртуальную функцию и помещаете функции в эти структуры, это может стать очень загадочным.

Это также зависит от того, что вам нужно делать.Для драйверов вам не нужно ОО, возможно для применения.Имейте в виду, что у микроконтроллеров мало оперативной памяти, и все, что вам понадобится, чтобы в любом случае постоянно занимать мало памяти.

Если вы не планируете писать более 40 тыс. Строк приложения, достаточно простого C,и без прикольных трюков.

2 голосов
/ 28 декабря 2010

Это правда, вы можете использовать ООП с C. Вы также можете использовать #define, чтобы изменить ключевые слова, чтобы они больше походили на Python. Однако я бы не советовал делать это.

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

Если вы хотите ООП на микро, используйте C ++. Многие / большинство новых микро поддерживают это. Не обращайте внимания на тех, кто говорит, что у микросхем недостаточно памяти или скорости, потому что они понятия не имеют, насколько быстрая ваша микросхема, сколько у нее памяти и каковы ваши ограничения производительности. Хорошо написанный C ++ превзойдет плохо написанный C по размеру и скорости в любой день.

0 голосов
/ 10 января 2011

Для моего следующего встроенного проекта я определенно буду использовать части C ++ и создам чистое приложение на основе интерфейса / класса / статического объекта с typedefs, define и всеми остальными неприятными c.Вещи, которые я планирую использовать:

  • Классы .Это позволяет мне инкапсулировать код и модульное тестирование с объектами-заглушками с помощью конфигурации.
  • Интерфейсы .Дает мне возможность четкого контракта для каждого класса по сравнению с заголовочными файлами c, которые люди обычно используют в качестве мусорных баков для всех типов typedef, определений и прочего.Кроме того, интерфейсы дают мне разделение определения и реализации и позволяют проводить модульное тестирование с объектами-заглушками.
  • Статические объекты .Я не предвижу динамической памяти, поэтому все объекты будут статичными.Вероятно, один класс приложения определит и инициализирует все и, следовательно, будет конфигурацией приложения.

В целом, оно будет компилироваться во что-то столь же эффективное, как c, но с гораздо лучшим обзором.

...