mikrocontroller.net

Forum: PC-Programmierung CANoe / CAPL wie verwende ich RS232ByteCallback()


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von CAPL-User (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,

ich wüßte gerne wie ich die Callback-Funktion "RS232ByteCallback()" in 
CAPL richtig einsetze. Diese Funktion wird laut Handbuch aufgerufen, 
sobald ein Event (Zeihen gesendet  empfangen  Error) durch die 
serielle Schnittstelle ausgelöst wird. Mus ich die Funktion unter dem 
obigen Namen selber schreiben (und die über die Paramter empfangenen 
Daten darin auswerten) oder ist das als Deklaration für die Zuweisung 
eines Funktionspointers (auf eine Funktion die dann aufgerufen wird) 
gemeint? Aus dem Handbuch geht das nicht wirklich hervor. Bin für jeden 
Tipp dankbar!

Grüße

von Borislav B. (boris_b)


Bewertung
0 lesenswert
nicht lesenswert
In der Hilfe ist doch ein Beispiel:
// at node which listens to port 1 is connected to port 2
RS232ByteCallback(dword port, dword datum, dword note)
{
   // receive value 65 with port==1
}

In den CAPL-Knoten einfügen, wo die Daten empfangen werden sollen.
Du musst die Funktion also selber schreiben, aber den vorgegebenen Namen 
und die Signatur verwenden.


Allerdings ist die Funktion deprecated. Benutze lieber RS232Receive und 
RS232OnReceive:
byte mybuffer[20];
int mysize=20;
if ( 1==RS232Receive(1,mybuffer,mysize) )
  write(It works with port 1.);
...
RS232OnReceive( dword port, dword buffer[], dword number )
{
   // works after first RS232Receive !
   // buffer == mybuffer, 1<number<=mysize
}

: Bearbeitet durch User
von CAPL-User (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank! Interessant, dass die Funktion veraltet ist - habe ich aus 
einer Doku, die ich von der Vector-Seite runter geladen habe...

Beste Grüße!

von CAPL-User (Gast)


Bewertung
0 lesenswert
nicht lesenswert
ich gehe davon aus, dass onReceive bei JEDEM Event (also jedem 
empfangenen Zeichen) aufgerufen wird, korrekt? Oder wird da was 
gesammelt? Evt. bis MySize Zeichen empfangen wurden und dann wird 
OnReceive aufgerufen?

... und dass mySize die maximale Zahl der Zeichen darstellt, die 
empfangen werden - danach wird onReceive nicht mehr aufgerufen, oder?

von Borislav B. (boris_b)


Bewertung
0 lesenswert
nicht lesenswert
Ich glaube da wird gesammelt. Allerdings nicht, bis eine feste Anzahl 
von Zeichen erreicht ist. Das arbeiter eher wahlos ;-)
(Liegt aber an der Art wie der COM Port Funktioniert, nicht an CANoe).

Du solltest die Daten also empfangsseitig selber zusammensetzen.

von CAPL-User (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ok - das ist auch kein großes Problem. Eine Sache noch: Falls es mehrere 
aktive knoten gibt, die eine onReceive Funktion implementiert haben, 
werden dann eigentlich alle Funktionen aufgerufen oder nur diejenige des 
Knotens, der zuvor auch etwas gesendet hat?

von Borislav B. (boris_b)


Bewertung
0 lesenswert
nicht lesenswert
Ich denke, nicht, dass das was mit dem Senden zu tun hat. Schließlich 
musst du ja auch was empfangen können, ohne jemals etwas zu senden.

Vermutlich schlatest du mit Receive das Empfangen für diesen Knoten 
scharf. Wird dann etwas empfangen, wir der OnReceive Handler aufgerufen.

Andere Knoten bekommen davon nichts mit.

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.