Hallo mat-sche,
ich halte das Löschen des gesamten Bereichs zwar für überflüssig, aber wenn es jetzt funktioniert, ist es ja gut.
Sieht ein wenig nach Holzhammermethode aus. Dir geht dadurch der ganze Vorteil des Overlays verloren.
Hallo mat-sche,
ich halte das Löschen des gesamten Bereichs zwar für überflüssig, aber wenn es jetzt funktioniert, ist es ja gut.
Sieht ein wenig nach Holzhammermethode aus. Dir geht dadurch der ganze Vorteil des Overlays verloren.
@for_ro
"Dir geht dadurch der ganze Vorteil des Overlays verloren."
Na eigentlich nicht!?! Ich lege ja mir einen String über den Bytebuffer weil ich dann damit weiter als String arbeiten kann und ich nicht extra eine for/next Schleife bauen müsste, um die Daten aus dem Buffer in den String zu bekommen. Und ich benötige nur für den Zeitraum bis zum neuen Empfang neuer Daten die Daten aus dem Bytebuffer...
Oder sehe ich da was falsch?
Nun ja, es ist die Hammermethode, aber so bin ich mir sicher, dass alle Zeichen im _RS232INBUF1 auf 0 liegen. Es koste Zeit die Bytes zu löschen.... ich werde nochmal darüber nachdenken
Aber Dank dennoch an alle und noch einen schönen Sonntag!
Grüße MAT
Wenn du dir sicher sein kannst, dass während der String-Verarbeitung kein neues Zeichen eintrifft, wird das so schon funktionieren.
Allerdings dauert ein memcopy länger als ein einfaches str1=str2, keine Ahnung warum. Zumindestens im Sim ist das so.
Wie häufig kommen denn die Übertragungen und sind sie in regelmäßigen Abständen? Welche Baudrate benutzt du dabei?
Das löschen kannst du dir sparen
aaaaaaaaaaaaaaaaaber:
Der Bascom _inuff ist ein Ringbuffer, d.h. wenn daten rein kommen, stehen die meist NICHT am Buffer anfang.
Über den direkt einen string zu "overlayen" funzt nicht,.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Da der Ringbuffer in der ISR asynchron beschrieben wird, müsst man sicher sein können, dass während der o.a. verarbeitung bis zum clear nix reinkommt, denn sonst ist das weg. Zuverlässiger Empfang ist anders.
Aber jeder soll schreiben, wie er glaubt.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Na da hab ich ja was angezettelt.....
Alllssssoooo:
beide haben recht, sag ich mal so. In meiner Situation funktioniert das hervorragend. Der Vorteil eines Overlay ist, dass ich nicht extra die Werte aus dem Ringbuffer in eine Stringvariable einlesen muss.
Ich weiß wann und was in den Buffer gelegt wird und das ist mein Vorteil. Über
den Serial1bytereceived Interrupt bekomme ich mit, wann ein Zeichen in den Buffer gelegt wird. Dann starte ich einen Timer, über den ich dann das Ende abwarte. Also wenn kein Zeichen mehr rein kommt, dann läuft mein Timer über, setzt mir eine Variable und in einer Do - Loop lese ich dann den Buffer ein, setze den Counter wieder auf Null und leere den Buffer. Hier hatte ich das Problem, dass ich mit dem Overlay immer alle Zeichen im Buffer eingelesen habe und das wollte ich nicht.Code:Serial1bytereceived: Pushall If Gsm_ini = 1 Then Incr Byte_in_count If Byte_in_count = 1 Then Enable Timer0 Start Timer0 End If Timer_count = 0 End If Popall Return
Es geht hierbei um Einlesen von bestimmten Zeichen wie z.Bsp. das Eintreffen einer SMS oder das Klingeln meines GSM-Modems. Da ich ja das "Absenderhandy" steuere, weiß ich wie oft ich ein Handlung mache wie z.Bsp. das Klingeln oder das Senden einer SMS...
Wenn wir schon einmal dabei sind, in der Serial1bytereceived Interruptroutine sollte ich laut der Hilfe vorher die Register sichernush/popAll. Ich weiß nun nicht genau warum dies gemacht werden soll und ob es nötig wäre. Kann mir jemand von Euch dies erklären?
Na gut, bin auf Antworten gespanntund wünsch ein schönen Abend!
Was meinst du damit?
Wenn ein Zeichen empfangen wurde, wird eine separate ISR angesprungen, die das Zeichen in den RingBuffer schreibt und die Counter erhöht.
Anschließend wird zum Label Serial1bytereceived gesprungen. Nun kann man den Inhalt auswerten.
Finde ich ziemlich synchron.
Lesezeichen