- Messaggi: 1222
- Ringraziamenti ricevuti 104
problema libreria delay
12 Anni 1 Mese fa - 12 Anni 1 Mese fa #1
da StefA
Rendering Error in layout Message/Item: array_keys(): Argument #1 ($array) must be of type array, null given. Please enable debug mode for more information.
problema libreria delay è stato creato da StefA
Rendering Error in layout Message/Item: array_keys(): Argument #1 ($array) must be of type array, null given. Please enable debug mode for more information.
Si prega Accedi o Crea un account a partecipare alla conversazione.
- StefA
- Autore della discussione
- Moderator
Riduci
Di più
12 Anni 1 Mese fa #2
da Mauro Laurenti
Rendering Error in layout Message/Item: array_keys(): Argument #1 ($array) must be of type array, null given. Please enable debug mode for more information.
Risposta da Mauro Laurenti al topic Re: problema libreria delay
Rendering Error in layout Message/Item: array_keys(): Argument #1 ($array) must be of type array, null given. Please enable debug mode for more information.
Si prega Accedi o Crea un account a partecipare alla conversazione.
12 Anni 1 Mese fa #3
da StefA
..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]
Risposta da StefA al topic Re: problema libreria delay
Ho riscontrato facendo il debug che nel caso limite, delay_ms(10000) basterebbe un "int value" per contene quel valore, però dopo si ha la variabile "reference" (e di conseguenza "mainDelay") che vale 10000*20 (freq del quarzo) = 200000.
Per contenere questo valore serve una variabile "short long" (considerando che non ci interessano i valori negativi si può utilizzare "unsigned short long" con la possibilità di valori max maggiori).
Però se si cambia il tipo di variabile soltanto per "reference" e "mainDelay" e si lascia "int value", la moltiplicazione con "delay_quartz_frequency_value" risulta errata.
Quindi bisogna dichiarare anche "unsigned short long value", bisogna cambiare anche l'intestazione della funzione nel file h in "void delay_ms (unsigned short long value);".
In questo modo sembra funzioni, ovviamente si paga con il passaggio di alcune variabili da 16 a 24 bit.
Per valori di ritardo in millisecondi inferiori ai 3000 funziona benissimo senza modifiche.
Per contenere questo valore serve una variabile "short long" (considerando che non ci interessano i valori negativi si può utilizzare "unsigned short long" con la possibilità di valori max maggiori).
Però se si cambia il tipo di variabile soltanto per "reference" e "mainDelay" e si lascia "int value", la moltiplicazione con "delay_quartz_frequency_value" risulta errata.
Quindi bisogna dichiarare anche "unsigned short long value", bisogna cambiare anche l'intestazione della funzione nel file h in "void delay_ms (unsigned short long value);".
In questo modo sembra funzioni, ovviamente si paga con il passaggio di alcune variabili da 16 a 24 bit.
Per valori di ritardo in millisecondi inferiori ai 3000 funziona benissimo senza modifiche.
..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]
Si prega Accedi o Crea un account a partecipare alla conversazione.
- StefA
- Autore della discussione
- Moderator
Riduci
Di più
- Messaggi: 1222
- Ringraziamenti ricevuti 104
12 Anni 1 Mese fa #4
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: problema libreria delay
Ciao StefA,
ora non e' c'e' piu' dubbio, e' un overflow della variabile interna.
Effettivamente questi sintomi "di tempi o valori anomali" dipendono da un overflow che fa ripartire la variabile da zero.
Ho risolto il problema imponendo di usare delay_ms() fino a 1000 ms, ed ho creato una nuova funzione delay_s() che richiama la funzione delay_ms(1000) n volte.
Grazie per il debug e aver condiviso il risultato!
Questo fine settimana riportero' le correzioni in una nuova release della biblioteca per C18, che ora include i commenti per Doxigen.
Saluti,
Mauro
ora non e' c'e' piu' dubbio, e' un overflow della variabile interna.
Effettivamente questi sintomi "di tempi o valori anomali" dipendono da un overflow che fa ripartire la variabile da zero.
Ho risolto il problema imponendo di usare delay_ms() fino a 1000 ms, ed ho creato una nuova funzione delay_s() che richiama la funzione delay_ms(1000) n volte.
Grazie per il debug e aver condiviso il risultato!
Questo fine settimana riportero' le correzioni in una nuova release della biblioteca per C18, che ora include i commenti per Doxigen.
Saluti,
Mauro
Si prega Accedi o Crea un account a partecipare alla conversazione.
12 Anni 1 Mese fa #5
da StefA
..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]
Risposta da StefA al topic Re: problema libreria delay
grazie a te di dedicare tempo a cose "poco" importanti.
Ste
Ste
..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]
Si prega Accedi o Crea un account a partecipare alla conversazione.
- StefA
- Autore della discussione
- Moderator
Riduci
Di più
- Messaggi: 1222
- Ringraziamenti ricevuti 104
Moderatori: Mauro Laurenti, StefA
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.
Login
© LaurTec 2006 - 2024