У меня есть загрузчик и приложение в одной флешке, которые построены отдельно.Я всегда запускаю в загрузчике, и прежде чем перейти к приложению, я хочу использовать crc32 в приложении, чтобы убедиться, что оно не повреждено.Для этого мне нужно вычислить и сохранить crc32 приложения по известному адресу при сборке приложения, чтобы позже получить его из загрузчика.В make-файле приложения я хочу сохранить результат команды оболочки, вычисляющей crc, в переменную, а затем сохранить эту переменную по указанному адресу в памяти.Поэтому мне интересно, можно ли передать переменную из make-файла в скрипт компоновщика, чтобы сохранить результат crc32 в указанном разделе памяти.Я думаю, что-то вроде:
Makefile:
CC = arm-none-eabi-gcc
CFLAGS = -mcpu=cortex-m0 -mthumb -mfloat-abi=soft -std=c99
CRC_RESULT = '"$(shell get_crc...)"'
$(CC) $(CFLAGS) -T"LinkerScript.ld" -Wl,-Map=output.map -Wl,CRC_RESULT -Wl
Linker-скрипт:
MEMORY
{
FLASH (rx) : ORIGIN = 0x08002000, LENGTH = 64K - 0x2000 - 0x04
CRC (rx) : ORIGIN = 0x0800FFFC, LENGTH = 0x04
RAM (xrw) : ORIGIN = 0x200000c0, LENGTH = 8K
}
SECTIONS
{
....
.CrcSection :
{
CrcSection = CRC_RESULT;
} > CRC
}
То, что я слышал, должно быть возможно напрямуюизмените двоичный файл с результатом crc в make-файле (не уверен в этом), но это немного похоже на хак.На мой взгляд, было бы проще прямо поместить переменную в правильный раздел памяти.Как вы можете видеть, я очень плохо знаком с make-файлами и линкерными скриптами.