ARM iar printf

Loading thread data ...

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

Reply to
mk

Janusz pisze:

a może: char * const tekst = "Do kompilatora -> To ma byc w pamieci programu"; .... printf("%s",tekst);

adam

Reply to
invalid unparseable

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ł

Reply to
Michał Baszyński

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

Reply to
Adam Dybkowski

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

Reply to
Adam Dybkowski

Górski Adam pisze:

Chyba miał być wskaźnik na stały char, a nie stały wskaźnik na char...

pzdr mk

Reply to
mk

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

Reply to
mk

mk pisze:

jedyne co mi przychodzi tak na szybkiego do glowy to ... obsluguje "bez kombinacji alpejskiej" rdzenie Cortex

Reply to
Raven

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

Reply to
invalid unparseable

mk pisze:

Racja powinno byc: char * const tekst const = "Do kompilatora -> To ma byc w pamieci programu";

Czyli stały wskaznik do stalej

Adam

Reply to
invalid unparseable

Górski Adam pisze:

Coś tu jest nie tak ;-)

pzdr mk

Reply to
mk

mk pisze:

Tak ? a co ? Jeśli łaska oczywiście.

Adam

Reply to
invalid unparseable

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

Reply to
mk

mk pisze:

A jakie ma const dowiazanie - lewe czy prawe ?

Adam

Reply to
invalid unparseable

In the darkest hour on Mon, 07 Jan 2008 16:52:42 +0100, Górski Adam <gorskia@> screamed:

const _foo_

Reply to
Artur M. Piwko

Artur M. Piwko pisze:

A na jakiej podstawie ?

Adam

Reply to
invalid unparseable

N.p. ISO/IEC 9899:1999 paragraf 6.7.5.1

Reply to
tbird

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.