scanf_P

Füzesi Arnold arno at freemail.hu
Sun Feb 15 17:49:20 CET 2004


Sziasztok!

Elfogyott a RAM az atmega-ban, at kell tennem a stringek formatumstringjet a
flash-be.

Oromteli modon az IAR (is) tamogatja ezt az sprintf_P(), scanf_P()
fuggvenyekkel.

Visztont:
Ezeknek (static const __flash*) tipusu formatumstring kell.
Namost keresgettem a google-el egy sort, hogy lehetne elegansan megoldani,
hogy ne kelljen kulon deklaralnom a stringet, hanem rogton meg tudjam adni
az sprintf_P fuggvenynek.

Szoval tudjak ilyet csinalni: sprintf_P(buf, "Annyi%3d",ennyi);

Alapbol ez nem megy. :(

Csak igy:
{
   __flash const static char mystring[]="OK?                 ";
    sprintf_P(menuitems[3].mstring,mystring);
}

Ez kicsit fapados megoldas, kenyelmetlen hasznalni...

A google-el talaltam egy-ket dolgot.
Nevezetesen a GCC pgmspace.h file-jat, amelyikben
igy oldjak meg:
#define  PSTR(s)   ({static char __c[] PROGMEM = (s); __c;})

Aztan lehet igy hasznalni
    sprintf_P(menuitems[3].mstring,PSTR("OK                    "));

Atirtam a PSTR-t az IAR altal emesztheto formatumra, de nem muxik, es
fogalmam nincs miert.
IAR anyazik.
GCC mintapeldakban pedig igy hasznaljak...

Kicsit furcsallom a fuggvenyattributumon belüli blokk "csinalast", de
ezekszerint nem 100% hulyeseg, mert
a GCC megeszi.

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

Otlet?

Arnold



More information about the Elektro mailing list