gcc string relocation

Fuzesi Arnold arno at externet.hu
Fri Apr 23 11:25:11 CEST 2004


----- Original Message ----- 
From: <ide.ne.irj at freemail.hu>
To: <elektro at tesla.hu>
Sent: Thursday, April 22, 2004 6:31 PM
Subject: Re: gcc string relocation


> Oops, ilyen is van? Mifele busz az?

Lakásautomatizáláshoz használják.

> > kapcsolatban, de most mar latom, nem is akkora hulyeseg...
> > de miert nem jo pl inline fuggvenyt irni makro helyett?
>
> Persze hogy nem hulyeseg, de nem en irtam, hanem Arnold :))

:)
Kiderült közben tud inline fgv-t az IAR.
Vmi #pragma direktivat kell a fgv neve ele nyomni.

> de annyira nem erdekel... Ez a valtozo parameterhosszusagu
> prepocesszor makro jo lett volna, sajna az IAR nem tamogatja,
> ugyhogy ennyi, igy marad, tul nagy turast nem er meg nekem.

Multkor elhangzott a felmegoldas.
At kell csoportositani a fgv parametereket a makroban, es akkor meg van
oldva.
Kicsit ronda, de annyira nem mint amennyire hasznos.

> Tehat a problema az, hogy a sztring konstans tarolasi osztalyat nem
> tudod definialni a fuggvenyhivasban. Ha egy valtozoba beteszed elotte,
> akkor termeszetesen nem problema.

Igazából lehet, de csak külső RAM-ba. Egy forditó opció.

> De lehet hogy a gcc-ben megy.
> Idezetek a megapeg-bol:
> (lib/printf_P.h)
>
> extern void _printf_P (char const *fmt0, ...);
>
> #define printf(format, args)  _printf_P(PSTR(format) , ## args)
>
> Mi az a PSTR? Nem vilagos, de ez lenne a _tuti_ megoldas.

#define PSTR(s)   ({__flash const static char __c[]= (s); __c;})

Semmi extra. Egy flash konstans tombot definial kezdoertekkel.

> A PSTR-t az IAR nem ismeri, de eleg valoszinu, hogy letezik megoldas.

Ha megadod a fenti sort akkor ismeri.
Az a fő gond, hogy uj blokkot nem lehet nyitni fugvenyparameteren belul.
(Vagy változót deklarálni.)
GCC-ben igen.
Magyarul printf_P(PSTR("helo")) nem muxik, mert:
printf_P(({__flash const static char __c[]= (s); __c;})) -tol meghibban az
IAR.
Valahol megertem. :))


Arnold




More information about the Elektro mailing list