mikrocontroller.net

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


Autor: mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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);

Autor: mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Tobias A. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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);

Autor: Roberto (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: let (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Roberto (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: let (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://tech.groups.yahoo.com/group/codevisionavr

Ist allerdings englisch.


 - Michael

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.