Ширина символов, создаваемых объектной копией gcc
Я использую objcopy для удаления некоторых необходимых сценариев для встраивания файла ресурсов (zip-файла) во флэш-память (встроенный в ARM).
Я использую objcopy как это:
arm-none-eabi-objcopy.exe -I binary -O elf32-littlearm -B arm --rename-section .data=.rodata input.zip input.zip.o
arm-none-eabi-nm.exe -S -t d input.zip.o
00006301 R _binary_input_zip_end
00006301 A _binary_input_zip_size
00000000 R _binary_input_zip_start
Что мне нужно знать, так это то, какова ширина символов _end и _size. Я могу только догадываться, что _start - это адрес, к которому можно обращаться как к байтовому массиву: extern uint8_t _binary_input_zip_start[];
, И я предполагаю, что _end и _size имеют "родной" размер int, и я полагаю, что могу смело предположить, что могу интерпретировать их как uint32_t.
Однако я не могу быть уверен. Я не могу найти ничего, что связано с размером в документах objcopy: https://sourceware.org/binutils/docs/binutils/objcopy.html
1 ответ
Я не уверен на 100%, будет ли это работать, но попробуйте добавить опцию --sort-size в arm-none-eabi-nm. Это должно сортировать символы по размеру, сравнивая их со следующим символом выше. В сочетании с опцией -S он должен печатать размер. Надеюсь, это поможет вам определить их ширину.
Какой ARM micro вы используете? 32-битная версия - хорошее предположение, но есть и исключения. Если вы используете часть Texas Instruments, я могу помочь намного больше. У меня нет под рукой проекта ARM, на котором я могу это проверить, но это стоит того. Если это не сработает, я продолжу копать.
Источник: Мои знания и двойная проверка через http://manned.org/arm-none-eabi-nm