Go Down

Topic: [Risolto] PROBLEMA IDE O SKETCH AMR ??? (Read 2 times) previous topic - next topic

Giuseppe G.

Ho già provato, addirittura ad escluderla proprio dal codice con //, ma il problema è sempre presente.
Quello che ho creato, è un modo per chi può, di verificare se il problema è del codice o dell'IDE, al di là della modalità di attivazione o meno della seriale.

Vi ricordo che se la seriale viene disabilitata, il problema si presenta, al contrario no. Questo è il problema.  :smiley-eek:
Un saluto a tutta la comunità.
Giuseppe G.

Giuseppe G.

Per Leo72  :smiley-roll:
Quote
Una semplice variabile non basta, la lib viene caricata ed inizializzata lo stesso perché il compilatore mica può sapere se durante l'esecuzione la seriale la userai oppure no.


Prova a compilare lo sketch con la variabile "ablser=1" che (abilita) la seriale e poi dimmi qualcosa !!!!!

Non è semplice come sembra ! :*

Credo che il compilatore si accorge di questo e altro, come puoi vedere dal codice compilato che cambia di circa 1K.
Un saluto a tutta la comunità.
Giuseppe G.

leo72


Per Leo72  :smiley-roll:
Quote
Una semplice variabile non basta, la lib viene caricata ed inizializzata lo stesso perché il compilatore mica può sapere se durante l'esecuzione la seriale la userai oppure no.


Prova a compilare lo sketch con la variabile "ablser=1" che (abilita) la seriale e poi dimmi qualcosa !!!!!

Non è semplice come sembra ! :*

Credo che il compilatore si accorge di questo e altro, come puoi vedere dal codice compilato che cambia di circa 1K.


Code: [Select]
byte abilita = 1;

void setup() {
    if (abilita) {
        Serial.begin(9600);
    }
}

void loop() {
    static long contatore = 0;
    contatore++;
    if (abilita) {
        Serial.println(contatore, DEC);
    }
    delay(1000);
}

Compilato, viene 2836 byte.
Se metto "abilita" a 0, la compilazione dà 2836.
Questo per farti capire che il compilatore NON può sapere se nel corso del programma "abilita" cambia valore.

Ora compila questo:
Code: [Select]

#define abilita

void setup() {
#ifdef abilita
    Serial.begin(9600);
#endif
}

void loop() {
    static long contatore = 0;
    contatore++;
#ifdef abilita
    Serial.println(contatore, DEC);
#endif
    delay(1000);
}

Compilato, dà 2820 byte.
Se commento la define iniziale, la compilazione mi dà 750 byte! Come vedi, in questo caso la seriale non viene inizializzata.

lesto

#8
Feb 01, 2013, 11:59 am Last Edit: Feb 01, 2013, 12:04 pm by lesto Reason: 1
la seriale usa ram anche se non usatata, ne abbiamo discusso qualche tempo fa con la storia dei buffer.
Essi sono dichiarati alla creazione della classe Serial, che viene creata quando la Serial è inclusa, che è inclusa automaticamente.
Sempre in quella discussione puyoi trovare uno snippet di codice che risolve questo problema: il buffer viene inizializzato nella Begin, però il codice è stato provato come funzionante solo da me, quindi sarà pieno di bug (però funzionare funziona...)

edit: discussione + il codice per aruino ide 1.0.2: http://arduino.cc/forum/index.php/topic,141254.msg1065517.html#msg1065517
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Giuseppe G.

:smiley-roll:

Intanto grazie per l'interessamento.

x Leo72, non metto in discussione quello che segnali, o sul fatto che quello che dici sia errato.
Vorrei semplicemente farti presente che se compili il mio codice, con la variabile = 1 e poi = 0, ti accorgerai che una "if" non può cambiare così tanto l'assembler per il micro.

x Lesto, il problema non è abilitare o meno la seriale, ma capire perchè quando è abilitata il problema non si presenta, mentre quando è disabilitata, il problema c'è.

Potrei lasciare abilitata la seriale per ovviare il problema, ma credo ci sia qualcosa di non chiaro in tutto questo.

Nel frattempo, ho buttato giù un hardware con un' altro display ed arduino, ma il problema rimane.  =(
Un saluto a tutta la comunità.
Giuseppe G.

Go Up