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

Re: Integer in LowByte und HiByte zerlegen und über hwcom senden Kategorie: Programmierung (von André H. - 27.11.2004 14:33)
Als Antwort auf Re: Integer in LowByte und HiByte zerlegen und über hwcom senden von Michael Gierschner - 20.11.2004 13:50
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT V3.0
Hallo Michael,

> Wenn die Informationen des Handbuchs an dieser Stelle falsch sind, lasse ich mich natürlich gern von
> dir belehren.

Sorry. Ich bin gerade dabei das OS komplett zu analysieren, um nicht das Wort
Reverse-Engineering zu gebrauchen. ;-)
Hier kommen einige Unstimmigkeiten zu Tage

Um besser analysieren zu können, habe ich alle Sprungtabellen in gut lesbare Form gebracht.
Aber scheinbar hat sich hier ein kleiner Fehler, eine Art Zahlendreher, eingeschlichen,
welcher mich bei dem entsprechenden VM-Code auf die falsche Routine geführt hatte,
welche auch "etwas" mit Speicherzuweisung zu tun hat.

Man sieht, auch ich mache hin und wieder einen Fehler.
OK. Lokale Variablen werden durch Erweiterung des Stacks "geschaffen".
Die Grö�e des Stacks scheint dynamisch zu sein. Das mu� ich aber noch genauer untersuchen.
 

> So würde ich nicht unbedingt darauf vertrauen, dass ein CRLF anschlie�end gesendet, wie von dir
> vorgeschlagen, dazu führt, dass die lokale Variable länger lebt, als bis zum Ende der Funktion.

Ã?hh, warum sollte es hier zu Schwierigkeiten kommen.
Ein hwcom.put() verhindert hier eben ein vorzeitiges Beenden von Funktionen.
Und die Punktion hwcom.ret() führt eben zwei hwcom.put() aus.

 
> Allerdings widerspricht deine Methode auch in diesem Fall wieder der Information des Handbuchs.
> Auf Seite 102, Abschnitt "7.2.10 Senden von Datenrahmen" wird für die �bertragung von Bytepuffervariablen
> die Vorgabe gegeben  Zitat "Daher muÃ? die Bytepuffervariable statisch sein..." und das ist jedenfalls
> nicht bei lokalen Variablen der Fall.

Ja, dieses Kapitel kann man zur Hälfte in die Tonne werfen.
Bzw. muÃ? man neu schreiben.
Ich denke nur, daÃ? derjenige, der das Kapitel geschrieben hat, zu faul war, zu beschreiben,
was man beim Senden von lokalen Arrays beachten muÃ?.

Man kann sehr wohl lokale Arrays (auch Strings) zum Senden verwenden.
Wichtig ist nur, da� die Funktion eben nicht zurückspringen darf, bis fertig gesendet wurde.
Dies erreicht man mit einem wait hwcom.ready; an der richtigen Stelle.
Statt dem Warten kann man aber auch noch einzelne Zeichen vor dem Rücksprung ausgeben,
da alle COM-Sende-Funktionen warten, bis die Schnittstelle für eine �bertragung
wieder bereit ist. Also bis evtl. vorhergehende Arrays gesendet wurden.


> Also zusammengefasst:
> Um nicht vorhersehbare Nebeneffekte zu vermeiden, würde ich in diesem Fall auf die Verwendung von
> lokalen Feldvariablen verzichten, auch wenn es unter diesen und jenen Umständen vielleicht möglich ist.
> Vor allem Anfänger werden froh sein in diesem Bereich keine Fehler suchen zu müssen, weil sie vielleicht
> eine Randbedingung nicht beachtet haben.

Ich habe im Forum wirklich schon oft genug etwas darüber geschrieben.
Ich verwende in vielen Projekten lokale Arrays zum Senden von Daten. Und es gab
in dieser hinsicht noch keinerlei Probleme.
Man muÃ? eben nur wissen, auf was man achten muÃ?.

MfG André H.



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

Das macht meine Heizung gerade


    Antwort schreiben


Antworten: