LUA坏参数#2

我是一个完全的LUA/ESP8266的初学者,我正在尝试找出这个错误的来源:

PANIC:在调用Lua API时未受保护的错误('set'的第2个坏参数(索引超出范围))

这是串行监视器中的整个消息:

NodeMCU 2.2.0.0使用frightanic.com提供的Docker构建
.branch:master
.commit:11592951b90707cdcb6d751876170bf4da82850d
.SSL:false
构建类型:连续数
.LFS:禁用
模块:adc,bit,dht,file,gpio,i2c,mqtt,net,node,ow,spi,tmr,uart,wifi
构建于2019-12-07 23:52
以SDK 2.2.1(6ab97e9)的Lua 5.1.4为基础
> Config done,IP是192.168.2.168
LED-Server已启动
PANIC:在调用Lua API时未受保护的错误('set'的第2个坏参数(索引超出范围))

 ets 201318日,rst原因:2,引导模式:(3,6)

加载0x40100000,长度27780,房间16
尾巴4
校验和0xbc
加载0x3ffe8000,长度2188,房间4
尾巴8
校验和0xba
加载0x3ffe888c,长度136,房间0
尾巴8
校验和0xf2
csum 0xf2
å¬ú‰.Éo‰ísÉÚo|Ï.å.õd$`..#íú..æÑ2rí.lúN‡.Éo„..l`.Ñ‚r€lÑ$.å...

我将此代码([https://github.com/Christoph-D/esp8266-wakelight]中的代码上传到ESP8266,并构建了具有所有必需模块的正确NodeMCU固件。

串行输出几秒钟后,我收到这个错误并开始重复重启。

我应该从哪里开始寻找问题?

非常感谢!

EDIT:在lua文件中,只有很少几个地方写有关“set”的内容:

local function update_buffer(buffer, c)
  if not c.r_frac then c.r_frac = 0 end
  if not c.g_frac then c.g_frac = 0 end
  if not c.b_frac then c.b_frac = 0 end
  local r2 = c.r_frac >= 0 and c.r + 1 or c.r - 1
  local g2 = c.g_frac >= 0 and c.g + 1 or c.g - 1
  local b2 = c.b_frac >= 0 and c.b + 1 or c.b - 1
  local r3, g3, b3
  local set = buffer.set
  for i = 1, NUM_LEDS do
    if i > c.r_frac then r3 = c.r else r3 = r2 end
    if i > c.g_frac then g3 = c.g else g3 = g2 end
    if i > c.b_frac then b3 = c.b else b3 = b2 end
    set(buffer,i-1,g3,r3,b3)
  end
end

有什么问题吗?

点赞
用户4984564
用户4984564

在调用 set 的 for-loop 上方,尝试添加以下内容:

print(buffer:size(), NUM_LEDS)

如果一切正常,它应该打印相同的数字两次。如果 NUM_LEDS 更大,则说明出现了错误。

我真的不明白为什么它在那个地方使用全局变量;出于这个原因,使用 buffer:size() 更有意义。

2019-12-08 14:29:41