Offline
Jr. Member
Karma: 0
Posts: 50
|
 |
« Reply #15 on: September 15, 2012, 09:08:21 am » |
Ma "nome_variabile_di_tipo_testo" di che tipo è? F() dovrebbe lavorare con i tipi String.
nel mio codice String secs_txt; for(int i = 1; i < 6; i++){ secs_txt = String(30 - i * 5); Serial.println(F("Ethernet ready in " + secs_txt + " sec.")); // ERRORE digitalWrite(led, HIGH); delay(100); digitalWrite(led, LOW); delay(4900); };
|
|
|
|
|
Logged
|
-- Alfredo
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16431
Don't know what I do
|
 |
« Reply #16 on: September 15, 2012, 01:27:43 pm » |
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.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 50
|
 |
« Reply #17 on: September 15, 2012, 04:59:35 pm » |
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?
|
|
|
|
|
Logged
|
-- Alfredo
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16431
Don't know what I do
|
 |
« Reply #18 on: September 15, 2012, 05:09:54 pm » |
Mettilo solo nelle parti di codice dove hai stringhe definite, ad esempio "<html>" o "<head>". Per il resto prova ad usare PROGMEM. http://www.arduino.cc/en/Reference/PROGMEM
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 50
|
 |
« Reply #19 on: September 17, 2012, 04:36:30 pm » |
Mettilo solo nelle parti di codice dove hai stringhe definite, ad esempio "<html>" o "<head>".
già fatto, ma freeza ancora 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?
|
|
|
|
|
Logged
|
-- Alfredo
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 50
|
 |
« Reply #20 on: September 17, 2012, 04:47:19 pm » |
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
|
|
|
|
|
Logged
|
-- Alfredo
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16431
Don't know what I do
|
 |
« Reply #21 on: September 17, 2012, 05:15:53 pm » |
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? http://arduino.cc/forum/index.php/topic,121319.msg913287.html#msg913287
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 50
|
 |
« Reply #22 on: September 26, 2012, 05:52:38 pm » |
ok, vorrei provare: è possibile impostare delle direttive al compilatore che mi permettano di non fargli vedere del codice? Esempio: <direttiva1 on> <if direttiva1> codice processato dal compilatore <endif direttiva1> oppure <direttiva1 off> <if direttiva1> codice ignorato dal compilatore <endif direttiva1> vorrei usarlo per toglire tutti i riferimenti alla seriale, visto che mi serve solo per debug. Grazie
|
|
|
|
|
Logged
|
-- Alfredo
|
|
|
|
Italy
Offline
Full Member
Karma: 6
Posts: 102
|
 |
« Reply #23 on: September 26, 2012, 06:04:40 pm » |
ok, vorrei provare: è possibile impostare delle direttive al compilatore che mi permettano di non fargli vedere del codice? Esempio: <direttiva1 on> <if direttiva1> codice processato dal compilatore <endif direttiva1> oppure <direttiva1 off> <if direttiva1> codice ignorato dal compilatore <endif direttiva1> vorrei 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.htmlN.
|
|
|
|
|
Logged
|
"The question is not whether intelligent machines can have emotions, but whether machines can be intelligent without any emotions"
|
|
|
|
Offline
Edison Member
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
|
 |
« Reply #24 on: September 27, 2012, 06:27:16 am » |
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.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 50
|
 |
« Reply #25 on: September 30, 2012, 02:16:50 am » |
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
|
|
|
|
|
Logged
|
-- Alfredo
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16431
Don't know what I do
|
 |
« Reply #26 on: September 30, 2012, 02:58:45 am » |
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
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Edison Member
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
|
 |
« Reply #27 on: September 30, 2012, 04:41:06 am » |
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()... 
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 50
|
 |
« Reply #28 on: September 30, 2012, 06:18:43 am » |
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?
|
|
|
|
|
Logged
|
-- Alfredo
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 50
|
 |
« Reply #29 on: October 04, 2012, 04:03:59 pm » |
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? impostato il #define che mi toglie completamente la seriale, ma niente, dopo un pò si blocca sempre. Potrebbe essere guasta la Leonardo?
|
|
|
|
|
Logged
|
-- Alfredo
|
|
|
|
|