Подтвердить что ты не робот

Чтобы написать загрузчик в C или С++?

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

4b9b3361

Ответ 1

Это не очень простой вопрос. Это зависит от ряда факторов, включая:

  • Как вы предпочитаете компоновку своего кода.
  • Доступен ли компилятор С++ для вашей цели (и любые другие цели, которые вы, возможно, захотите использовать загрузчик).
  • Насколько критичен размер кода для вашего приложения (мы говорим о 10%, возможно, не МБ, как предлагается другим ответом).

Лично мне нравятся классы, как способ выписать мой код. Даже при написании кода C, я буду стараться хранить все в модульных файлах с помощью статических функций файловой области, имитирующих функции-члены и (несколько) статические переменные файловой области для "имитации" переменных-членов. Сказав это, большинство моих существующих встроенных проектов (все из которых относительно небольшие, вплоть до максимальной 128 КБ флэш, включая загрузчик, но обычно меньше), как правило, записываются в C. Теперь, когда у меня есть компилятор С++, Я, конечно, подумываю о переходе на С++.

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

Если у вас есть компилятор С++ (даже если он только g++), стоит запустить свой код через него только для дополнительной проверки типов, чтобы сократить количество проблем в коде. Компилятор С++ может занять несколько вещей, которые даже инструменты статического анализа не обнаружены.

Для хорошего обсуждения многих недействительных причин люди отвергают С++, см. статью Dan Saks на Embedded.com.

Ответ 2

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

Ответ 3

Если вам не нужно использовать Ориентацию объектов, используйте C. Простой выбор. Это проще и проще, одновременно выполняя ту же задачу.

Некоторые умирающие христиане не согласятся, но OO - это то, что делает С++ > C, и наоборот во многих обстоятельствах.

Ответ 4

Я бы использовал C, если не существует конкретной причины использовать С++. Для загрузчика вам не понадобится OO.

Используйте простейший инструмент, который выполнит задание.

Ответ 5

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

Ответ 6

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

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

Ответ 7

Язык C значительно проще разбирать, чем С++. Это означает, что программа, которая является действительной C, и действительный С++ будет быстрее компилироваться в качестве программы C. Наверное, это не серьезная проблема, но это еще одна причина, по которой С++, вероятно, переборщит.

Ответ 8

Используйте C с μClibc. Это упростит ваш код и уменьшит его размер. Можно найти в: www.uclibc.org.

Ответ 9

Перейдите на С++ и укажите, какие функции языка вам нужны. У вас все еще есть полный контроль над кодом выходного объекта, если вы понимаете абстракции С++, которые вы используете.

Использование OO может все же работать, если вы избегаете использования виртуальных функций. Избегайте неизменяемых типов объектов, для которых требуется много копировать, чтобы передавать значения, например std::string. Но вы все равно можете использовать такие функции, как шаблоны, без какого-либо реального влияния на производительность выполнения.

Ответ 10

Для такой конкретной задачи, как загрузчик, я бы определенно не использовал С++. Я думаю, что стандартная библиотека С++ имеет хотя бы пару МБ, а не то, что вы хотите в загрузчике. Перейдите с помощью C.