Electrokit Buggfix Plus
Aktuellt datum och tid: 01.32 2020-07-05

Alla tidsangivelser är UTC + 1 timme




Svara på tråd  [ 91 inlägg ]  Gå till sida 1, 2, 3, 4, 5 ... 7  Nästa
Författare Meddelande
InläggPostat: 17.46 2019-09-12 
Användarvisningsbild

Blev medlem: 01.52 2005-04-20
Inlägg: 19512
Ort: Lund
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.


Upp
 Profil  
 
InläggPostat: 18.10 2019-09-12 
EF Sponsor
Användarvisningsbild

Blev medlem: 22.54 2006-09-23
Inlägg: 34396
Ort: Borås
Citera:
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.


Upp
 Profil  
 
InläggPostat: 18.15 2019-09-12 
Användarvisningsbild

Blev medlem: 01.52 2005-04-20
Inlägg: 19512
Ort: Lund
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.


Upp
 Profil  
 
InläggPostat: 18.34 2019-09-12 
EF Sponsor
Användarvisningsbild

Blev medlem: 22.54 2006-09-23
Inlägg: 34396
Ort: Borås
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.


Upp
 Profil  
 
InläggPostat: 18.41 2019-09-12 

Blev medlem: 06.51 2008-05-19
Inlägg: 23273
Ort: Upplands väsby
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.


Upp
 Profil  
 
InläggPostat: 19.09 2019-09-12 
EF Sponsor
Användarvisningsbild

Blev medlem: 22.54 2006-09-23
Inlägg: 34396
Ort: Borås
Och har prollen DMA, så ställer man in minnesarean man vill skicka till porten, och glömmer det hela.


Upp
 Profil  
 
InläggPostat: 19.13 2019-09-12 

Blev medlem: 10.02 2009-05-08
Inlägg: 813
Ort: Lund
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.


Upp
 Profil  
 
InläggPostat: 19.19 2019-09-12 
EF Sponsor
Användarvisningsbild

Blev medlem: 22.54 2006-09-23
Inlägg: 34396
Ort: Borås
Och TS kanske skulle specificera vilken miljö och språk det rör sig om.


Upp
 Profil  
 
InläggPostat: 19.31 2019-09-12 

Blev medlem: 10.23 2015-07-18
Inlägg: 583
Ort: Linköping
Ä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.


Upp
 Profil  
 
InläggPostat: 19.43 2019-09-12 
EF Sponsor
Användarvisningsbild

Blev medlem: 22.54 2006-09-23
Inlägg: 34396
Ort: Borås
Jo, det är en jäkla skillnad mellan en char Array och en text Array

Citera:
Är det i C så lär ju utskriften stanna vid första nollan

dock inte siffran 0 utan 0x00, dvs NUL.


Upp
 Profil  
 
InläggPostat: 19.51 2019-09-12 
Användarvisningsbild

Blev medlem: 01.52 2005-04-20
Inlägg: 19512
Ort: Lund
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: [Expandera/Minimera] [Hämta] (Untitled.txt)
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 19.53 2019-09-12, redigerad totalt 1 gång.

Upp
 Profil  
 
InläggPostat: 19.53 2019-09-12 

Blev medlem: 10.23 2015-07-18
Inlägg: 583
Ort: Linköping
Vad menar du med "text array"?

Tack för förtydligandet av nollan.


Upp
 Profil  
 
InläggPostat: 19.55 2019-09-12 
EF Sponsor
Användarvisningsbild

Blev medlem: 22.54 2006-09-23
Inlägg: 34396
Ort: Borås
Citera:
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.


Upp
 Profil  
 
InläggPostat: 20.04 2019-09-12 

Blev medlem: 01.01 2006-03-02
Inlägg: 8550
Ort: Vänersborg
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: [Expandera/Minimera] [Hämta] (Untitled.txt)
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.


Upp
 Profil  
 
InläggPostat: 20.11 2019-09-12 
EF Sponsor
Användarvisningsbild

Blev medlem: 22.54 2006-09-23
Inlägg: 34396
Ort: Borås
Man skall aldrig utgå ifrån att oinitierade variabler initieras till 0x00.
Det normala är väl att det inte är så.


Upp
 Profil  
 
Visa inlägg nyare än:  Sortera efter  
Svara på tråd  [ 91 inlägg ]  Gå till sida 1, 2, 3, 4, 5 ... 7  Nästa

Alla tidsangivelser är UTC + 1 timme


Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 4 gäster


Du kan inte skapa nya trådar i denna kategori
Du kan inte svara på trådar i denna kategori
Du kan inte redigera dina inlägg i denna kategori
Du kan inte ta bort dina inlägg i denna kategori
Du kan inte bifoga filer i denna kategori

Sök efter:
Hoppa till:  
    Electrokit
Drivs av phpBB® Forum Software © phpBB Group
Swedish translation by Peetra & phpBB Sweden © 2006-2010