内容纲要
今天遇到的问题
- 我想调用string 的一个函数, 我像C++ 或者JAVA 一样直接
.
它,其实我想调用它的是一个参数,应该用:
,这个BUG 找了好久。 - 在不同的分文件下面的函数,要调用它的函数需要 前面写文件名,以示区分。在C/C++ 中,这种调用往往是在头文件中引入的,所以会区分。由于在lua 中没有头文件,所以需要人为手动调用。
- 就是因为2 中的调用问题,导致 我以为 sys.taskInit() 函数启动不成功,而且编译器还不报错,
- 所有调用过sys 下的 sys.wait() sys.timerLoopStart() sys.waitUntil() 等这类函数 都必须在 sys.task 中执行, 不然报错,如果你把一个普通函数
第二天遇到的问题
- if else 中,第二个要用 elseif, 我忘记写if 了,导致限定val 的值的时候没执行外部函数写的判断语句,而我找问题点却是在外部函数找。(属于疏忽大意)
- 数据位读取的时候 lua 是从1 开始,C 语言是从0
开始TCP/MQTT 的学习
-
setmetatable() 函数
setmetatable(o,mt)
第一个o 是一个 普通 tab 表,mt 中存放的是索引 __index
一个疑问?,如果 require 多层 ,通过调用深层的函数获得一个setmetatable(o,mt) ,这种类型的在 浅层的文件 传参到另一个lua 文件下,
懂了,编译器的认知,
-
table 函数库。 remove ,insert 等函数
-
question: 函数名字当成一个形参 放到table 表中,的含义。
I2c 没调通的原因
- 下方代码是我写的I2C,这里测试不用CRC校验,这里之前遇到的问题点,recv 必须要放在循环里面,不断地读它。这样才能轮询到所要数据,当然这个循环也要有一个超时的条件,一般I2C还是要有CRC校验的
local function i2c_Send_SHT20(command)
-- local recvCount = 0
i2c_send(command) -- 这里已经确定了要获取 温度 or 湿度,所以不必关心recv 收到的数据
local retryCount = 0
while retryCount < 10 do
-- 取得1bit 数据,有2个字节 就回传 只要2个字节,就不进行校验了。
-- 设置定时器,超时就return
recv = i2c_recv(2)
if recv and #recv >= 2 then return true end
sys.wait(10)
retryCount = retryCount + 1
end
log.info("cacheDATA没有收到数据到数据!!", recv)
return false
-- 判断是否收到数据,如果收到就返回并跳出,如果没收到就回调
end