byte ed int

Salve une domanda da principiante .Se byte occupa meno spazio di int perché nell'esempio digital debounge utilizza la funzione int visto che alla fine i valori non superano le due cifre.Grazie

Ciao! byte e int non sono funzioni ma tipi di variabili.
Presumo che l'ideologia di arduino sia rendere facile la programmazione di un microcontrollore, per cui gli esempi proposti di programmazione sono orientati a essere facili da capire, si usa in pratica il tipo int in molti esempi, non perché sia il più indicato ma per non fare affrontare a un nuovo utente il concetto di risorse di memoria consumante, di dimensioni in byte dei vari tipi di dato ecc..
Per non fare affrontare a un newentry concetti avanzanti non lo si pone nella difficoltà di scegliere il tipo di variabile più indicato.

Gli esempi non sono ottimizzati e non servono come pezzi di codice da riutilizzare ma soltanto per comprendere una determinata cosa.
Si tratta di scelte "didattiche"; se voglio mostrarti come si realizza un antirimbalzo software, concentro la spiegazione su quel concetto evitando di introdurre altro.
Questo nell'ambito di una didattica divulgativa che predilige l'introduzione graduale dei vari concetti: prima impari a far funzionare le cose, poi impari a fondere le cose semplici per crearne di complesse, poi impari ad ottimizzare.
Personalmente preferirei introdurre immediatamente i primi gradi di ottimizzazione, almeno sulle variabili, ma sono scelte. Prima di far collegare un LED, preferirei spiegare cosa sono e come funzionano i LED. Tutte scelte didattiche.

Hai ragione si potrebbe anche unsare una variablie di tipo Byte e occupare 1 Byte e non 2 Byte di memoria.
Ciao Uwe

Grazie per le sollecite risposte,avevo intuito la cosa ma volevo esserne certo.Grazie ancora a tutti

Secondo me non ha senso usare byte in programmi non complessi o che abbiano poco codice. Si perde Tempo se non si Han abbastanza conoscenze di C e poi di memoria Arduino ne ha a “sufficienza” per quel che deve fare :slight_smile:
Avrebbero potuto ma oltre a spiegare il concetto si evitano ulteriori complicazioni i programmatori che come ben sappiamo esser lazy nella scrittura :wink: me compreso a volte

Triko93:
Secondo me non ha senso usare byte in programmi non complessi o che abbiano poco codice.

Ma per favore ... questo è il modo peggiore per affrontare la programmazione dei microcontrollori !!!

Imparare ad ottimizzare SEMPRE ...

Guglielmo

Ma scusa Guglielmo perché dovrei perdere tempo ad ottimizzare 10 righe di codice?
La tecnologia sta avanzando e man mano anche la memoria disponibile di questi dispositivi. Quello che intendo non è esagerare ed usare long int sempre a prescindere ma nemmeno scendere nel dettaglio usando byte quando scrivo programmi non complessi. La rivisitazione dovrei farla se ho effettivi rallentamenti o mi servono risposte veloci il più possibile. Qui in ambito prototipazione semplice non mi sembra necessario come potrebbe esser in ambito aerospaziale che frequento ed pochi centesimi fan la differenza!
In più se è un lavoro hobby personale non retribuito e si ha poco tempo non vedo il motivo di ottimizzare il codice!
Spero comprendi cosa intendo!

Otimizzare non serve tanto l'hardware avanza sempre, sarà sempre viù veloce e con più memoria, con questa frase credo siano partiti a scrivere Windows e così oggi ci troviamo un mattone pachidermico che nun se pò vedé.
Chiaro che se devi far lampeggiare un led se non ottimizzi non cambia nulla, ma indicarlo come strada maestra dell'hobbita sia un errore grossolano, sapere e capire gli strumenti che si ha a disposizione è quasi imperativo, poi che per far lampeggiare un led usi la digitalWrite piuttosto che manipolare direttamente i registri e le porte è normalissimo, se poi ti trovi a dover usare cose tipo led neopixel (tanto amati da Guglielmo per questo) devi usare codice ultra ottimizzato pena il non funzionamento, se come forma mentis si impara sin da subito a "non sprecare" memoria e cicli CPU è sempre meglio

Triko93:
Ma scusa Guglielmo perché dovrei perdere tempo ad ottimizzare 10 righe di codice?

Perché ABITUARSI a scrivere codice ottimizzato ti aiuta quando dovrai realizzare qualcosa di più complesso. Se ti limiti a fare cose molto semplici e non hai intenzione di affrontare cose più complesse, va benissimo.
In caso contrario, è come dire che è inutile per un atleta fare 4 km di corsa in allenamento se poi deve fare solo 100 metri di corsa.

La tecnologia sta avanzando e man mano anche la memoria disponibile di questi dispositivi.

Ok, per i PC è vero, ma ampliami la RAM di Arduino UNO e ne riparliamo.

fabpolli:
Otimizzare non serve tanto l'hardware avanza sempre, sarà sempre viù veloce e con più memoria, con questa frase credo siano partiti a scrivere Windows e così oggi ci troviamo un mattone pachidermico che nun se pò vedé.
Chiaro che se devi far lampeggiare un led se non ottimizzi non cambia nulla, ma indicarlo come strada maestra dell'hobbita sia un errore grossolano, sapere e capire gli strumenti che si ha a disposizione è quasi imperativo, poi che per far lampeggiare un led usi la digitalWrite piuttosto che manipolare direttamente i registri e le porte è normalissimo, se poi ti trovi a dover usare cose tipo led neopixel (tanto amati da Guglielmo per questo) devi usare codice ultra ottimizzato pena il non funzionamento, se come forma mentis si impara sin da subito a "non sprecare" memoria e cicli CPU è sempre meglio

(Be' negli anni e' migliorato davvero molto win10) Certo probabilmente e' il mio punto di vista che mi porta a scrivere quanto hai citato. Se ci si avvia seriamente nel campo hobbystico son d'accordo anche io che bisogna capire tutto ed approfondire, ho risposto cosi' perche' avendo sofferto a programmare assembly un po' di alto livello senza ottimizzazioni mi fa sentire umano. Soprattutto con i progetti casuali che vengo a produrre.
Anche io son a favore dell'ottimizzazione assolutamente, dicevo solo che in casi semplici e sporadici non serve perder tempo ad ottimizzare!
Se dovessi scrivere una libreria deve esser per forza ottimizzata!
Tutto qui. E quella brutta frase che ho scritto sempre riferita ai progetti di passaggio e piccoli.

docdoc:
Perché ABITUARSI a scrivere codice ottimizzato ti aiuta quando dovrai realizzare qualcosa di più complesso. Se ti limiti a fare cose molto semplici e non hai intenzione di affrontare cose più complesse, va benissimo.
In caso contrario, è come dire che è inutile per un atleta fare 4 km di corsa in allenamento se poi deve fare solo 100 metri di corsa.

Ok, per i PC è vero, ma ampliami la RAM di Arduino UNO e ne riparliamo.

Ampliare la RAM di Arduino ci si potrebbe pensare :smiley:
E certo capisco la tua osservazione di conseguenza va bene, abituiamoci fin da subito. Mi sa che stavo parlando per me prima, siccome programmo gia', arduino e' piu' un relax e non mi metto ad ottimizzare.
Detto tutto chiudiamo l'off-topic. Cerchero' di migliorare nell'ottimizzazione del codice in C anche qui :slight_smile:

Triko93:
siccome programmo gia', arduino e' piu' un relax e non mi metto ad ottimizzare.

Hehe, si ma guarda che anche per me è così! Ma è come imparare ad indentare correttamente e dare nomi di variabili decenti: se vuoi evolvere nel mondo di Arduino è bene abituarsi a queste cose.

Se sei abituato con linguaggi evoluti su PC, dove tra l'altro esiste un garbage collector, quindi in C# o Java per dire, ovviamente non sei abituato perché serve a ben poco, se un programma compilato da 4 megabyte (per parlare di "piccole" applicazioni) occupa 20k in più chiessene, ma su Arduino è bene partire "col piede giusto", e ti assicuro che si fa presto a riempire i poveri 2k di RAM!
Quindi oltre a usare byte invece di unsigned int dove possibile, niente oggetti String ma solo char* (e preallocati della dimensione strettamente necessaria), usare F() per memorizzare in flash le stringhe costanti invece della SRAM, eccetera.. :slight_smile:

Post molto educativo per i futuri programmatori che, di conseguenza, sono anche giovani e MAI crederebbero che Apple Mac, nel suo primo esemplare, aveva solo 128k (no, non mega, erano proprio Kappa), poi elevati a 256, poi 512. E aveva installato Word, Excel e tante altre cose... E chi lo ha usato (come il sottoscritto) sa che funzionava perfettamente!!!
C'è molto codice inutile al mondo, veramente tanto, complice le memorie che costano sempre meno e le cpu sempre più veloci.
Ma pensiamoci un attimo: ci lamentavamo 20 anni fa che i nostri PC erano lenti e ci lamentiamo ancora oggi...
Troppo codice! E pochi programmatori disposti a "perdere tempo ad ottimizzare"
Tutto qui.

steve-cr:
Post molto educativo per i futuri programmatori che, di conseguenza, sono anche giovani e MAI crederebbero che Apple Mac, nel suo primo esemplare, aveva solo 128k (no, non mega, erano proprio Kappa), poi elevati a 256, poi 512. E aveva installato Word, Excel e tante altre cose… E chi lo ha usato (come il sottoscritto) sa che funzionava perfettamente!!!
C’è molto codice inutile al mondo, veramente tanto, complice le memorie che costano sempre meno e le cpu sempre più veloci.
Ma pensiamoci un attimo: ci lamentavamo 20 anni fa che i nostri PC erano lenti e ci lamentiamo ancora oggi…
Troppo codice! E pochi programmatori disposti a “perdere tempo ad ottimizzare”
Tutto qui.

Nulla di sbagliato, lo dimostrano svariati giochi in fase Beta, che quasi giunti ad un OpenBeta non son ancora stabili etc etc (resta una Beta pero’ un minimo ci si aspetta).
E gia’, nulla da dire sui Mac, ottimizzati come si deve!

docdoc:
Hehe, si ma guarda che anche per me è così! Ma è come imparare ad indentare correttamente e dare nomi di variabili decenti: se vuoi evolvere nel mondo di Arduino è bene abituarsi a queste cose.

Se sei abituato con linguaggi evoluti su PC, dove tra l’altro esiste un garbage collector, quindi in C# o Java per dire, ovviamente non sei abituato perché serve a ben poco, se un programma compilato da 4 megabyte (per parlare di “piccole” applicazioni) occupa 20k in più chiessene, ma su Arduino è bene partire “col piede giusto”, e ti assicuro che si fa presto a riempire i poveri 2k di RAM!
Quindi oltre a usare byte invece di unsigned int dove possibile, niente oggetti String ma solo char* (e preallocati della dimensione strettamente necessaria), usare F() per memorizzare in flash le stringhe costanti invece della SRAM, eccetera… :slight_smile:

DocDoc allora quando posto il codice mi dai una dritta perche’ C seriamente non l’ho mai affrontato ed inizio ora visto che a Novembre inizio il corso con un esame finale nel quale dovro’ dimostrare gli algoritmi :open_mouth:
Appena butto giu’ qualche riga se non ti dispiace ti mando un PM e poi apro un topic!

Triko93:
Appena butto giu' qualche riga se non ti dispiace ti mando un PM e poi apro un topic!

... ci vogliamo ricordare del REGOLAMENTO, punto 12 ?

Guglielmo

Secondo me non ha senso usare byte in programmi non complessi o che abbiano poco codice.

In realtà per i programmatori professionisti tendono a scrivere codice che utilizzi il minimo di risorse, memoria e tempo della CPU. Se c'è da risparmiare un byte lo fanno anche se poi il programma deve girare su un PC da 32 Gbyte di ram.

Se io ho l'abitudine di fare sempre bene, non c'è rischio di fare male per distrazione. Su un microcotrollore a maggior ragione! Se a te piacesse scrivere programmi per PC hobbystici, forse non arriveresti mai in nessun caso al limite di ram, mentre su arduino è capitato tante volte arrivare al limite della ram, forse tu non ti sei cimentato in programmi che richiedono memoria, ma è molto facile con arduino esaurire la ram :slight_smile:

Ultimamente mi sto divertendo un po' con gli attiny85.
In quel caso ottimizzi anche il blink!

torn24:
In realtà per i programmatori professionisti tendono a scrivere codice che utilizzi il minimo di risorse, memoria e tempo della CPU. Se c’è da risparmiare un byte lo fanno anche se poi il programma deve girare su un PC da 32 Gbyte di ram.

Se io ho l’abitudine di fare sempre bene, non c’è rischio di fare male per distrazione. Su un microcotrollore a maggior ragione! Se a te piacesse scrivere programmi per PC hobbystici, forse non arriveresti mai in nessun caso al limite di ram, mentre su arduino è capitato tante volte arrivare al limite della ram, forse tu non ti sei cimentato in programmi che richiedono memoria, ma è molto facile con arduino esaurire la ram :slight_smile:

In effetti mai successo di andare in memory lack!
Comunque ho gia’ iniziato ad ottimizzare :smiley:

gpb01:
… ci vogliamo ricordare del REGOLAMENTO, punto 12 ?

Guglielmo

Certamente, non ho fatto richieste di scrittura codice personale, solo un suggerimento veloce :smiley: