-
11. Data: 2012-01-19 18:05:59
Temat: Re: ARM RIDE7 sekcje text, data i bss
Od: slawek7 <s...@w...pl>
Wiem co masz na mysli a slowo sztuczki bylo uzyte przeze mnie na
wyrost.
Moje pytanie powinno brzmiec jak w ARMach zadeklarowac jakas tablice
np tekst do umieszczenia w pamieci flash i jak potem odczytac?
-
12. Data: 2012-01-19 23:45:21
Temat: Re: ARM RIDE7 sekcje text, data i bss
Od: Michoo <m...@v...pl>
W dniu 19.01.2012 19:05, slawek7 pisze:
> Wiem co masz na mysli a slowo sztuczki bylo uzyte przeze mnie na
> wyrost.
> Moje pytanie powinno brzmiec jak w ARMach zadeklarowac jakas tablice
> np tekst do umieszczenia w pamieci flash
np przez dodanie:
__attribute__(( section(".text") ))
__attribute__(( section(".rodata") ))
Poza tym gcc chyba dane const wyrzuca do flash samo.
> i jak potem odczytac?
Zazwyczaj tablicę odczytuje się przez indeks (foo=tab[i];) lub przez
konwersję do wskaźnika (foo=*(tab+i);) ale chyba nie o to pytasz?
--
Pozdrawiam
Michoo
-
13. Data: 2012-01-20 02:24:48
Temat: Re: ARM RIDE7 sekcje text, data i bss
Od: JDX <j...@o...pl>
On 2012-01-19 19:05, slawek7 wrote:
> Wiem co masz na mysli a slowo sztuczki bylo uzyte przeze mnie na
> wyrost.
> Moje pytanie powinno brzmiec jak w ARMach zadeklarowac jakas tablice
> np tekst do umieszczenia w pamieci flash i jak potem odczytac?
*KOMPILATOR:*
$arm-none-eabi-gcc --version
arm-none-eabi-gcc.exe (Sourcery G++ Lite 2010.09-51) 4.5.1
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*ŹRÓDŁO:*
char tab1[3] = {'a', 'b', 'c'}; /* To ląduje w .data */
char tab2[3]; /* To ląduje w .bss */
const char tab3[3] = {'c', 'd', 'e'}; /* To ląduje w .rodata */
const char tab4[3]; /* To ląduje w .bss */
char *napis1 = "Napis 1.\n"; /* To ląduje w .data */
const char *napis2 = "Napis 2.\n"; /* To ląduje w .data */
char napis3[] = "Napis 3.\n"; /* To ląduje w .data */
const char napis4[] = "Napis 4.\n"; /* To ląduje w .rodata */
int main(int argc, char* argv[])
{
return (int)(tab1[0]+tab2[0]+tab3[0]+tab4[0]);
}
*KOMPILACJA:*
$arm-none-eabi-gcc -mcpu=arm7tdmi -nostdlib -Wl,-Map=testrom.map
-Wl,--entry=main -o testrom.elf testrom.c
No i teraz pooglądaj sobie plik .map i popatrz gdzie wylądowały
poszczególne tablice.
A to pod jakimi adresami będą znajdować się poszczególne sekcje i w
związku z tym w jakim rodzaju pamięci mają wylądować to już sobie
ustalasz sam pisząc (lub modyfikując) skrypt linkera. No i musisz mieć
świadomość tego, że czasami być może będziesz musiał dostarczyć własny
kod kopiujący odpowiednie sekcje z ROM do RAM jeśli domyślny nie wystarczy.
-
14. Data: 2012-01-20 02:31:12
Temat: Re: ARM RIDE7 sekcje text, data i bss
Od: JDX <j...@o...pl>
On 2012-01-20 00:45, Michoo wrote:
> np przez dodanie:
> __attribute__(( section(".text") ))
> __attribute__(( section(".rodata") ))
No to z lekka hardkor jest. :-) I assembler może pluć ostrzeżeniami. Ale
działa
> Poza tym gcc chyba dane const wyrzuca do flash samo.
Czasami wrzuca a czasami nie. :-) Patrz mój przykład. Tzn. jest tak, że
niektóre consty lądują w .rodata a inne w .data która na starcie jest
kopiowana do RAM i w związku z tym mamy duplikaty z których część jest
zapewne zbędna.
-
15. Data: 2012-01-20 07:11:24
Temat: Re: ARM RIDE7 sekcje text, data i bss
Od: Zbych <a...@o...pl>
W dniu 2012-01-20 03:24, JDX pisze:
> On 2012-01-19 19:05, slawek7 wrote:
>> Wiem co masz na mysli a slowo sztuczki bylo uzyte przeze mnie na
>> wyrost.
>> Moje pytanie powinno brzmiec jak w ARMach zadeklarowac jakas tablice
>> np tekst do umieszczenia w pamieci flash i jak potem odczytac?
>
> *KOMPILATOR:*
> $arm-none-eabi-gcc --version
> arm-none-eabi-gcc.exe (Sourcery G++ Lite 2010.09-51) 4.5.1
> Copyright (C) 2010 Free Software Foundation, Inc.
> This is free software; see the source for copying conditions. There is NO
> warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
>
> *ŹRÓDŁO:*
> char tab1[3] = {'a', 'b', 'c'}; /* To ląduje w .data */
> char tab2[3]; /* To ląduje w .bss */
> const char tab3[3] = {'c', 'd', 'e'}; /* To ląduje w .rodata */
> const char tab4[3]; /* To ląduje w .bss */
>
> char *napis1 = "Napis 1.\n"; /* To ląduje w .data */
> const char *napis2 = "Napis 2.\n"; /* To ląduje w .data */
W tym przypadku napis ląduje w .rodata, tylko sam wskaźnik napis2 jest
umieszczany w .data.
> *KOMPILACJA:*
> $arm-none-eabi-gcc -mcpu=arm7tdmi -nostdlib -Wl,-Map=testrom.map
> -Wl,--entry=main -o testrom.elf testrom.c
-
16. Data: 2012-01-20 08:04:30
Temat: Re: ARM RIDE7 sekcje text, data i bss
Od: "Artur M. Piwko" <m...@b...pl>
In the darkest hour on Fri, 20 Jan 2012 03:24:48 +0100,
JDX <j...@o...pl> screamed:
> *ŹRÓDŁO:*
> char tab1[3] = {'a', 'b', 'c'}; /* To ląduje w .data */
> char tab2[3]; /* To ląduje w .bss */
> const char tab3[3] = {'c', 'd', 'e'}; /* To ląduje w .rodata */
> const char tab4[3]; /* To ląduje w .bss */
>
> char *napis1 = "Napis 1.\n"; /* To ląduje w .data */
> const char *napis2 = "Napis 2.\n"; /* To ląduje w .data */
> char napis3[] = "Napis 3.\n"; /* To ląduje w .data */
> const char napis4[] = "Napis 4.\n"; /* To ląduje w .rodata */
>
Jeśli chodzi o napis2, sprawdź sobie to:
const char * s1 = "test";
char * const s2 = "test";
const char * const s3 = "test";
--
[ Artur M. Piwko : Pipen : AMP29-RIPE : RLU:100918 : From == Trap! : SIG:240B ]
[ 08:48:45 user up 13053 days, 20:43, 1 user, load average: 0.43, 0.95, 0.35 ]
There R 2 rules for ultimate success in life. 1. Never tell everything U know.