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