Sida 1 av 2
Snabb fråga serial.available *KLART*
Postat: 15 april 2020, 12:09:17
av Henry
Vill bara ha det bekräftat, så hur fungerar serial.available och då tex i nedan exempel?
1. Data läses in vid första bit och sparas i bufferten tills ingen mer data kommer och först då blir ovan kod sann och går vidare.
2. Det blir sant direkt vid första bit oavsett om all data kommit eller ej.
Jag gissar på och hoppas att 1 stämmer?
Re: Snabb fråga serial.available
Postat: 15 april 2020, 12:12:14
av svanted
jag tror på 2...
den blir sann bara det finns 1 bit i bufferten, sen är det upp till koden att läsa den och tömma den.
om den fylls på eller inte spelar ingen roll.
edit:
obs det är inget svar, vill se om jag har rätt bara.
Re: Snabb fråga serial.available
Postat: 15 april 2020, 12:22:40
av hummel
Antar att det gäller arduino. Gissar att den blir större än noll när minst en hel byte data finns tillgänglig att hämta.
Re: Snabb fråga serial.available
Postat: 15 april 2020, 12:25:18
av Henry
Arduino ja, tänker då tex en string, många tecken, så vid första tecknet/byten så blir ovan sann och inte efter att allt kommit?
Re: Snabb fråga serial.available
Postat: 15 april 2020, 12:25:26
av Shimonu
Känner mig ganska säker på att det är antingen första byten eller efter en timeout efter att den slutat ta emot något. Man ska inte räkna med att det finns kompletta meddelanden utan man får bygga upp meddelandet själv och verifiera
.
Re: Snabb fråga serial.available
Postat: 15 april 2020, 12:29:23
av Borre
Arduino.cc har bra dokumentation som förklara alla funktioner, så läs här:
https://www.arduino.cc/reference/en/lan ... available/
Speciellt första stycket:
Get the number of bytes (characters) available for reading from the serial port. This is data that’s already arrived and stored in the serial receive buffer (which holds 64 bytes).
Så har en byte hamnat i buffern blir din kod sann, oavsett vad som kommer eller inte kommer senare.
Re: Snabb fråga serial.available
Postat: 15 april 2020, 12:36:06
av hummel
Henry skrev:Arduino ja, tänker då tex en string, många tecken, så vid första tecknet/byten så blir ovan sann och inte efter att allt kommit?
Hur skulle den veta när din andra enhet skickat klart meddelandet?
Re: Snabb fråga serial.available
Postat: 15 april 2020, 13:03:52
av Henry
Tja tänkte det kanske var baserat på max storleken på bufferten och den säg var som en array som stegas igenom och lägger vardera bit/byte i vardera steg och när bufferten kommit till sista steget så sätts den först då oavsett om de sista stegen var tomma eller ej.
Men jag läste nyligen att serial.available verkar låsa programmet eller nåt och då förlorar man ju extremt mycket tidmässigt om allt skall sparas först för att sedan ges tillgång till och således finns det då en fullt naturligt förklaring till att det bör vara som 2.
This is data that’s already arrived and stored in the serial receive buffer (which holds 64 bytes).
Jo har sett det men tog det lite som att det var datan som redan sparats i bufferten, alltså all mottagen info.
Men då vet jag, tack boys.

Re: Snabb fråga serial.available
Postat: 15 april 2020, 13:15:59
av Borre
Henry skrev:This is data that’s already arrived and stored in the serial receive buffer (which holds 64 bytes).
Jo har sett det men tog det lite som att det var datan som redan sparats i bufferten, alltså all mottagen info.
Ja, det är det.
Tänk dig din vanliga postlåda, stoppa i en liten tomtenisse som när du frågar hinom talar om hur många brev som finns i den.
Frågar du om det finns mer än 0 brev och det ligger ett eller flera brev i postlådan svarar tomtenissen ja på frågan.
Tomtenissen vet inte hur många brev som kommer nästa gång postbilen kommer, bara hur många brev som finns där vid den tidpunkt du frågar honom.
Re: Snabb fråga serial.available
Postat: 15 april 2020, 13:27:21
av Henry
Get the number of bytes (characters) available for reading from the serial port.
Skulle lagt till denna text med i ovan, alltså som jag läste det att alla tecken blivit nedsparade i bufferten och att man därefter kan läsa ut dom, men så är det alltså inte vet jag ju nu.
Re: Snabb fråga serial.available
Postat: 15 april 2020, 13:38:15
av sodjan
> så vid första tecknet/byten så blir ovan sann och inte efter att allt kommit?
Vad är "allt"? Och hur 17 ska Arduinon kunna veta vad som är "allt"???
I lite mer avancerade system så kan man ju ha I/O rutiner där man
t.ex. i anropet/läsningen kan ha sätta olika alternativ:
- Man anger en "terminator", d.v.s. att tecken som avslutar läsningen. <CR>, <ETX> eller liknande.
- Man anger en timeout då I/O avslutas, med eller utan data.
- Man anger ett antal tecken som läses in varefter I/O avslutas.
- Man anger att I/O avslutas direkt oavsett om det finns data att hämta eller inte.
Men i en Arduino så är det mer att du kan fråga "finns det någonting alls?" och
om det gör det så kan du hämta det. Men du vet inte om det var "allt" förrns
du med hjälp av rutiner i din egen kod har tittat på det du fick tillbaka.
Re: Snabb fråga serial.available
Postat: 15 april 2020, 13:42:09
av sodjan
> alltså som jag läste det att alla tecken blivit nedsparade i bufferten och att man därefter kan läsa ut dom,
Jo, så är det sannolikt, om serial.available ger ett antal tillbaka.
Men Arduinon kan ju inte veta om det är "allt", bara hur mycket den har i bufferten just nu.
Det är definitionen av begreppet "allt" som du hakar upp dig på...

Hur definieras det?
Re: Snabb fråga serial.available
Postat: 15 april 2020, 13:50:12
av rvl
Första inlägget talade om bit och inte byte, på den nivån har processorn koll på om "allt" för en byte kommit och bygger upp byten i en intern buffer innan den går vidare till den 64 byte långa buffern, vars fyllnadsgrad man kan fråga.
Re: Snabb fråga serial.available
Postat: 15 april 2020, 14:04:01
av Henry
Användandet av bit var mer bara en tanke för att visa på minsta mängd info, men intressant det där.
Sodjan: tänkte innan att om tex bufferten alltid blivit full på ett eller annat sätt oavsett om det så bara var en bit och inte bara för att just datan var inhämtad, som den ju som sagt inte kan veta, och således då först satt sant efter det vilket i så fall varit baserat på baudraten.
Men som jag skrev så vet jag nu att den inte funkar på det viset utan att den funkar så att "nu har första biten av infon kommit av vad som än är på väg, så du vet, men om det är allt eller inte har jag inte den blekaste om jag bara tar emot".
Jo det finns absolut olika varianter, har satt det så att så fort data detekterats väntar den några få ms så garanterat allt sparats ned. Sedan en timeout på säg en 10 ms vilket gör att bufferten raderas efteråt så inget är kvar till nästa gång. Nej det är inte direkt tidskritiska grejer.
Re: Snabb fråga serial.available
Postat: 15 april 2020, 14:29:16
av hummel
Minsta mängd data är fortfarande en byte med den diskuterade funktionen. Det kommer röra till det om du forsätter med bit. En seriell kommunikation består oftast av startbit, data bitar och paritetsbitar för varje mottagen byte du kan läsa med funktionen.