www.mikrocontroller.net

Forum: PC-Programmierung Extension PHP RS232 Return_String


Autor: Sebastian S. (bachelor)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute,

ich bin gerade dabei eine Extension für PHP zu schreiben, mit der ich 
die Serielle Schnittstelle auslesen kann.

Leider sind jedoch mein C++ nicht ausreichend. Was muss ich der Funktion 
RETURN_STRING übergeben das immer nur das eine Zeichen geschickt wird?
Die Funktion erwartet einen String.
ZEND_FUNCTION(readRS232){
  char InChar[1];
  InChar[0] = '\0';
  ReadFile( hCom, &InChar[0], 1, &BytesRead, NULL);
  RETURN_STRING(&InChar[0], 1);
}

Auch die in der Doku beschriebene Art Return_String aufzurufen 
funktioniert bei mir leider nicht.
http://devzone.zend.com/article/1021
ZEND_FUNCTION(readRS232){
  char *InChar;
  InChar = estrdup("");
  ReadFile( hCom, InChar, 1, &BytesRead, NULL);
  RETURN_STRING(InChar, 0);
}

Danke für eure Hilfe

Gruß S

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sebastian S. schrieb:
> funktioniert bei mir leider nicht
Wenn was nicht funktioniert, ist das ein untrügerisches Zeichen dafür 
das 'was falsch ist.
Was geht den nicht?

Autor: Sebastian S. (bachelor)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Läubi schrieb:
> Wenn was nicht funktioniert, ist das ein untrügerisches Zeichen dafür
> das 'was falsch ist.
> Was geht den nicht?

Was nicht funktioniert war mir bis heute morgen selber nicht klar!
Aber manchmal hilft es wenn man ein Nacht darüber schläft.

Ich möchte immer ein Zeichen von der Seriellen Schnittstelle lesen.
ReadFile( hCom, &InChar[0], 1, &BytesRead, NULL);
und dann an die RETURN_STRING übergeben
RETURN_STRING(&InChar[0], 1);
diese erwartet jedoch ein String, somit sucht die Funktion vom Pointer 
ab bis zum String Ende, welches jedoch nicht vorhanden ist und nur 
zufällig im Speicher hängt.
Lösung ist einfach ein String Ende selber hinzuzufügen.
  char InChar[2];
  InChar[0] = 3;
  InChar[1] = '\0';
  ReadFile( hCom, &InChar[0], 1, &BytesRead, NULL);
  RETURN_STRING(&InChar[0], 1);

Autor: Sebastian S. (bachelor)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für alle die hier mal durchkommen auf der Suche nach einer Lösung siehe
Beitrag "Re: RS232 mit PHP"

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.