RTV forum PL | NewsGroups PL

Jak zdefiniować stałą w GCC dla STM32 w określonym miejscu pamięci?

[GCC] Deklaracja stałych na okreslonej pozycji

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Jak zdefiniować stałą w GCC dla STM32 w określonym miejscu pamięci?

ArekS
Guest

Fri Nov 07, 2008 8:48 am   



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... Wink
Pozdrawiam
Arek

--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl

Krzysztof Rudnik
Guest

Sat Nov 08, 2008 1:58 am   



ArekS wrote:

Quote:
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... Wink
Pozdrawiam
Arek


Zrób to z poziomu linkera.

Krzysiek Rudnik

ArekS
Guest

Mon Nov 10, 2008 10:53 am   



Krzysztof Rudnik pisze:
Quote:
ArekS wrote:

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... ;)

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

Zbych
Guest

Tue Nov 11, 2008 7:08 pm   



ArekS przemówił ludzkim głosem:

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

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;

Guest

Wed Nov 12, 2008 12:48 pm   



Quote:
ArekS przemówił ludzkim głosem:

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

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

--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl

cepu69
Guest

Wed Nov 12, 2008 2:51 pm   



Zbych wrote:
Quote:
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:

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)

elektroda NewsGroups Forum Index - Elektronika Polska - Jak zdefiniować stałą w GCC dla STM32 w określonym miejscu pamięci?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map