Skriva ut array, varför inte bara på ett sätt?
Skriva ut array, varför inte bara på ett sätt?
För att skriva ut innehållet i tex en char array på exempelvis serieporten så har jag sett exempel där man använder sig av en for loop och således skriver ut ett tecken åt gången tills alla är skickade.
Varför kort och gott inte bara skriva ut det med med Serial.print(array), det sparar man ju en rad eller två med och har väl exakt samma funktion? Nämns dock märkligt nog inte i exemplen.
Varför kort och gott inte bara skriva ut det med med Serial.print(array), det sparar man ju en rad eller två med och har väl exakt samma funktion? Nämns dock märkligt nog inte i exemplen.
Re: Skriva ut array, varför inte bara på ett sätt?
Det förutsätter ju att funktionen finns, för det första, sedan kanske man vill ha det formaterat på specifika sätt, och lägger till formateringen i utskrifts-funktionen.Varför kort och gott inte bara skriva ut det med med Serial.print(array),
Re: Skriva ut array, varför inte bara på ett sätt?
Jo iofs det finns ju massa varianter på det förstås, tänkte mer som en enkel utskrift så borde det i alla fall kunnat nämnts där om inte annat. Men jaja då vet jag att jag inte tänker helt fel, tackar.
Re: Skriva ut array, varför inte bara på ett sätt?
Fortfarande, beror det ju på om funktionen överhuvudtaget finns i det system man utvecklar i.
Ofta är biblioteksfunktioner rätt tunga, och inom inbäddat vill man ofta ha så lättviktiga funktioner som möjligt, och dessutom säkra sådana.
Ofta är biblioteksfunktioner rätt tunga, och inom inbäddat vill man ofta ha så lättviktiga funktioner som möjligt, och dessutom säkra sådana.
Re: Skriva ut array, varför inte bara på ett sätt?
Det kan ju också hända att funktionen i fråga av nån anledning stänger av interrupt medans den kör. Då vill man kanske inte fastna med avstängd interrupt under en hel sträng.
Det beror som sagt var väldigt mycket på vilken plattform man kör på och vad man har för funktionsbibliotek. Det "optimala" är ju ofta att ha en interruptstyrd funktion som har en buffer som det skrivs ut från och ännu hellre en UART med FIFO. Men om man t.ex. bitbangar så funkar ju inte det, då måste man stänga av interrupt och klocka ut bitarna själv.
Det beror som sagt var väldigt mycket på vilken plattform man kör på och vad man har för funktionsbibliotek. Det "optimala" är ju ofta att ha en interruptstyrd funktion som har en buffer som det skrivs ut från och ännu hellre en UART med FIFO. Men om man t.ex. bitbangar så funkar ju inte det, då måste man stänga av interrupt och klocka ut bitarna själv.
Re: Skriva ut array, varför inte bara på ett sätt?
Och har prollen DMA, så ställer man in minnesarean man vill skicka till porten, och glömmer det hela.
Re: Skriva ut array, varför inte bara på ett sätt?
De som gjorde de exemplen "glömde" nog att läsa manualen.Henry skrev:För att skriva ut innehållet i tex en char array på exempelvis serieporten så har jag sett exempel där man använder sig av en for loop och således skriver ut ett tecken åt gången tills alla är skickade.
Re: Skriva ut array, varför inte bara på ett sätt?
Och TS kanske skulle specificera vilken miljö och språk det rör sig om.
Re: Skriva ut array, varför inte bara på ett sätt?
Är det i C så lär ju utskriften stanna vid första nollan om du har tur. Annars håller den på tills den hittar en eller bara kraschar.
Re: Skriva ut array, varför inte bara på ett sätt?
Jo, det är en jäkla skillnad mellan en char Array och en text Array
dock inte siffran 0 utan 0x00, dvs NUL.Är det i C så lär ju utskriften stanna vid första nollan
Re: Skriva ut array, varför inte bara på ett sätt?
Det handlar om en char array och inte om något mer avancerat än Arduino IDE och en Mega2560. Blev bara lite förvånad av att serial.print inte nämndes som alternativ på nätet i array sammanhanget, inget annat.
Menar tex som denna kodsnutt jag kommer att bygga vidare på senare och är egentligen för en display men funkar perfekt för både seriellt och lcd, var bara som test för att se om det funkade som planerat och det gjorde det ju:
Och jag får ut 2.86E-7 på den seriella porten likaså på lcd:n, precis som jag ville.
Det mest avancerat den sedan behöver göra är att skicka ett kommando 5 ggr i sekunden men det är en annan funktion, får dock hålla koll så inga kommandon krockar men det är en smal sak.
Menar tex som denna kodsnutt jag kommer att bygga vidare på senare och är egentligen för en display men funkar perfekt för både seriellt och lcd, var bara som test för att se om det funkade som planerat och det gjorde det ju:
Kod: Markera allt
char value[8] {'2', '.', '8', '6', 'E', '-', '7'};
void setup() {
Serial.begin(9600);
Serial.print(value);
}
void loop() {
}
Det mest avancerat den sedan behöver göra är att skicka ett kommando 5 ggr i sekunden men det är en annan funktion, får dock hålla koll så inga kommandon krockar men det är en smal sak.
Senast redigerad av Henry 12 september 2019, 20:53:37, redigerad totalt 1 gång.
Re: Skriva ut array, varför inte bara på ett sätt?
Vad menar du med "text array"?
Tack för förtydligandet av nollan.
Tack för förtydligandet av nollan.
Re: Skriva ut array, varför inte bara på ett sätt?
Vi kan omöjligt veta vilken miljö du arbetar i, därav svaren.Det handlar om en char array och inte om något mer avancerat än Arduino IDE och en Mega2560. Blev bara lite förvånad av att serial.print inte nämndes som alternativ på nätet i array sammanhanget, inget annat.
Och nej, såvida det inte är en PC eller motsvarande, så skriver jag/vi egna rutiner, undviker bibliotek i största möjligaste mån.
Mankan, vad jag menar med en "text Array" är en nollterminerad Array, kanske lite fel ordval.
En "char Array", är ju bara en Array med normalt sett 8-bitars binär data.
Re: Skriva ut array, varför inte bara på ett sätt?
Antar att char value[8] {'2', '.', '8', '6', 'E', '-', '7'}; inte är en lokal variabel. Tack vare detta får du nog en nolla på slutet av arrayen, eftersom att texten är 7 bytes, och arrayen rymmer 8, och globala/static garanteras initieras till noll i oinitierade fält, har jag för mig. Annars kunde du fått vad som helst, och din printfunktion skulle kunna fortsätta skicka allt möjligt ur minnet tills den råkar stöta på en nolla. I det fallet är det bättre att ha en loop som går 7 varv och skickar dessa sju tecken.Henry skrev:Det handlar om en char array och inte om något mer avancerat än Arduino IDE och en Mega2560. Blev bara lite förvånad av att serial.print inte nämndes som alternativ på nätet i array sammanhanget, inget annat.
Menar tex som denna kodsnutt jag kommer att bygga vidare på senare och är egentligen för en display men funkar perfekt för både seriellt och lcd, var bara som test för att se om det funkade som planerat och det gjorde det ju:
Och jag får ut 2.86E-7 på den seriella porten likaså på lcd:n, precis som jag ville.Kod: Markera allt
char value[8] {'2', '.', '8', '6', 'E', '-', '7'}; void setup() { Serial.begin(9600); Serial.print(value); } void loop() { }
Det mest avancerat den sedan behöver göra är att skicka ett kommando 5 ggr i sekunden men det är en annan funktion, får dock hålla koll så inga kommandon krockar men det är en smal sak.
Men varför inte skriva char value[] = "2.86E-7"; istället? Strängen termineras automatisk med en nolla, så då behöver du inte tänka på det.
Re: Skriva ut array, varför inte bara på ett sätt?
Man skall aldrig utgå ifrån att oinitierade variabler initieras till 0x00.
Det normala är väl att det inte är så.
Det normala är väl att det inte är så.