Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: type definition string Kategorie: Programmierung (von André H. - 25.03.2007 14:34)
Als Antwort auf type definition string von wernerAZ - 22.03.2007 20:28
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT V3.0, OSOPT V3.1
Hallo Werner,

Das Problem liegt am eigenen Datentyp.
Genaugenommen sind eigene Datentypen einfache Arrays(Byte, Integer etc.).
"Elemente" aus eigenen Datentypen können, wenn es sich um Strings handelt,
aber nicht so ohne weiteres einer Funktion übergeben werden, welche explizit
einen String erwartet.
Ein String in einem eigenen Datentyp wird aber mehr wie ein Bytearray mit 32 Elementen
vom Compiler behandelt. (Prinzipiell ist ein String auch nicht mehr.)
Das ist leider ein allgemeines Problem bei eigenen Datentypen im Zusammenhang mit Strings.
Abhilfe schafft hier eine geänderte Funktion str.length():
//-----------------------------------------------
  inline function length ( byte s[] ) returns int
//-----------------------------------------------
{
  inline vmcodes.VM_STRING | (vmcodes.STRING_GET_LENGTH << 8);
}


Alternative kannst Du für touchlcd.c2 auch eine neue Funktion text() verwenden:
/*************************************/
/* String ausgeben                   */
/*************************************/
const DIR[]='L','Z','R','O','M','U';
function text(byte dir,byte posX, byte posY, byte str[])
{byte i;
 //esc();
 put(ESC);
 put('Z');
 if dir<=5 put(DIR[dir]); else put(dir);
 put(posX);
 put(posY);
 for i=0 ... <str[31] put(str[i]);
 put(0);
}


Diese Funktion ist aus der 2.0beta von touchlcd.c2, die ich seit Sommer letzten
Jahres angefangen hatte, aber noch nicht veröffentlich habe.

MfG André H.



> Hallo zusammen,
> wieso funktioniert str.length(gps.breite) nicht?
>
> type gpsDaten
> {
> string kennung;
> string zeit;
> string status;
> string breite;
> string breiteB;
> string laenge;
> string laengeL;
> string speed;
> string grad;
> string datum;
> string gradM;
> string direction;
> string mode;
> string checksum;
> }
>
> thread main
> {
> string egal;
> egal="12345wert";
>
> gpsDaten gps;
> gps.kennung="$GPRMC";
> gps.zeit="135155.000";
> gps.status="A";
> gps.breite="4959.3687";
> gps.breiteB="N";
> gps.laenge="00813.8943";
> gps.laengeL="E";
> gps.speed="0.00";
> gps.grad="258.97";
> gps.datum="220307";
> gps.gradM="";
> gps.direction="";
> gps.mode="A";
> gps.checksum="*6c";
>
> lcdext.init();
> touchlcd.init();
> lcdext.print(egal);
> lcdext.print2(gps.breite);
> touchlcd.text('L',0,0,gps.breite,str.length(gps.breite)); //type mismatch, wieso?
> loop
>     {
>     }
> }
>

> mfg
> Werner


Antworten bitte nur ins Forum!
Fragen per EMail auf Forum-Postings werden nicht beantwortet!

Das macht meine Heizung gerade


    Antwort schreiben


Antworten:

Re: type definition string (von wernerAZ - 27.03.2007 11:25)