gcc string relocation

Petrik Gergely spee at freemail.hu
Fri Apr 23 15:44:47 CEST 2004


On Fri, 23 Apr 2004, Fuzesi Arnold wrote:

> > 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.
na, nekem pl. ez is ujdonsag. ahany c forditoval eddig
talalkoztam, az mind inline void fn() formaban nyelvi
szinten tamogatta az inline fvenyeket, azert is tunt
magatol ertetodonek nekem az inline fv felvetes a vararg
makro helyett.

> > 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. :))
hurra, akkor egy alahuzastol eltekintve nekem is sikerult
portolnom IAR ala a PSTR makrot. kar, hogy nem muxik. :) de
azert jobban belegondolva az eredeti problemaba:

semmivel sem rondabb a kod attol, hogyha az elejen ki vannak
gyujtve a konstans stringek (mintha define-ok lennenek,
azokat is az elejere szokas tenni, es ugy is van jol).
nemcsak hogy nem ronda, de attekintheto is, es a
karbantarthatosaga is fenomenalis. nem kell az egesz kodot
atfesulni a kiirasok utan kutatva, ha pl angolrol norvegra
akarod forditani a programot. (i18n, uC-ken gyakori
problema lehet. :) es a tobbszor hasznalatos konstansok
megtalalasat se kell a forditora bizni, hatha hulye
szegeny. csak 2x annyit kell gepelni, ettol eltekintve jobb
igy...

--
G




More information about the Elektro mailing list