Forum: Mikrocontroller und Digitale Elektronik string an prozedur in codevision wie ?


von mike (Gast)


Lesenswert?

hi

wie kann ich in codevision einen string an eine prozedur übergeben ?
mit dem ccs c-compiler für pics ging es einfach
  printf(name meiner lcd routine,"mein text");
so konnte ich einfach einen string auf zb. ein lcd schreiben oder an
jede andere prozedur übergeben.

seit avr und codevision klappt das nicht mehr, es kommt die warnung
"suspicious pointer conversion" und auf dem display kommt nur schrott
an.
mein zweiter versuch einen string zu übergeben war
 lcd_put(unsigned char string[])
 {
  ..meine lcd routine
 }

beim aufruf mit "LCDSHOW("mein text");" kommt dann
"function parameter incompatibel with its declaration" , warum ?

eine möglichkeit wäre eine globales array, zu verwenden in das ich
meinen string schreibe und die lcd-routine greift dann darauf zu, aber
ist das speicherplatzverschwendung und nicht sehr komfortabel. forum
und goggle bringen mir nichts hilfreiches, vieleicht hat wer von euch
den entscheidenden tip für mich ?

thx
mike

von crazy horse (Gast)


Lesenswert?

also ich schreibe meine Texte immer gern alle zusammenhängend an einen
Platz im Programm und nicht überall verstreut, vereinfacht Wartung und
Änderungen erheblich.
flash unsigned char text1[]="bla";
flash unsigned char text2[]="blabla";

ausgeben kannst du es dann ganz einfach mit
lcd_putsf (text1);

von mike (Gast)


Lesenswert?

hi crazy horse

danke für die antwort aber es geht mir nicht darum statische texte aus
flash oder eeprom auszugeben. ich schaffe es nicht einen string an eine
prozedur zu übergeben aber bei codevision ist zb. eine fertige
lcd-routine dabei bei der ich mit
   lcd_putsf("Hello world");
einen string direkt übergeben kann. die aufgerufene prozedur ist in
lcd.h wie folgt deklariert
   void lcd_puts(char *str);
wenn ich allerdings eine eigene prozedur auf diese weise deklariere und
aufrufen will kommt wieder "function parameter incompatibel with its
declaration", warum klappt das nicht ?

diese mitgelieferten lcd routinen kann ich nicht verwenden da ich ein
T6963display mit meinen eignen routinen ansprechen will und da nützen
mir die nichts.

mfg
mike

von Tobias A. (Gast)


Lesenswert?

Hi

also wenn Du was mit Strings machen willst, musst Du
IMHO in Codevision erst ein Array von Char anlegen und
auch die Größe festlegen.
Dann im Bedarfsfall so was wie


char ausgabe[4];

//BLABLABLA

lcd_puts(ausgabe);

von Roberto (Gast)


Lesenswert?

Hallo Leute

Bin noch Anfänger aber ich knappere leider gerade an dem gleichen 
Problem :-(

Beispiel:
----------------------------------
#include <avr/io.h>
#include <string.h>

char puffer[30];

void LCD(char *text)
{

}

void main()
{
LCD("test");
}
----------------------------------
Dieser Code funktioniert unter WinAVR aber leider nicht unter Codevison 
:-(
Es kommt die Meldung:
parameter #1 of type 'flash unsigned char*' is incompatible with type
'unsigned char*' specified in the funktion 'LCD' declaration

Dann probiere ich es mit flash:
------------------------------------
#include <avr/io.h>
#include <string.h>

char puffer[30];

void LCD(flash unsigned char *text)
{

}

void main()
{
LCD("test");
}
----------------------------------
Dann meckert der Compiler nicht mehr !!

Leider kann ich aber den String nicht weiterverarbeiten:
----------------------------------
#include <avr/io.h>
#include <string.h>

char puffer[30];


void LCD(char *text)
{
strcpy (puffer,text); // <----------
}


void main()
{
LCD("test");
}
-----------------------------------
Da meckert wieder der Compiler! :-( :-(
Unter WinAVR funktioniert es.

Wer weis da Rat?
Bitte kann mir jemand da einen Tipp geben, wie man das bewältigen kann.

l.G. Robert

von let (Gast)


Lesenswert?

Beim CV landen Stringkonstanten immer im Flash, d. h. dein
"test" hat den Typ 'flash char*'.
CV stellt Funktionen zum Kopieren vom Flash ins RAM zur
Verfügung (hier 'strcpyf()'):

----------------------------------
#include <avr/io.h>
#include <string.h>

char puffer[30];


void LCD(flash char *text)
{
   strcpyf (puffer,text);
}


void main()
{
   LCD("test");
}
-----------------------------------

Das sollte gehen. Die Funktionen findest du in der Doku/Hilfe
unter "String functions".


 - Michael

von Roberto (Gast)


Lesenswert?

Hallo Michael

Danke für die sehr schnelle Antwort!:-)
Du hast mir sehr geholfen :-)

Gibt es eigentlich eine oft gebrauchte Anlaufstelle für CodeVision?
Vielleicht eine Userliste oder Forum? (Vielleicht was in Deutsch?)

l.G. Robert

von let (Gast)


Lesenswert?

http://tech.groups.yahoo.com/group/codevisionavr

Ist allerdings englisch.


 - Michael

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.