- posted
16 years ago
ARM iar printf
- Vote on answer
- posted
16 years ago
Janusz pisze:
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
- Vote on answer
- posted
16 years ago
- Vote on answer
- posted
16 years ago
Janusz pisze:
a może: char * const tekst = "Do kompilatora -> To ma byc w pamieci programu"; .... printf("%s",tekst);
adam
- Vote on answer
- posted
16 years ago
Dnia 2008-01-02 12:05, Użytkownik Janusz napisał :
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ł
- Vote on answer
- posted
16 years ago
Janusz pisze:
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)?
- Vote on answer
- posted
16 years ago
Górski Adam pisze:
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).
- Vote on answer
- posted
16 years ago
- Vote on answer
- posted
16 years ago
Górski Adam pisze:
Chyba miał być wskaźnik na stały char, a nie stały wskaźnik na char...
pzdr mk
- Vote on answer
- posted
16 years ago
Janusz pisze:
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
- Vote on answer
- posted
16 years ago
mk pisze:
jedyne co mi przychodzi tak na szybkiego do glowy to ... obsluguje "bez kombinacji alpejskiej" rdzenie Cortex
- Vote on answer
- posted
16 years ago
Adam Dybkowski pisze:
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
- Vote on answer
- posted
16 years ago
mk pisze:
Racja powinno byc: char * const tekst const = "Do kompilatora -> To ma byc w pamieci programu";
Czyli stały wskaznik do stalej
Adam
- Vote on answer
- posted
16 years ago
Górski Adam pisze:
Coś tu jest nie tak ;-)
pzdr mk
- Vote on answer
- posted
16 years ago
mk pisze:
Tak ? a co ? Jeśli łaska oczywiście.
Adam
- Vote on answer
- posted
16 years ago
Górski Adam pisze:
To nie jest poprawna konstrukcja w języku C, ani C++. Jeżeli chcesz stały wskaźnik do stałej to powinno być:
const char * const tekst = ....
pzdr mk
- Vote on answer
- posted
16 years ago
mk pisze:
A jakie ma const dowiazanie - lewe czy prawe ?
Adam
- Vote on answer
- posted
16 years ago
In the darkest hour on Mon, 07 Jan 2008 16:52:42 +0100, Górski Adam <gorskia@> screamed:
const _foo_
- Vote on answer
- posted
16 years ago
Artur M. Piwko pisze:
A na jakiej podstawie ?
Adam
- Vote on answer
- posted
16 years ago
N.p. ISO/IEC 9899:1999 paragraf 6.7.5.1