Функции заголовка встроенных систем - PullRequest
5 голосов
/ 31 мая 2011

Я новичок во встраиваемых системах и хочу узнать больше,

В настоящее время я оптимизирую программное обеспечение с учетом требований для встроенной системы ARM, и мне интересно, какие заголовочные файлы вы включаете в свойисходные файлы.Куда они положены?

Прямо сейчас я просто использую программное обеспечение (OVP) для имитации аппаратной платформы ARM, но на реальном оборудовании вы должны поместить заголовочные файлы где-нибудь правильно?Как в gcc есть стандартная библиотека на hd.Нужно ли вставлять эту библиотеку во встроенный компьютер?Пространство ограничено!И есть ли способ минимизировать размер библиотеки?Спасибо!

Пример

#include <stdio.h>

#include <stdlib.h>

Я использую кросс-компилятор arm-elf-gcc

С наилучшими пожеланиями

Мистер Гигу

Ответы [ 2 ]

11 голосов
/ 31 мая 2011

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

Заголовочные файлы - не более чем исходные файлы, как и любые другие. Разница в том, что они вставляются в модуль компиляции препроцессором, а не компилируются напрямую. Также в большинстве случаев они содержат только декларативные операторы и обычно не вносят вклад в сгенерированный код в смысле исполняемых инструкций или хранимых данных.

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

Заголовочный файл - это не то же самое, что библиотека . Это просто (как правило) объявление содержимого библиотеки (прототипы функций и другие объявления символов, такие как константы, данные, макросы, перечисления). Библиотека принимает форму предварительно скомпилированного / собранного объектного кода, хранящегося в объединенном архиве. Работа компоновщика состоит в том, чтобы объединить необходимый библиотечный код с объектным кодом, сгенерированным из компиляции вашего собственного источника. Именно этот связанный исполняемый файл хранится и выполняется на целевом объекте, а не в исходном коде.

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

Когда код библиотеки связан, связаны только те компоненты кода объекта библиотеки, которые необходимы для разрешения ссылок в коде приложения, а не вся библиотека (если только вся библиотека не состоит только из одного объектного файла).

1 голос
/ 31 мая 2011

Библиотека действительно должна быть включена в образ, который записывается в память встроенной системы. Обычно вы говорите компоновщику убрать неиспользуемые функции, что имеет большое значение для сохранения памяти. Но эта память - это память, которую ваша программа занимает во флэш-памяти или что вы используете для энергонезависимого хранения кода. Он ничего не говорит о том, сколько оперативной памяти занимает ваша программа во время выполнения. Вы также можете указать компилятору оптимизировать пространство, а также использовать разные библиотеки времени выполнения - библиотеки, предоставляемые поставщиком, часто бывают не такими быстрыми или маленькими, как могли бы.

...