Pages: [1] 2 3   Go Down
Author Topic: "residuati bellici"  (Read 2224 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ma e una mia impressione che mettendo uno sketch nuovo
qualche residuo dei vecchi sketch rimane,

tipo scrittura eeprom

c'è qualche opzione da spuntare/sistema per cancellare davvero tutto?
Logged


Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 7
Posts: 2961
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

le memorie non volatili trattengono i dati scritti fino a nuova scrittura/cancellazione, quindi mi sà che è normale
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 234
Posts: 20181
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

L' eeprom durante l' upload non viene toccato. Lo sketch viene scritto nella flash. 
Tutto quello che era nella EEprom e credo anche la parte che non viene sovrascrittto dal nuovo Sketch, se questo ´piú piccolo di quello precedente rimangono.
Non dovrebbero esserci problemi in questo.

Ciao Uwe
Logged

Offline Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok   se rimane flash scritta "invisibile" che mai influenzera lo sketch  attuale fa nulla,
per la eeprom   provvederemo con uno scketch automatico  che porta a zero tutti i valori
Logged


Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21607
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

per la eeprom   provvederemo con uno scketch automatico  che porta a zero tutti i valori
Non scrivere inutilmente sulla EEPROM. Come la Flash, non ha riscritture infinite: la EEPROM è data per 100.000 riscritture.
Se fai uno sketch che ogni volta che si avvia cancella la EEPROM rischi di ridurre la sua vita utile molto velocemente.
Logged


Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 410
Posts: 11975
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

L' eeprom durante l' upload non viene toccato. Lo sketch viene scritto nella flash.  
Tutto quello che era nella EEprom e credo anche la parte che non viene sovrascrittto dal nuovo Sketch, se questo ´piú piccolo di quello precedente rimangono.
Non dovrebbero esserci problemi in questo.

Ciao Uwe
Però a me questa cosa non suona bene. Il settaggio dei Fuse di Arduino UNO FF-DE-05, in particolare il DE, lascia il bit "Preserve EEPROM memory through the Chip Erase cycle; [EESAVE=0]" a 1, cioè non attivo, quindi il Chip Erase dovrebbe ogni volta cancellare sia la flash che la EEprom. Il Chip Erase è un comando che AVRDUDE esegue automaticamente ad ogni esecuzione. Dall'IDE non c'è modo di fermarlo, da linea di comando c'è l'opzione -D per evitare che venga eseguito. nelle note di AVRDUDE si legge:
Quote
Note that in order to reprogram EERPOM cells, no explicit prior chip erase is required since the MCU provides an auto-erase cycle in that case before programming the cell.
Quindi qualcosa non torna... smiley-roll-sweat
« Last Edit: September 29, 2012, 08:38:56 am by Michele Menniti » Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Marche
Offline Offline
Edison Member
*
Karma: 32
Posts: 2261
azioni semplici per risultati complessi
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Non capisco comunque la preoccupazione dei vecchi dati che possono rimanere sulla eeprom. Se nel nuovo sketch non ti serve accederci non c'è problema, se la usi invece prima di leggere la eeprom dovrai scriverla immagino...
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21607
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ogni volta che viene eseguita una scrittura su una determinata memoria, avrdude provvede alla sua cancellatura. Leggete bene: "ogni volta che viene eseguita una scrittura su una DETERMINATA memoria". Quindi, se si scrive sulla Flash, PRIMA essa viene cancellata e poi ci viene scritto sopra il nuovo contenuto.
Avrdude permette di leggere e scrivere su qualunque memoria del microcontrollore: basta specificare la memoria con il parametro "-U". Se però si scrive uno sketch, viene passato solo il contenuto della Flash e viene invocata la scrittura (con relativa cancellazione) solo della Flash.
Per leggere e scrivere sulla EEPROM si deve specificare "-U eeprom:ecc....". Ma l'IDE passa il contenuto solo della Flash. Ecco perché la EEPROM non viene toccata quando si carica uno sketch. Se non ricordo male, infatti, nelle ultime 2 locazioni della EEPROM gli Atmega montati sugli Arduino una volta riportavano una coppia di caratteri (non mi ricordo per cosa) che, anche dopo 100 caricamenti di sketch, erano sempre lì.

Se invece si vuole piallare il chip va specificato il parametro "-e", che è l'unico che formatta ogni tipo di memoria del microcontrollore prima di effettuare una successiva riscrittura.
Logged


Offline Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Non capisco comunque la preoccupazione dei vecchi dati che possono rimanere sulla eeprom. Se nel nuovo sketch non ti serve accederci non c'è problema, se la usi invece prima di leggere la eeprom dovrai scriverla immagino...


strano che dici una cosa del genere  smiley-eek

se salvi una "taratura" "correzione"  (che so numero da aggiungere o sottrarre)
in modo che all'accensione sia tutto ok e bello tarato, va bene
se invece c'è qualcosa di scritto potrebbero sorgere problemi,

poi dipende da applicazione ad applicazione  alcune semplicemente partono sempre col scriverla la memoria ed in questo caso  non ci sono problemi,

alcune altre applicazioni   viene detto di leggerla magari nel setup

comunque basta sapere che le scritte rimangono  e se necessario si prendono provvedimenti
Logged


Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

Offline Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Allora:_

scriviamo (chi ha esperienza) uno sketch "sicuro"   smiley-cool

che ci scriva zero su tutte le memorie UNA VOLTA SOLA   
che una volta finito nel serial monitor scriva tutte le memorie messe a zero,
Logged


Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

Marche
Offline Offline
Edison Member
*
Karma: 32
Posts: 2261
azioni semplici per risultati complessi
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Non capisco comunque la preoccupazione dei vecchi dati che possono rimanere sulla eeprom. Se nel nuovo sketch non ti serve accederci non c'è problema, se la usi invece prima di leggere la eeprom dovrai scriverla immagino...


strano che dici una cosa del genere  smiley-eek

se salvi una "taratura" "correzione"  (che so numero da aggiungere o sottrarre)
in modo che all'accensione sia tutto ok e bello tarato, va bene
se invece c'è qualcosa di scritto potrebbero sorgere problemi,

poi dipende da applicazione ad applicazione  alcune semplicemente partono sempre col scriverla la memoria ed in questo caso  non ci sono problemi,

alcune altre applicazioni   viene detto di leggerla magari nel setup

comunque basta sapere che le scritte rimangono  e se necessario si prendono provvedimenti


@Gingardu: continuo a non vedere il problema.
Situazione di esempio: nel setup devi leggere la prima cella della eeprom perchè c'è un valore di configurazione che ti serve.
Quando fai l'upload dello sketch la prima volta lo fai scrivere tu (sovrascrivendo così vecchi valori); successivamente togli la scrittura nel setup e ricarichi lo sketch. Funzionerà tutto.

Cambi applicazione e qui non ti serve usare la eeprom. Se nella prima cella della eeprom c'è il dato di prima poco importa tanto non ci accedi.
Logged

Marche
Offline Offline
Edison Member
*
Karma: 32
Posts: 2261
azioni semplici per risultati complessi
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Allora:_

scriviamo (chi ha esperienza) uno sketch "sicuro"   smiley-cool

che ci scriva zero su tutte le memorie UNA VOLTA SOLA   
che una volta finito nel serial monitor scriva tutte le memorie messe a zero,


Lo 0 è un valore come un altro, come puoi stare sicuro che 0 non ti darà problemi mentre il valore 100 si?
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21607
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

se salvi una "taratura" "correzione"  (che so numero da aggiungere o sottrarre)
in modo che all'accensione sia tutto ok e bello tarato, va bene
se invece c'è qualcosa di scritto potrebbero sorgere problemi,
Basta usare un carattere di controllo scritto in una determinata locazione della EEPROM e verificare se quel carattere, all'avvio, c'è oppure no: se non c'è, si scrivono i dati di "default", se c'è si leggono quelli memorizzati.

Se vuoi esser certo che sulla EEPROM non ci sia nulla, ti scrivi un piccolo sketch che metta a $00 tutte le celle, lo lanci 1 volta e poi scrivi il tuo programma e sei a posto.
Logged


Offline Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ma se lo metto nel set uptipo
scrivi zero eeprom 00

in un ciclo for fino a 1023  lo esegue solo una volta senza far danni  anche se si trova nel setup

poi quando a finito carico uno sketch inoocuo tipo il blink
Logged


Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21607
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

In questo modo non appena togli l'alimentazione e la rendi, il programma riformatta la EEPROM e tu perdi le regolazioni salvate  smiley-razz

Io ti ho detto come faccio. Ecco un esempio in concreto:
Code:
void controllaInizializzazione() {
    byte valore[5];
    int i;
    //leggo la EEPROM interna
    for (i=0; i<5; i++) {
        valore[i]=EEPROM.read(i+INDIRIZZO_EEPROM);
        delay(5);
    }
    //il dispositivo è stato inizializzato?
    if (valore[0]!=0xBA) { //no.
        valore[0]=0xBA; //codice di controllo
        valore[1]=highByte(410); //valore iniziale per il CO
        valore[2]=lowByte(410);
        valore[3]=highByte(210); //valore iniziale per il CH4
        valore[4]=lowByte(210);
        //li scrivo nella EEPROM
        for (i=0; i<5; i++) {
            EEPROM.write(i+INDIRIZZO_EEPROM, (byte)valore[i]);
            delay(5);
        }
    }
    //imposto le soglie di allarme
    maxCO=((valore[1]<<8) | valore[2]);
    maxCH4=((valore[3]<<8) | valore[4]);
}
In questo modo se non trovo il carattere di controllo, scrivo i dati di default, se lo trovo li carico.
Logged


Pages: [1] 2 3   Go Up
Jump to: