PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Vorsicht bei SW-UART



PicNick
05.07.2005, 12:51
Anlässlich eines längeren Threads hat sich folgendes herausgestellt, was bei der Verwendung der BasCom Soft-UART zu beachten ist:

Das Statement
OPEN "Comxxxxxxxx"
bewirkt zweierlei:
1 Die notwendigen Routinen werden vom BasCom eingebunden
2 Der angegeben Pin wird als Input/Output definiert und gesetzt.

Beides macht er je Source NUR EINMAL, egal, wie oft und wo es in der Source drinsteht.
d.h man muß darauf achten, das das OPEN statement nicht nur drinsteht, sondern auch EXEKUTIERT wird, bevor die Routinen verwendet werden.
besonders Punkt 2 ist bei "as output" heikel, da ja sonst das Port Pin vermutlich auf Input geschaltet bleibt. Und das heißt, der "Print #n " bewirkt absolut nix.

Für SW-Uart der "close #n" absolut überflüssig, er hat keine Funktion.

Heißt auch, man kann sich den Pin NICHT zwischendurch für was anderes ausborgen und dann halt wieder "OPEN" machen. (Wenn das wer vorhat)

Ich weiß nicht, ob das verständlich ist, Rückfragen gerne

JanB
05.07.2005, 13:52
sondern auch EXEKUTIERT wird,

Au weia, ein hartes Wort... :-)

Gruß Jan

PicNick
05.07.2005, 13:53
JanB, alter Kollege, bist du es ? wieder im Lande ?

(massakriert wollt' ich nicht nehmen)

Meissner
05.07.2005, 16:08
Hallo PickNick,

in der Tat, die Anweisung Close ist in Bascom-avr im gegensatz zu VB-Basic überflüssig. Diese Tatsache ist in der Hilfe und in der Literatur bereits dokumentiert. Das notwendige schließen des geöffneten Kanals wird nur aus Gründen der Kompatibilität mit Qbasic in BASCOM-AVR ausgeführt.
Achtung: auch wenn diese Funktion überflüssig ist muss diese immer im Programm eingegeben werden. Ein Tribut an Basic mit dem man noch wegen übersichtlichkeit des Quellcodes leben muss.

Gruß
Marius Meissner

PicNick
05.07.2005, 16:20
Klar, Marius, state-of-the-art und wegen der (möglichen) Portabilität, gibt's kein Open ohne close. Es sollt' sich nur keiner vorstellen, wie am PC, daß da irgendwelche Ressourcen freigegeben werden (können).

Vital wichtig ist, daß der "Open" am besten grundsätzlich ein für alle Mal vorn bei den diversen "Config" zu Hause ist, damit er sicher durchlaufen wird. Man muß wohl abraten, den Open in irgendwelchen Sub's (just in case) zu verstecken, auch wenn es Programm-strukturell eigentlich richtig wäre. Aber über sowas kann man diskutieren.

Meissner
05.07.2005, 18:13
Im Prinzip stimme ich Dir ganz zu, auf der anderen Seite ist nur mal so, dass wenn man beim jedem Problem eine Syntax Ausnahe macht, schnell ein Dialekt zustande kommt der sich immer mehr vom Basic entfernt.
Aus diesem Grund ist sicherlich geschickter beim vertrauten zu bleiben, auch wenn es auf den zweiten Blick unlogisch erscheint.
Ich bin mir sicher, dass dieses unwesentliches funktions Problem den allenwenigsten aufgefallen ist. Als fortgeschrittener Bascom-avr Nutzer ist es natürlich legitim dies zu hinterfragen. In dem Programm sind noch einige weitere inkonsistenzen die genauso hinterfragt werden können.

Gruß
Marius Meissner

PicNick
05.07.2005, 18:56
Im Grund sind wir uns ja vollkommen einig.

Nur zur Illustration, worums geht, und warum es eben schon aufgefallen ist.
es gab da einen Thread,
https://www.roboternetz.de/phpBB2/viewtopic.php?t=10552
der ursprünglich Rätsel aufgab. Keine compiler-error, eigentlich richtig, nicht optimal, aber richtig.
Und trotzdem ging's nicht.
Das konnt' ich nicht auf mir sitzen lassen, daß ich sowas nicht definitiv erklären kann. Aus meine Recherche stammen eben die obgenannten Weisheiten. Wenn man's mal weiß, ist alles klar.
OT: Du bist doch der Marius mit dem Basic -Buch ?

Also nochmals