Файл прошивки: Executable and Linkable File, обычно обрабатываемый двоичным (.bin) или текстовым изображенным двоичным (.hex).
Этот двоичный файл является точной памятью, которая записывается во встроенную вспышку. При первом включении платы внутренний загрузчик перенаправляет выполнение в точку входа микропрограммы, обычно по адресу 0x0.
Оттуда выполняется ваш код, поэтому у вас есть код запуска (обычно файл startup.s), который будет настраивать часы, регистры указателя стека, векторную таблицу, загружать раздел данных в ОЗУ (ваш инициализированные переменные), очистить нулевой инициализированный раздел, возможно, вам захочется скопировать код в ОЗУ и перейти к копии, чтобы избежать запуска кода из FLASH (может быть быстрее на некоторых платформах) и т. д.
При работе с операционной системой все эти варианты и ресурсы платформы не контролируют код пользователя, там вы можете ссылаться только на библиотеки ОС и использовать предоставленный API для выполнения действий на низком уровне. Встраиваемый, это 100% -ный код пользователя, вы получаете доступ к оборудованию и управляете его ресурсами.
Неудивительно, что операционные системы загружаются так же, как и прошивка, поскольку оба они находятся в контакте с процессором, памятью и вводом/выводом.
Все это, чтобы сказать: структура прошивки похожа на структуру любой скомпилированной программы. Существуют разделы данных и разделы кода, которые организованы в памяти во время загрузки операционной системой или самой программой при запуске на встроенной.
Основным отличием является адресация памяти в двоичном файле firwmare, обычно адреса - physical RAM address, так как на большинстве микроконтроллеров нет функции сопоставления памяти. Это прозрачно для пользователя, компилятор будет абстрагировать его.
Другим существенным отличием является указатель стека, код пользователя OS не резервирует память для стека сам по себе, для этого он передает на ОС. Когда на прошивке вы должны сделать это в коде пользователя по той же причине, что и раньше, нет среднего человека, чтобы управлять им для вас. Сценарий компоновщика компилятора зарезервирует соответственно папку Stack and Heap, и в вашем файле .map будет символ stack_pointer
, который позволит вам узнать, на что указывает. Вы не найдете его в файлах карты программы ОС.
Очень широкий вопрос, нелегко обобщить. Иногда они обычно называются шестнадцатеричными файлами и могут принимать различные форматы. См. Пример https://en.wikipedia.org/wiki/Intel_HEX или https://en.wikipedia.org/wiki/SREC_(file_format). Похоже, что это список адресов памяти и команд/констант в этих местах. – Ross
Этот вопрос слишком широк. Для прошивки нет определенной структуры, поскольку это общий термин для описания самодостаточной части кода для конкретной архитектуры. Подумайте об этом как о черном ящике - если вы его построите, вы знаете только цель. –
До конца голосования: Я отредактировал свой вопрос, пожалуйста, просмотрите ваши голоса? –