|
| 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
| |
|
|