/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
Bech_bb 500
kyllekylle 500
jdjespers.. 500
gibson 300
scootergr.. 300
molokyle 287
10  strarup 270
String & Function
Fra : Lars


Dato : 02-12-06 14:43

Hej
Jeg er ved at kode C til et AVR-board. Koden er opbygget i nogle
while løkker og i dem, vil jeg gerne kalde en funktion, der
udskriver status til et LCD-display og hyperterminal. Alt dette
virker fint, men mit problem ligger at sende tekst til status
funktionen, som så sender det videre.
while (Cnt<3)
{
Cnt++;
delay_ms(1000);
funcStatus(Cnt,"test txt");
};

Her er en del af en while-løkke. Der sender jeg Counter-værdier og
så har jeg leget med at sende noget teksten og lign. Men så jeg er
på bar bund, når det gælder char arrays og med at modtage string
osv. Jeg har siddet og læst beskrivelser på nettet og prøvet frem og
tilbage, men...

   char msg[50];
   char k;   
   void funcStatus (int Cnt,char msg)
   {   
    lcd_gotoxy(0,0);
    sprintf(lcd_buffer,"%c",msg);
    lcd_puts(lcd_buffer);
    printf("%c",msg);
    }

Som plan B overvejede jeg at sende en talværdi og så bare lave
if-sætninger. Men jeg ville sæte pris på hvis nogle kunne hjælpe mig
med at lave det sidste bindeled, så det kan køre dynamisk.

/Lars

 
 
Kent Friis (02-12-2006)
Kommentar
Fra : Kent Friis


Dato : 02-12-06 14:47

Den Sat, 02 Dec 2006 14:43:08 +0100 skrev Lars:
>
>    char msg[50];
>    char k;   
>    void funcStatus (int Cnt,char msg)

Skal være "char * msg" for at du kan sende en streng. Ellers kan du
kunde sende et enkelt tegn.

>    {   
>     lcd_gotoxy(0,0);
>     sprintf(lcd_buffer,"%c",msg);

Skal være "%s" for string.

>     lcd_puts(lcd_buffer);
>     printf("%c",msg);

Og igen "%s".

>     }

Mvh
Kent
--
"So there I was surrounded by all these scary creatures
They were even scarier than what Microsoft call features"
- C64Mafia: Forbidden Forest (Don't Go Walking Slow).

Lars (02-12-2006)
Kommentar
Fra : Lars


Dato : 02-12-06 16:43

Okay, det var da en utrolig simpel syntaks, jeg har været rundt i
meget mere kode. Men dette giver fejlen "incompatible with its
declaration" på linierne, der kalder funktionen. Men dette er dog
noget pga avr-boardet og codevision, jeg fandt noget her:
http://www.epanorama.net/phpBB2/viewtopic.php?p=67584&sid=040098fbac24f937d252f90376a18050

Hans løsning stopper fejlen i compileren, men giver stadig ikke
noget output. Jeg ved næsten ikke hvad jeg kan tjekke. Jeg har
prøvet at skære funktionen helt ned til:
void funcStatus(char flash * msg)
   {
    printf("%s",msg);
   }

Og intet kommer, men hvis jeg skriver printf("test"); i main, kommer
der noget.
Der er et eller andet jeg overser, men det kan næppe være så få
linier kode...

/Lars

Henrik [6650] (02-12-2006)
Kommentar
Fra : Henrik [6650]


Dato : 02-12-06 17:06

"Lars" <debs@utysket.dk> skrev i en meddelelse
news:45719f0d$0$49203$14726298@news.sunsite.dk...
>.....Jeg ved næsten ikke hvad jeg kan tjekke. Jeg har
> prøvet at skære funktionen helt ned til:
> void funcStatus(char flash * msg)
> {
> printf("%s",msg);
> }
>
> Og intet kommer, men hvis jeg skriver printf("test"); i main, kommer
> der noget.
> Der er et eller andet jeg overser, men det kan næppe være så få
> linier kode...
>
> /Lars

Hej,

Du skal rette din formatstring til at forvente en streng placeret i FLASH
memory, når din pointer peger på FLASH memory.

Altså, ret "%s" som angiver streng i RAM til "%p" som angiver streng i FLASH
og du skulle være kørende.

Bemærk i øvrigt at CodeVisions printf funktion er ganske skrællet i forhold
til normal C standard library udgaven, så check evt. CodeVision manualen.

Håber det hjælper!

Mvh
Henrik



Lars (02-12-2006)
Kommentar
Fra : Lars


Dato : 02-12-06 22:08

Henrik [6650] wrote:
> Altså, ret "%s" som angiver streng i RAM til "%p" som angiver streng i FLASH
> og du skulle være kørende.

Perfekt! Jeg takker jer begge mange gange.
Jeg tænkte at jeg ville gøre det"rigtige" denne gang og kigge i
codevision pdf-filen og der stod det som %s ved char flash function.
Men skidt med det nu...

/Lars

Søg
Reklame
Statistik
Spørgsmål : 177554
Tips : 31968
Nyheder : 719565
Indlæg : 6408857
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste