Go Down

Topic: millis...lo odio  (Read 854 times) previous topic - next topic

Y888099

#15
Nov 26, 2016, 02:13 pm Last Edit: Nov 26, 2016, 03:04 pm by Y888099
Code: [Select]

50c50
<  // unsigned long currentMillis = millis();
---
>   unsigned long currentMillis = millis();
52c52
<   if (millis() - previousMillis >= interval) {
---
>   if (currentMillis - previousMillis >= interval) {
54c54
<     previousMillis = millis();
---
>     previousMillis = currentMillis;
68a69
>


credo, perche' ha optato per allocare una variabile
    uint32_t currentMillis
da 32bit, 4 byte,  in stack

"probabilmente" (da verificare) potresti aver
benefici preponendo "register", tipo cosi'
    register uint32_t currentMillis;
se il compilatore onora la richiesta, ti ritrovi
currentMillis implementata "a registro"

ora, su macchine a 32bit un registro e' a 32bit
ed e' sufficiente per contenere una variabile uint32_t

su macchine ad 8bit, un registro e' ad 8bit
quindi … questa cosa del voler implementare
una variabile a 32bit su 4 registri ad 8 bit
costa sicuramente dei push & pop e del glue logic
nel mezzo, e potrebbe venire scaratata, sopratutto
se si e' data flag di ottimizzazione per spazio

a sua volta, la chiamata a funzione dentro la
    if (millis() … )
schiaffa il suo ret-type (size? 4 byte?) o su stack
o su registro temporaneo, ridotto poi per il calcolo
della conditional branch (se saltare nel ramo true,
o false)

pero' e' *spannometria speculativa* la mia,
per essere certi di cosa succeda bisognerebbe
sbirciare l'assembly, che racconta cosa ha deciso di fare
il compilatore di turno, caso per caso

provate, io non ho modo di farlo al momento :D
Et voilà le jeux

vbextreme

#16
Nov 26, 2016, 09:06 pm Last Edit: Nov 26, 2016, 09:07 pm by vbextreme
Dato che gli sketch vengono compilati con g++ e dato che il C++ dichiara l'inutilità di usare "register", io per essere coerente non lo uso mai.
Discorso a parte per il C, di cui ha già dato ottime delucidazioni @Y888099.

Come ha notato @As_Needed, più il codice è "semplice" o meglio "chiaro" e più possibilità ha il compilatore di ottimizzare.
Di conseguenza scrivere meno codice in C non significa che il codice sia più performante.
Easy framework linguaggio C: https://github.com/vbextreme/EasyFramework
Hack your life: http://vbextreme.netai.net/
Unoffical Telegram group: https://telegram.me/joinchat/ALRu8ACkdTdXyz-2P7v13A

Go Up