ค่าสูงสุด NodeMCU Lua จำนวนเต็มคือ 2 ^ 31

Aug 19 2020

Lua 5.1.4 บน SDK 3.0.1-dev (fce080e) พยายามใช้ node.dsleepMax () และส่งคืนจำนวนที่น้อยกว่ามาก (147324921) จากนั้นฉันพยายามตั้งเวลาสลีปด้วยตนเองใน node.dsleep เป็นค่าสูงสุด 32 บิต (4294967295) และยังคงอยู่ในโหมดสลีปประมาณ 30 นาทีเท่านั้น

พยายามดังต่อไปนี้:

    sleeptime = 4294967295
    > 
    =print(sleeptime)

2147483647

ซึ่งก็คือ 2 ^ 31 -1

ยังเพิ่มการวนซ้ำในตัวแปรและจะกลายเป็นลบเมื่อถึง 2 ^ 31

คำถาม:

  1. เหตุใดการตัดตัวแปรจึงอยู่ที่ 2 ^ 31
  2. node.dsleep ไม่ควรยอมรับค่า 64 บิตที่มี SDK 2.1 ขึ้นไปใช่หรือไม่

ความนับถือ,

ซีซาร์

คำตอบ

MarcelStör Aug 20 2020 at 06:47

คุณได้รับคำติชมเกี่ยวกับ int กับ float แล้ว สำหรับdsleep เอกสารไม่ได้ระบุอย่างชัดเจนว่ายอมรับค่า 64 บิต แต่นั่นคือสิ่งที่เกิดขึ้นตามhttps://github.com/nodemcu/nodemcu-firmware/pull/2358 (ตั้งแต่เมษายน 2018)