La valeur maximale de l'entier NodeMCU Lua est 2 ^ 31

Aug 19 2020

Lua 5.1.4 sur SDK 3.0.1-dev (fce080e) Essayer d'utiliser node.dsleepMax () et il renvoie un nombre vraiment plus petit (147324921). Ensuite, j'ai essayé de régler manuellement le temps de sommeil dans node.dsleep sur la valeur maximale de 32 bits (4294967295) et il n'est resté en sommeil que pendant environ 30 minutes.

J'ai essayé ce qui suit:

    sleeptime = 4294967295
    > 
    =print(sleeptime)

2147483647

qui est 2 ^ 31 -1.

Une boucle a également été ajoutée à une variable, et elle devient négative lorsqu'elle atteint 2 ^ 31.

Des questions:

  1. Pourquoi la variable s'enroule-t-elle à 2 ^ 31?
  2. Nœud.dsleep n'est-il pas censé accepter une valeur 64 bits avec SDK 2.1 et supérieur?

Cordialement,

César

Réponses

MarcelStör Aug 20 2020 at 06:47

Vous avez déjà des commentaires concernant int vs float. Quant à dsleep la documentation, elle n'indique pas explicitement qu'elle accepte les valeurs 64 bits, mais c'est en effet ce qui se passe selonhttps://github.com/nodemcu/nodemcu-firmware/pull/2358 (depuis avril 2018).