Il valore massimo dell'intero Lua di NodeMCU è 2 ^ 31

Aug 19 2020

Lua 5.1.4 su SDK 3.0.1-dev (fce080e) Tentativo di utilizzare node.dsleepMax () e restituisce un numero molto più piccolo (147324921). Quindi ho provato a impostare manualmente il tempo di sospensione in node.dsleep sul valore massimo di 32 bit (4294967295) ed è rimasto inattivo solo per circa 30 minuti circa.

Ho provato quanto segue:

    sleeptime = 4294967295
    > 
    =print(sleeptime)

2147483647

che è 2 ^ 31-1.

Inoltre ha fatto un ciclo aggiungendo a una variabile, e diventa negativa quando raggiunge 2 ^ 31.

Domande:

  1. Perché il wrapping della variabile è 2 ^ 31?
  2. Nodo.dsleep non dovrebbe accettare un valore a 64 bit con SDK 2.1 e versioni successive?

Saluti,

Cesar

Risposte

MarcelStör Aug 20 2020 at 06:47

Hai già ricevuto un feedback su int vs. float. Per quanto riguarda dsleep la documentazione non si afferma esplicitamente che accetta valori a 64 bit, ma questo è effettivamente ciò che sta accadendo secondohttps://github.com/nodemcu/nodemcu-firmware/pull/2358 (da aprile 2018).