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

Re: hwcom senden müll - gelöst ... aber wichtig ! Kategorie: Sonstige Hardware (von André H. - 8.11.2004 13:45)
Als Antwort auf hwcom senden müll - gelöst ... aber wichtig ! von Helmut Scherzer - 5.11.2004 22:05
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT V3.0
Hallo Helmut,

Wie Krassos schon schreibt, steht dies bereits im Handbuch.
Was jedoch nicht im Handbuch steht, ist, daÃ? man sehr wohl auch lokale Variablen
benutzen kann. Allerdings ist es hier äu�erst wichtig, da� man vor dem Rücksprung
aus der Funktion wartet, bis das Array fertig gesendet wurde.
Die erledigt ein einfaches wait hwcom.ready(); am Ende der Funktion.

Ich werde allerdings noch einen Hinweis hierfür in die Hilfe-HTML bei der nächsten
�nderung der COM-Module einfügen. Das kann jedoch noch etwas dauern.
(Ich hab' z.Zt. keine Ã?nderungen geplant.)

So etwas jedoch in den Header eines Moduls zu schreiben halte ich doch für sehr übertrieben.

MfG André H.

PS: Eine Bitte: Benutze bitte die Code-Tags, wenn Du C2-Quellcode postest.
      Dann brauchst Du auch nicht die Schlüsselworte einzeln Fett formatieren.


> Dieses Problem ist gelöst. Aber wichtig für die 'Nachwelt'
>
> Folgendes Programm funktoniert ...
> thread main
> {
>   string s;
>   byte SendBuf[10];
>   stports.init();
>   hwcom.init();
>   hwcom.setspeed(hwcom.SPEED_9600);
>
>   while(1)
>   {
>     SendBuf[0] = 0x01;
>     SendBuf[1] = 0x01;
>     SendBuf[2] = 0x02;
>     SendBuf[3] = 0x03;
>     hwcom.send(SendBuf[0], 4);
> // wait until keypressed ... usw.
>   }
>
> Folgende kleine �nderung erzeugt nur noch Müll in HWCOM
>
> function SendBytes()
> {
>   byte SendBuf[10];
>   SendBuf[0] = 0x01;
>   SendBuf[1] = 0x01;
>   SendBuf[2] = 0x02;
>   SendBuf[3] = 0x03;
>   hwcom.send(SendBuf[0], 4);
>   return;
> }
>
> // main ... usw.
>   while(1)
>   {
>     SendBytes();
> // wait until keypressed ... usw.
>   }
>
> Warum ? - Dauerte leider einige Stunden, ist aber ganz klar. SendBuf wird im zweiten Fall
> als lokale Variable angelegt. hwcom hat lt. Forum (Andre hat's oft erklärt) einen eigenen
> Thread und verwendet SendBuf nachdem wir schon wieder aus der function SendBytes
> zurück sind. Ergo ist der Stack geschrottet und der hwcom Thread findet die bytes nicht mehr.
>
> Ein gefährlicher Fehler, den man machen kann und viel Frust, bis es klar wird. Deswegen
> wollte ich auf diesen Fehler hinweisen. Aber Problem ist nun gelöst, auch Dank vieler Einträge
> zu diesem Thema im Forum, wo ich auf die Idee kam, daÃ? hwcom einen eigenen Thread benutzt.
> (Der Fall lohnt sich ggfs. in irgendeine Dokumentation aufzunehmen -
> Mein Vorschlag !!!!! Vielleicht direkt in den Header von HWCOM.C2 schreiben ....)
>
> Gruss ... Helmut


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

Das macht meine Heizung gerade


    Antwort schreiben


Antworten:

Re: hwcom senden müll - gelöst ... aber wichtig ! (von Helmut Scherzer - 8.11.2004 21:16)
    Re: hwcom senden müll - gelöst ... aber wichtig ! (von krassos - 8.11.2004 21:43)