Serielle ?

  • 1
  • 2
  • 3
  • 4
  • Page 3 of 4
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: Serielle ?

 · 
Posted: 28.08.2015 - 10:31  ·  #17
Hi Frank,

kannst du nicht mit der Pipe arbeiten ? WaitPipe(RXbuffer). Warten bis Daten da sind ......

Gruss
Harry
TheBeginner
Schreiberling
Avatar
Gender: n/a
Location: Wunsiedel Bayern
Age: 67
Posts: 766
Registered: 06 / 2013
Subject:

Re: Serielle ?

 · 
Posted: 28.08.2015 - 10:56  ·  #18
Moin Harry, das habe ich noch NIE gemacht, wenn ich pipe lese denke ich an pipeline :-)

Sorry, aber das ist mir zu hoch !

Ich Arbeite mit der guten alten if serstat then usw.... Case .... gehe Procedure.




Gruß Frank
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: Serielle ?

 · 
Posted: 28.08.2015 - 12:34  ·  #19
Hi Frank,

schau dir mal den GPS-Tacho an, speziell den Process zum einlesen der NMEA-Daten. Da wird das schnell klar, wie das funktioniert.

Harry
Harald_K
 
Avatar
 
Subject:

Re: Serielle ?

 · 
Posted: 28.08.2015 - 17:35  ·  #20
Ich nehme mal an, daß der Timeout-Wert ein Zähler in Systimer-Timerticks ist - sprich du wartest bei "20" 20 mal die Zeit, die du für den Systimer eingestellt hast ...

ansonsten vielleicht folgender Tipp:
In ganz aussichtslosen Fällen kann es hier und da auch einmal nützlich sein, das Handbuch zu lesen ;)


...oder doch einfach _rxcount abfragen, ob schon Zeichen da sind .... und ggf. auch wieviele ...
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: Serielle ?

 · 
Posted: 28.08.2015 - 17:59  ·  #21
oder SerStat abfrage. Hilft auch weiter...

rolf
TheBeginner
Schreiberling
Avatar
Gender: n/a
Location: Wunsiedel Bayern
Age: 67
Posts: 766
Registered: 06 / 2013
Subject:

Re: Serielle ?

 · 
Posted: 28.08.2015 - 18:51  ·  #22
Es geht mir nicht darum ob ein Zeichen da ist, das bekomme ich schon raus,
mit SerStat. Oder mit _rxCount...



Hier wartet das Programm bis 10 chars angekommen sind, danach gehts im Programm weiter.
Wird aber durch ein Fehler keine 10 Chars gesendet sonder zb. 3 hängt sich der uC auf.
Code

//var MenueHeader : string[10];
if SerStat then
   SerInpBlock(MenueHeader);  



Deswegen lieber so, damit ich raus komme nach einem TimeOut.
Code

    if SerStat then
        SerInpBlock_TO(MenueHeader,20);



Hat man danach noch einen CASE MenueHeader[0] OF .... kann ich danach den RXBuffer erstmal löschen. Und neu auf Daten warten.


Deswegen meine Frage nach den (,20).


Gruß Frank
Harald_K
 
Avatar
 
Subject:

Re: Serielle ?

 · 
Posted: 28.08.2015 - 19:39  ·  #23
Ok, du willst also nicht nur 10 Zeuchen haben, sondern 10 Zeichen in definierter Zeit.

Da hst du mit dem timeout nur das prob, daß du für diese Timeoutzeit ( (1+8+2)*10/115200 Sekunden) die Kontrolle an die Empfangsroutine abgibst sobald 1 Zeichen da ist ....

sagen wir mal wir ham ne
var: waitblock : systimer;
deklariert ...

dann hast du mit

...
if not serstat
then setsystimer(waitblock, passendezeit);
else
if issystimerzero(waitblock) then flushbuffer; endif;
if _rxcount > 9 then
serinpblock(..)
verarbeitedaten;
endif;
endif;
....

die CPU-Leistung für andre Sachen frei.

flushbuffer könnte man dann z.B als serinpblock( data, _rxcount); realisieren
Gunter
Administrator
Avatar
Gender:
Location: Frankfurt Main / Germany
Posts: 1697
Registered: 02 / 2003
Subject:

Re: Serielle ?

 · 
Posted: 28.08.2015 - 20:06  ·  #24
Hi,
Quote by Harald_K
das prob, daß du für diese Timeoutzeit ( (1+8+2)*10/115200 Sekunden) die Kontrolle an die Empfangsroutine abgibst sobald 1 Zeichen da ist ....

nein, eben nicht. Das wird im Systick überwacht und belastet die CPU nur ganz minimal.

Gunter
  • 1
  • 2
  • 3
  • 4
  • Page 3 of 4
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 14   137   151 · Page-Gen-Time: 0.028705s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI