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