[GCC] Deklaracja stałych na okreslonej pozycji

Nov 07, 2008 5 Replies

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


Zrób to z poziomu linkera.

Krzysiek Rudnik

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

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;

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

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)

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required