string an prozedur in codevision wie ?

Gast #104908
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
Gast #104909
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);
Gast #104910
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
Gast #104911
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);
Gast #623336
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
Gast #623368
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
Gast #623380
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren