Skriva ut array, varför inte bara på ett sätt?

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
Henry
Inlägg: 19779
Blev medlem: 20 april 2005, 02:52:47
Ort: Lund

Skriva ut array, varför inte bara på ett sätt?

Inlägg av Henry »

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.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 35002
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Skriva ut array, varför inte bara på ett sätt?

Inlägg av TomasL »

Varför kort och gott inte bara skriva ut det med med Serial.print(array),
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.
Användarvisningsbild
Henry
Inlägg: 19779
Blev medlem: 20 april 2005, 02:52:47
Ort: Lund

Re: Skriva ut array, varför inte bara på ett sätt?

Inlägg av Henry »

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.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 35002
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Skriva ut array, varför inte bara på ett sätt?

Inlägg av TomasL »

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.
Nerre
Inlägg: 23423
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Skriva ut array, varför inte bara på ett sätt?

Inlägg av Nerre »

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.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 35002
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Skriva ut array, varför inte bara på ett sätt?

Inlägg av TomasL »

Och har prollen DMA, så ställer man in minnesarean man vill skicka till porten, och glömmer det hela.
snigelen
Inlägg: 813
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Skriva ut array, varför inte bara på ett sätt?

Inlägg av snigelen »

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.
De som gjorde de exemplen "glömde" nog att läsa manualen.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 35002
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Skriva ut array, varför inte bara på ett sätt?

Inlägg av TomasL »

Och TS kanske skulle specificera vilken miljö och språk det rör sig om.
Användarvisningsbild
mankan
EF Sponsor
Inlägg: 606
Blev medlem: 18 juli 2015, 11:23:22
Ort: Linköping

Re: Skriva ut array, varför inte bara på ett sätt?

Inlägg av mankan »

Ä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.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 35002
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Skriva ut array, varför inte bara på ett sätt?

Inlägg av TomasL »

Jo, det är en jäkla skillnad mellan en char Array och en text Array
Är det i C så lär ju utskriften stanna vid första nollan
dock inte siffran 0 utan 0x00, dvs NUL.
Användarvisningsbild
Henry
Inlägg: 19779
Blev medlem: 20 april 2005, 02:52:47
Ort: Lund

Re: Skriva ut array, varför inte bara på ett sätt?

Inlägg av Henry »

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:

Kod: Markera allt

char value[8] {'2', '.', '8', '6', 'E', '-', '7'};

void setup() {

  Serial.begin(9600);
  Serial.print(value);

}

void loop() {

}
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.
Senast redigerad av Henry 12 september 2019, 20:53:37, redigerad totalt 1 gång.
Användarvisningsbild
mankan
EF Sponsor
Inlägg: 606
Blev medlem: 18 juli 2015, 11:23:22
Ort: Linköping

Re: Skriva ut array, varför inte bara på ett sätt?

Inlägg av mankan »

Vad menar du med "text array"?

Tack för förtydligandet av nollan.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 35002
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Skriva ut array, varför inte bara på ett sätt?

Inlägg av TomasL »

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.
Vi kan omöjligt veta vilken miljö du arbetar i, därav svaren.
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.
bearing
Inlägg: 8686
Blev medlem: 2 mars 2006, 01:01:45
Ort: Vänersborg

Re: Skriva ut array, varför inte bara på ett sätt?

Inlägg av bearing »

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:

Kod: Markera allt

char value[8] {'2', '.', '8', '6', 'E', '-', '7'};

void setup() {

  Serial.begin(9600);
  Serial.print(value);

}

void loop() {

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

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.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 35002
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Skriva ut array, varför inte bara på ett sätt?

Inlägg av TomasL »

Man skall aldrig utgå ifrån att oinitierade variabler initieras till 0x00.
Det normala är väl att det inte är så.
Skriv svar