Nilai maks integer NodeMCU Lua adalah 2 ^ 31

Aug 19 2020

Lua 5.1.4 pada SDK 3.0.1-dev (fce080e) Mencoba menggunakan node.dsleepMax () dan mengembalikan angka yang sangat kecil (147324921). Kemudian saya mencoba mengatur waktu tidur secara manual di node.dsleep ke nilai maks 32-bit (4294967295) dan hanya tetap tidur selama sekitar 30 menit atau lebih.

Mencoba yang berikut ini:

    sleeptime = 4294967295
    > 
    =print(sleeptime)

2147483647

yaitu 2 ^ 31 -1.

Juga melakukan penambahan loop ke variabel, dan itu menjadi negatve ketika mencapai 2 ^ 31.

Pertanyaan:

  1. Mengapa variabel membungkus pada 2 ^ 31?
  2. Bukankah node.dsleep seharusnya menerima nilai 64-bit dengan SDK 2.1 dan yang lebih baru?

Salam,

Cesar

Jawaban

MarcelStör Aug 20 2020 at 06:47

Anda sudah mendapat umpan balik tentang int vs. float. Adapun dsleep dokumentasi tidak secara eksplisit menyatakan bahwa ia menerima nilai 64bit tetapi memang itulah yang terjadi sesuaihttps://github.com/nodemcu/nodemcu-firmware/pull/2358 (sejak April 2018).