У меня есть файл сборки.Я буду использовать этот файл для включения двоичного файла, как показано ниже:
.section .bindata
.global imrdls_start
.type imrdls_start, @object
.global imr_SW_DL_start
.type imr_SW_DL_start, @object
.section .bindata
.balign 64
imrdls_start:
imr_SW_DL_start:
.incbin "file.bin"
.balign 1
imr_SW_DL_end:
.byte 0
Затем в файле C я буду вызывать эту переменную и использовать содержимое этого двоичного файла.
int main(void) {
extern uint8_t imrdls_start;
uint8_t *ptrToExpectedDL = &imrdls_start;
for(int i = 0; i < 135; i++)
{
printf("0x%02x ", ptrToExpectedDL[i]);
if((((i + 1) % 15) == 0)) printf("\n");
}
return EXIT_SUCCESS;
}
Дело в том, что после компиляции и выполнения содержимое распечатки «file.bin» неверно.
Ожидаемый результат: 00 1d 81 ff 00 fe 00 ff 00 1e 82 00 00 20 82...
Выходные данные для мусорной корзины: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 ...
Ниже приведен мой вариант компилятора и связи:
qcc -Vgcc_ntoaarch64le -c -Wp,-MMD,build/aarch64le-debug/src/imrdls.d,-MT,build/aarch64le-debug/src/imrdls.o -o build/aarch64le-debug/src/imrdls.o -Wall -fmessage-length=0 -g -O0 -fno-builtin src/imrdls.s
qcc -Vgcc_ntoaarch64le -c -Wp,-MMD,build/aarch64le-debug/src/Test.d,-MT,build/aarch64le-debug/src/Test.o -o build/aarch64le-debug/src/Test.o -Wall -fmessage-length=0 -g -O0 -fno-builtin src/Test.c
qcc -Vgcc_ntoaarch64le -o build/aarch64le-debug/Test build/aarch64le-debug/src/Test.o build/aarch64le-debug/src/imrdls.o
Любые комментарии будут действительно полезны.Спасибо.