Ciao a tutti.
Vorrei far allocare alcune funzioni all'interno del processore (ARM7) di un dispositivo all'indirizzo che desidero.

Allora, mi sono creato nel file .ind, che rappresenta la "forma" della flash interna del micro, alcune sezioni:

e.g:

__PROG_DATA__ = 0x00018050;

.progdata __PROG_DATA__ :
{
*(.progdata)
}

Adesso esiste una sezione .progdata che parte dall'indirizzo 0x00018050 (hex) del micro e tutte le funzioni che nella propria dichiarazione contengono l'attributo

__attribute__ ((section (".progdata")));

vengono allocate a partire dall'idirizzo 0x00018050

e.g:
void My_func(void) __attribute__ ((section (".progdata")));

Come posso fare, nel caso avessi più funzioni e mi interessasse allocarle all'interno della sezione .progdata, ad allocarle prorpio in un punto preciso della medesima sezione?

Con un esempio, ci sono:

void My_func1(void) __attribute__ ((section (".progdata")));
void My_func2(void) __attribute__ ((section (".progdata")));
void My_func3(void) __attribute__ ((section (".progdata")));

supponiamo che siano grosse 0x50 (hex) e se andassi a vedere nel file .map vedrei all'indirizzo 0x00018050 allocata la funzione My_func1, all'indirizzo 0x00018100 la My_func2 e all'indirizzo 0x00018150 la My_func3.
Ma è stato il linker a decidere questa disposizione e poteva interscambiare le Myfunc di posizione tipo prima la 3 poi la 1 e infine la 2 e comunque tutte e tre sempre contigue in memoria.

Quindi come faccio a dire che ad esempio voglio che la funzione My_func3 venga allocata in 0x00018300 anzichè dove me la mette il linker cioè all'indirizzo 0x00018150?

Ringrazio tutti anticipatamente.

Marco