2015-11-03 2 views
2

У меня есть встроенный проект C, который я компилирую с помощью eclipse. Мне нужно прочитать двоичный файл в коде приложения как массив констант.Включить двоичный файл как массив констант

Этот двоичный файл составляет ~ 200 кБ и должен быть частью кода приложения, чтобы код приложения мог считывать двоичное изображение в любое время и загружать его на другое устройство на плате, которое нуждается в этом изображении инициализации.

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

я могу сделать это в Makefile, связывая .bin файл по определенному адресу, или в коде C-то вроде

const char binFileImage [] = { file.bin }; 

Это, очевидно, не работает, но я не придумал синтаксис это сработает.

FYI, file.bin действительно является двоичным файлом.

Любые мысли о том, как это сделать?

+0

Возможный дубликат [Есть ли способ, чтобы загрузить двоичный файл в виде const в C во время компиляции] (http://stackoverflow.com/questions/22455274/is-there-a-way-to-load-a-binary-file-as-a-const-variable-in-c -at-compile-time) –

ответ

3

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

Другие решения включают использование какой-либо программы, которая вызывается make-файлом для преобразования файла в исходный файл, содержащий допустимое определение массива. Например, предположим, что файл начинается со значениями 0x23, 0x05, 0xb3 и 0x8f, то автоматически сгенерированный исходный файл может выглядеть как

const uint8_t binary_file_data[] = { 
    0x23, 0x05, 0xb3, 0x8f, ... 
}; 
+0

Привет, я вижу, где вы собираетесь с этим, но если я посмотрю на плитку, я вижу – Martin

+0

ff ff ff eb ff ... not 0xff 0xff - Мне нужно приложение для выполнения преобразование, я не знаю о программе, которая будет хорошо работать для этого, и я надеялся сделать это «на лету», так как файл .bin может меняться – Martin

+2

@ user2969503 Напишите свои собственные. Кроме того, вы также можете использовать 'objcopy' из binutils для этого. – fuz

Смежные вопросы