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
[GCC] Deklaracja stałych na okreslonej pozycji
Nov 07, 2008
5 Replies
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