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.
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
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.
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.
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.
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.
> 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.
> 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?
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.
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.
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.