Goto page 1, 2 Next
Janusz
Guest
Wed Jan 02, 2008 10:00 am
Witam
Czy jest coś w stylu printf_P(PSTR("hello")) w IAR dla ARMów?
printf mi działa dobrze ale chciałbym alby texty były w pamięci programu.
Jak to zrobić ?
Pozdrawiam
Janusz Brela
mk
Guest
Wed Jan 02, 2008 10:56 am
Janusz pisze:
Quote:
Witam
Czy jest coś w stylu printf_P(PSTR("hello")) w IAR dla ARMów?
printf mi działa dobrze ale chciałbym alby texty były w pamięci programu.
Jak to zrobić ?
A skąd wytrzasłeś coś takiego jak printf_P, bo w bibliotece standardowej
czegoś takiego nie ma. Co ta funkcja ma robić?
Po pamięci możesz pisać funkcją z biblioteki standardowej o nazwie sprintf.
pzdr
mk
Janusz
Guest
Wed Jan 02, 2008 12:05 pm
Użytkownik "mk" <REVERSE_lp.pw@myzskm.REMOVE> napisał w wiadomości
news:flfn50$apo$1@news.wp.pl...
Quote:
Janusz pisze:
Witam
Czy jest coś w stylu printf_P(PSTR("hello")) w IAR dla ARMów?
printf mi działa dobrze ale chciałbym alby texty były w pamięci programu.
Jak to zrobić ?
A skąd wytrzasłeś coś takiego jak printf_P, bo w bibliotece standardowej
czegoś takiego nie ma. Co ta funkcja ma robić?
Po pamięci możesz pisać funkcją z biblioteki standardowej o nazwie
sprintf. pzdr
mk
Chyba kolega nie przeczytał do końca.
Chodzi o funkcję wyświetlającą napis z pamięci programu.
--
--
JJJK
Górski Adam
Guest
Wed Jan 02, 2008 1:39 pm
Janusz pisze:
Quote:
Witam
Czy jest coś w stylu printf_P(PSTR("hello")) w IAR dla ARMów?
printf mi działa dobrze ale chciałbym alby texty były w pamięci programu.
Jak to zrobić ?
Pozdrawiam
Janusz Brela
a może:
char * const tekst = "Do kompilatora -> To ma byc w pamieci programu";
.....
printf("%s",tekst);
adam
Michał Baszyński
Guest
Wed Jan 02, 2008 2:58 pm
Dnia 2008-01-02 12:05, Użytkownik Janusz napisał :
Quote:
Witam
Czy jest coś w stylu printf_P(PSTR("hello")) w IAR dla ARMów?
printf mi działa dobrze ale chciałbym alby texty były w pamięci
programu.
Chyba kolega nie przeczytał do końca.
Chodzi o funkcję wyświetlającą napis z pamięci programu.
pytanie tylko czy w ARM-ach takie rozróżnienie ma sens?
Przecież w nich te obszary nie są rozdzielone w sposób wymagający innego
rodzaju adresowania, tak jak to mam miejsce w AVR?
Pozdr.
Michał
Adam Dybkowski
Guest
Thu Jan 03, 2008 12:35 am
Janusz pisze:
Quote:
Czy jest coś w stylu printf_P(PSTR("hello")) w IAR dla ARMów?
printf mi działa dobrze ale chciałbym alby texty były w pamięci programu.
Funkcja printf_P i makro PSTR to "wynalazki" specyficzne dla avr-gcc i w
ogóle platformy AVR, gdzie są rozdzielone obszary adresowe pamięci
programu i danych. I trzeba właśnie robić takie sztuczki aby wypisać
ciąg znaków z pamięci programu.
W platformie ARM (np. w kompilatorze arm-elf-gcc) piszesz normalnie:
printf ("ABCD");
i ciąg znaków zostanie umieszczony w sekcji stałych (.rodata). Gdzie tą
sekcję fizycznie wsadzisz to już twoja sprawa i zawartości pliku
sterującego linkowaniem. Jeżeli program wciśniesz np. w procesor z
pamięcią Flash (przykładowo AT91SAM7S256) to i ciąg znaków będzie tam
zawarty. Domyślnie sekcje .text i .rodata umieszcza się w pamięci
stałej, a sekcje .bss i .data w pamięci RAM.
Pewnie IAR ma podobnie, ale dlaczego boisz się użyć gcc (np. z pakietu
gnuarm)?
--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/
Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.
Adam Dybkowski
Guest
Thu Jan 03, 2008 12:36 am
Górski Adam pisze:
Quote:
char * const tekst = "Do kompilatora -> To ma byc w pamieci programu";
....
printf("%s",tekst);
Napisanie ciągu znaków w cudzysłowach (tak jak powyżej "%s") już
wystarczy aby kompilator umieścił go w sekcji .rodata czyli w pamięci
niezmienianej podczas działania programu (np. Flash).
--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/
Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.
Janusz
Guest
Thu Jan 03, 2008 8:18 am
Quote:
W platformie ARM (np. w kompilatorze arm-elf-gcc) piszesz normalnie:
printf ("ABCD");
i ciąg znaków zostanie umieszczony w sekcji stałych (.rodata). Gdzie tą
sekcję fizycznie wsadzisz to już twoja sprawa i zawartości pliku
sterującego linkowaniem. Jeżeli program wciśniesz np. w procesor z
pamięcią Flash (przykładowo AT91SAM7S256) to i ciąg znaków będzie tam
zawarty. Domyślnie sekcje .text i .rodata umieszcza się w pamięci stałej,
a sekcje .bss i .data w pamięci RAM.
Pewnie IAR ma podobnie, ale dlaczego boisz się użyć gcc (np. z pakietu
gnuarm)?
ja się nie boje nawet bardzo mi sie podobał (WinAvr) ale nasi "górowie" od
programowania w pracy wolą IAR bo "lepszy".
dziękuje za odpowiedź
Pozdrawiam
Janusz Brela
mk
Guest
Thu Jan 03, 2008 10:43 pm
Górski Adam pisze:
Quote:
a może:
char * const tekst = "Do kompilatora -> To ma byc w pamieci programu";
.....
printf("%s",tekst);
Chyba miał być wskaźnik na stały char, a nie stały wskaźnik na char...
pzdr
mk
mk
Guest
Thu Jan 03, 2008 10:50 pm
Janusz pisze:
Quote:
ja się nie boje nawet bardzo mi sie podobał (WinAvr) ale nasi "górowie" od
programowania w pracy wolą IAR bo "lepszy".
W takim razie poproszę o rozwinięcie tematu:
ARM IAR jest gorszy od arm-gcc ponieważ...
Proszę pominąć wątek pt. "koszty zakupu", albo przynajmniej rozpatrywać
go w kontekście całkowitych kosztów użytkowania.
pzdr
mk
Raven
Guest
Thu Jan 03, 2008 11:45 pm
mk pisze:
Quote:
Janusz pisze:
ja się nie boje nawet bardzo mi sie podobał (WinAvr) ale nasi
"górowie" od
programowania w pracy wolą IAR bo "lepszy".
W takim razie poproszę o rozwinięcie tematu:
ARM IAR jest gorszy od arm-gcc ponieważ...
jedyne co mi przychodzi tak na szybkiego do glowy to
... obsluguje "bez kombinacji alpejskiej" rdzenie Cortex
Quote:
Proszę pominąć wątek pt. "koszty zakupu", albo przynajmniej rozpatrywać
go w kontekście całkowitych kosztów użytkowania.
pzdr
mk
Górski Adam
Guest
Fri Jan 04, 2008 12:50 pm
Adam Dybkowski pisze:
Quote:
Janusz pisze:
Czy jest coś w stylu printf_P(PSTR("hello")) w IAR dla ARMów?
printf mi działa dobrze ale chciałbym alby texty były w pamięci programu.
Funkcja printf_P i makro PSTR to "wynalazki" specyficzne dla avr-gcc i w
ogóle platformy AVR, gdzie są rozdzielone obszary adresowe pamięci
programu i danych. I trzeba właśnie robić takie sztuczki aby wypisać
ciąg znaków z pamięci programu.
W platformie ARM (np. w kompilatorze arm-elf-gcc) piszesz normalnie:
printf ("ABCD");
i ciąg znaków zostanie umieszczony w sekcji stałych (.rodata). Gdzie tą
sekcję fizycznie wsadzisz to już twoja sprawa i zawartości pliku
sterującego linkowaniem. Jeżeli program wciśniesz np. w procesor z
pamięcią Flash (przykładowo AT91SAM7S256) to i ciąg znaków będzie tam
zawarty. Domyślnie sekcje .text i .rodata umieszcza się w pamięci
stałej, a sekcje .bss i .data w pamięci RAM.
Pewnie IAR ma podobnie, ale dlaczego boisz się użyć gcc (np. z pakietu
gnuarm)?
Ja używałem zarówno GCC+Eclipse oraz IAR. Może to nie do końca to samo
bo to dla MSP430, ale moge porownac jakosc kodu z GCC i IAR.
IAR wypada dużo lepiej pod względem optymalizacji kodu. Ten sam kod
zajmuje dużo mniej miejsca ( optymalizacja na rozmiar ).
Adam
Górski Adam
Guest
Fri Jan 04, 2008 12:55 pm
mk pisze:
Quote:
Górski Adam pisze:
a może:
char * const tekst = "Do kompilatora -> To ma byc w pamieci programu";
.....
printf("%s",tekst);
Chyba miał być wskaźnik na stały char, a nie stały wskaźnik na char...
pzdr
mk
Racja powinno byc:
char * const tekst const = "Do kompilatora -> To ma byc w pamieci programu";
Czyli stały wskaznik do stalej
Adam
mk
Guest
Sun Jan 06, 2008 12:52 am
Górski Adam pisze:
Quote:
Racja powinno byc:
char * const tekst const = "Do kompilatora -> To ma byc w pamieci
programu";
Czyli stały wskaznik do stalej
Coś tu jest nie tak ;-)
pzdr
mk
Górski Adam
Guest
Mon Jan 07, 2008 4:06 pm
mk pisze:
Quote:
Górski Adam pisze:
Racja powinno byc:
char * const tekst const = "Do kompilatora -> To ma byc w pamieci
programu";
Czyli stały wskaznik do stalej
Coś tu jest nie tak ;-)
pzdr
mk
Tak ?
a co ?
Jeśli łaska oczywiście.
Adam
Goto page 1, 2 Next