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