[GCC] Deklaracja stałych na okreslonej pozycji

Witam wszystkich, Jak w GCC (np dla STM32) zdefiniować stałą w ściśle określonym miejscu w pamięci? Czy jest na to prosta recepta - w innych kompilatorach wstawia się adres po @ lub at() i tyle... ;) Pozdrawiam Arek

Reply to
ArekS
Loading thread data ...

Zrób to z poziomu linkera.

Krzysiek Rudnik

Reply to
Krzysztof Rudnik

Hm.... szukam i szukam i tak nie bardzo umiem znaleźć... może jakiś krótki przykład.... Pozdrawiam Arek

Reply to
ArekS

ArekS przemówił ludzkim głosem:

W skrypcie linkera, w sekcji MEMORY poszukaj jak się nazwa sekcja, w której ląduje program np. "rom":

MEMORY { rom (rx) : o = 0x00000000, l = 64k ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ram (wi) : o = 0x20000000, l = 10k }

potem możesz dopisać w skrypcie nową sekcję po słowie kluczowym SECTIONS:

.moja_sekcja 0x0000FF00: { *(.moja_sekcja) *(.moja_sekcja.*) } > rom

Stałą w programie musisz zadeklarować z użyciem atrybutu sections:

const usigned int moja_stala __attribute__ ((section(".moja_sekcja"))) =

0xDEADBEEF;
Reply to
Zbych

Dzięki, działa pięknie -- Pozdrawiam Arek

Reply to
aswierc

Zmienne ze skryptu linkera widoczne w kodzie:

.moja_sekcja 0x0000FF00: { _start_moja_sekcja = .; *(.moja_sekcja) *(.moja_sekcja.*) _end_moja_sekcja = .; } > rom

i w ten sposob w kodzie otrzymasz zmienne: _start_moja_sekcja; _end_moja_sekcja; zawierajace adres poczatku i konca twojej sekcji (Uwaga sa to zmienne bez rozmiaru - zapis pod ten adres spowoduje nadpisanie sekcji nastepujacej po zmiennej)

Reply to
cepu69

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.