leo72:
Ho dato un'occhiata meglio al core e la funzione F() vedo che è un define per prendere direttamente una stringa. Non essendo una funzione, non accetta parametri in forma di variabili.
Possibili workaround?
leo72:
Ho dato un'occhiata meglio al core e la funzione F() vedo che è un define per prendere direttamente una stringa. Non essendo una funzione, non accetta parametri in forma di variabili.
Possibili workaround?
Mettilo solo nelle parti di codice dove hai stringhe definite, ad esempio "" o "". Per il resto prova ad usare PROGMEM.
leo72:
Mettilo solo nelle parti di codice dove hai stringhe definite, ad esempio "" o "".
già fatto, ma freeza ancora
leo72:
Per il resto prova ad usare PROGMEM.
PROGMEM - Arduino Reference
ho provato e anche solo nella dichiarazione di msg, ma mi da questo errore: error: "__c causes a section type conflict"
quindi, invece di
String msg = "";
ho scritto
PROGMEM String msg = "";
Non c'è un modo di debugare l'esecuzione dello sketch e vedere se la scheda freezata fa qualcosa?
Conferma del freeze:
con la scheda che non emette alcun lampeggio del led, ho provato a mandare lo sketch con alcune modifiche e mi dice che la porta è già occupata da un altro processo.
Se disabilito l'uso della seriale (che mi serve solo per debug), credete che risolverei il problema?
Grazie
Risparmi un po' di RAM (elimini il buffer seriale che sono 64 byte più le variabili della libreria).
Prova ma non so se risolvi.
PS:
hai provato a controllare con avr-size l'occupazione di memoria del tuo sketch?
leo72:
Risparmi un po' di RAM (elimini il buffer seriale che sono 64 byte più le variabili della libreria).
Prova ma non so se risolvi.PS:
hai provato a controllare con avr-size l'occupazione di memoria del tuo sketch?
Chiarimenti su memoria - #6 by leo72 - Hardware - Arduino Forum
ok, vorrei provare: è possibile impostare delle direttive al compilatore che mi permettano di non fargli vedere del codice?
Esempio:
oppure
codice ignorato dal compilatorevorrei usarlo per toglire tutti i riferimenti alla seriale, visto che mi serve solo per debug.
Grazie
essere_digitale:
leo72:
Risparmi un po' di RAM (elimini il buffer seriale che sono 64 byte più le variabili della libreria).
Prova ma non so se risolvi.PS:
hai provato a controllare con avr-size l'occupazione di memoria del tuo sketch?
Chiarimenti su memoria - #6 by leo72 - Hardware - Arduino Forumok, vorrei provare: è possibile impostare delle direttive al compilatore che mi permettano di non fargli vedere del codice?
codice processato dal compilatore
Esempio:
oppure
codice ignorato dal compilatorevorrei usarlo per toglire tutti i riferimenti alla seriale, visto che mi serve solo per debug.
Grazie
Ciao, questa discussione credo faccia al caso tuo
http://arduino.cc/forum/index.php/topic,110922.15.html
N.
Spannometricamente direi che F() mette delle costanti stringa in progmem, quindi mi sembra del tutto normale che usando una variabile (di qualunque tipo) si generi un errore.
tuxduino:
Spannometricamente direi che F() mette delle costanti stringa in progmem, quindi mi sembra del tutto normale che usando una variabile (di qualunque tipo) si generi un errore.
scusa ma non ho capito cosa intendi
F() è una funzione aggiuntiva del metodo .print introdotta con l'ultima versione dell'IDE di Arduino che permette di gestire le stringhe in memoria Flash. Però non puoi fare la conversione da un tipo di dato a stringa in Flash, ottieni errore. E' ciò che ti abbiamo già detto: non va bene fare print(F(mario + " pippo")), puoi fare print(F("pippo")) e basta
essere_digitale:
tuxduino:
Spannometricamente direi che F() mette delle costanti stringa in progmem, quindi mi sembra del tutto normale che usando una variabile (di qualunque tipo) si generi un errore.scusa ma non ho capito cosa intendi
Se solo trovassi la pagina di documentazione relativa ad F()...
leo72:
F() è una funzione aggiuntiva del metodo .print introdotta con l'ultima versione dell'IDE di Arduino che permette di gestire le stringhe in memoria Flash. Però non puoi fare la conversione da un tipo di dato a stringa in Flash, ottieni errore. E' ciò che ti abbiamo già detto: non va bene fare print(F(mario + " pippo")), puoi fare print(F("pippo")) e basta
Adesso é più chiaro. Scusate.
Quanto prima voglio usare un #define per togliere Serial dal codice di produzione e vedere se risolvo.
Mi chiedo, la Leonardo potrebbe essere guasta?
essere_digitale:
leo72:
F() è una funzione aggiuntiva del metodo .print introdotta con l'ultima versione dell'IDE di Arduino che permette di gestire le stringhe in memoria Flash. Però non puoi fare la conversione da un tipo di dato a stringa in Flash, ottieni errore. E' ciò che ti abbiamo già detto: non va bene fare print(F(mario + " pippo")), puoi fare print(F("pippo")) e bastaAdesso é più chiaro. Scusate.
Quanto prima voglio usare un #define per togliere Serial dal codice di produzione e vedere se risolvo.
Mi chiedo, la Leonardo potrebbe essere guasta?
impostato il #define che mi toglie completamente la seriale, ma niente, dopo un pò si blocca sempre.
Potrebbe essere guasta la Leonardo?
Scusa, ma se dipendesse dalla Ethernet? Molte vecchie Ethernet Shield andavano in blocco, se non ricordo male. Non potrebbe dipendere dalla quella scheda? L'hai provata su un altro Arduino?
leo72:
Scusa, ma se dipendesse dalla Ethernet? Molte vecchie Ethernet Shield andavano in blocco, se non ricordo male. Non potrebbe dipendere dalla quella scheda? L'hai provata su un altro Arduino?
credo sia l'ultima versione della Ethernet Shield ... ma posso provare perchè ne ho un'altra.
Adesso la monto e provo.
Grazie
Scusa usi un serial.write, hai qualche dispositivo collegato alla seriale?
poi sempre sulla seriale visualizzi il debug che utilizzano in ambo i casi pin 0 e 1, mi sfugge qualcosa?
essere_digitale:
leo72:
Scusa, ma se dipendesse dalla Ethernet? Molte vecchie Ethernet Shield andavano in blocco, se non ricordo male. Non potrebbe dipendere dalla quella scheda? L'hai provata su un altro Arduino?credo sia l'ultima versione della Ethernet Shield ... ma posso provare perchè ne ho un'altra.
Adesso la monto e provo.
Grazie
montata ... vediamo se supera la notte!
pablos:
Scusa usi un serial.write, hai qualche dispositivo collegato alla seriale?
si, il serial monitor dell'IDE!
pablos:
poi sempre sulla seriale visualizzi il debug che utilizzano in ambo i casi pin 0 e 1, mi sfugge qualcosa?
non proprio: creo una direttiva al compilatore con #DEFINE DEBUG 0 che "gli dice" di non tenere in considerazione il codice compreso fra
#if DEBUG e #endif.
Esempio, il codice
void ToSerial(String stringa)
{
#if DEBUG
Serial.println(stringa);
#endif
}
se #DEFINE DEBUG è uguale a 0, il compilatore vede questo codice
void ToSerial(String stringa)
{
//
}
quindi se uso la funzione ToSerial non fa nulla!
Viceversa se #DEFINE DEBUG è uguale a 1, il compilatore vede il codice originale e quindi la chiamata a Serial.
Spero di essere stato chiaro, altrimenti chiedi pure.
Ciao
comunque se posso permettermi.
sarebbe utile settare il pin 10 utilizzato dalla ethernet
aggiungi nelle dichiarazioni variabili
byte SD_CS = 4; // pin 4 is the SPI select pin for the SDcard
byte ETHER_CS = 10; // pin 10 is the SPI select pin for the Ethernet
nel setup()
pinMode(ETHER_CS, OUTPUT);
digitalWrite(ETHER_CS, HIGH);
pinMode(SD_CS, OUTPUT);
digitalWrite(SD_CS, HIGH);
prima di chiudere il client svuota il buffer
pc_client.flush();
pc_client.stop();
elimina quel serial.write
//Serial.write(Data_RX);
ciao
pablos:
comunque se posso permettermi.
pablos:
sarebbe utile settare il pin 10 utilizzato dalla ethernetaggiungi nelle dichiarazioni variabili
byte SD_CS = 4; // pin 4 is the SPI select pin for the SDcard
byte ETHER_CS = 10; // pin 10 is the SPI select pin for the Ethernetnel setup()
pinMode(ETHER_CS, OUTPUT);
digitalWrite(ETHER_CS, HIGH);
pinMode(SD_CS, OUTPUT);
digitalWrite(SD_CS, HIGH);
per curiosità, a che serve?
pablos:
prima di chiudere il client svuota il buffer
pc_client.flush();
pc_client.stop();
provo
pablos:
elimina quel serial.write
//Serial.write(Data_RX);ciao
tanto non viene eseguito perchè è sotto #define.
ciao e grazie