Chum_A (03.11.2017 14:07, просмотров: 2733)
GCC ARM, борьба с линкером при размещении в выделенной секции: В исходнике:
__attribute__((section(".progid.VER"))) const char ver[] ="VER_0.1";
__attribute__((section(".progid.DAT"))) const char dat[] = __DATE__;
В скрипте линкера:
MEMORY
{
...........
PROGID (r) : ORIGIN = 0x0001FFD0, LENGTH = 0x30
RAM (rw) : ORIGIN = 0x20000000, LENGTH = 32K
..........
}
SECTIONS
{
.........................
.progid :
{
KEEP(*(.progid*))
*(.progid.VER)
*(.progid.DAT)
*(.progid*);
} > PROGID
. = ALIGN(4);
__etext = .;
.data : AT (__etext)
{
.........................
В map:
.progid 0x0001ffd0 0x14
*(.progid*)
.progid.DAT 0x0001ffd0 0xc ../obj/preinit.o
0x0001ffd0 dat
.progid.VER 0x0001ffdc 0x8 ../obj/preinit.o
0x0001ffdc ver
*(.progid.VER)
*(.progid.DAT)
*(.progid*)
0x0001ffe4 . = ALIGN (0x4)
0x0001ffe4 __etext = .
.data 0x20000000 0x70 load address 0x0001ffe4
0x20000000 __data_start__ = .
В прошивке:
1FFD0: 4E 6F 76 20 20 33 20 32 30 31 37 00 56 45 52 5F | Nov 3 2017.VER_
1FFE0: 30 2E 31 00 00 12 7A 00 FC 7F 00 00 15 00 00 00 | 0.1.........................
1FFF0: 10 00 00 20 00 00 00 00 54 4D 00 00 74 4D 00 00 | ..............................
Вопросы:
1 Откуда мусор в прошивке после VER_0.1 и как его убрать
2 Меняю местами *(.progid.VER) с *(.progid.DAT), все равно в прошивке первой стоит DAT
P.S. Вставлять абсолютные адреса в секцию .progid не хочется