Luat Console,调试神器!

                    <p style="outline: 0px; padding: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify; word-break: break-all; font-family: -apple-system, " sf="" ui="" text",="" arial,="" "pingfang="" sc",="" "hiragino="" sans="" gb",="" "microsoft="" yahei",="" "wenquanyi="" micro="" hei",="" sans-serif;="" font-variant-ligatures:="" common-ligatures;"="">前言:这次教大家使用Luat的console功能,如果使用过MicroPython,应该对console很熟悉。console,顾名思义,控制台,能做什么? 理论上在脚本运行的功能都可以在控制台执行。有什么好处?举个简单的例子:反转一个字符串,按照之前的步骤,写一个脚本,下载进模块,成功,万事大吉。失败,从头再来。这样的操作很繁琐。</p><p style="outline: 0px; padding: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify; word-break: break-all; font-family: -apple-system, " sf="" ui="" text",="" arial,="" "pingfang="" sc",="" "hiragino="" sans="" gb",="" "microsoft="" yahei",="" "wenquanyi="" micro="" hei",="" sans-serif;="" font-variant-ligatures:="" common-ligatures;"="">那么使用了console,就可以这样玩</p><p style="outline: 0px; padding: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify; word-break: break-all; font-family: -apple-system, " sf="" ui="" text",="" arial,="" "pingfang="" sc",="" "hiragino="" sans="" gb",="" "microsoft="" yahei",="" "wenquanyi="" micro="" hei",="" sans-serif;="" font-variant-ligatures:="" common-ligatures;"=""><img src="http://oldask.openluat.com/image/show/attachments-2018-09-jp4zWo8N5b9c6c288acc9.jpg" class="img-responsive" style="color: rgb(0, 0, 0); font-size: 14px; text-align: start; width: 486px;"></p><div><br></div><p style="outline: 0px; padding: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify; word-break: break-all; font-family: -apple-system, " sf="" ui="" text",="" arial,="" "pingfang="" sc",="" "hiragino="" sans="" gb",="" "microsoft="" yahei",="" "wenquanyi="" micro="" hei",="" sans-serif;="" font-variant-ligatures:="" common-ligatures;"="">这里写图片描述</p><p style="outline: 0px; padding: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify; word-break: break-all; font-family: -apple-system, " sf="" ui="" text",="" arial,="" "pingfang="" sc",="" "hiragino="" sans="" gb",="" "microsoft="" yahei",="" "wenquanyi="" micro="" hei",="" sans-serif;="" font-variant-ligatures:="" common-ligatures;"="">如果手抖打错一个单词,不要着急,再输入一遍即可。</p><p style="outline: 0px; padding: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify; word-break: break-all; font-family: -apple-system, " sf="" ui="" text",="" arial,="" "pingfang="" sc",="" "hiragino="" sans="" gb",="" "microsoft="" yahei",="" "wenquanyi="" micro="" hei",="" sans-serif;="" font-variant-ligatures:="" common-ligatures;"="">所以,使用console,提高调试的效率,加快开发速度。</p><p style="outline: 0px; padding: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify; word-break: break-all; font-family: -apple-system, " sf="" ui="" text",="" arial,="" "pingfang="" sc",="" "hiragino="" sans="" gb",="" "microsoft="" yahei",="" "wenquanyi="" micro="" hei",="" sans-serif;="" font-variant-ligatures:="" common-ligatures;"=""><img src="http://oldask.openluat.com/image/show/attachments-2018-09-CXctRBd05b9c6c9c1d1f8.jpg" class="img-responsive" style="color: rgb(0, 0, 0); font-size: 14px; text-align: start; width: 498.4px; height: 297.631px;"></p><p style="outline: 0px; padding: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify; word-break: break-all; font-family: -apple-system, " sf="" ui="" text",="" arial,="" "pingfang="" sc",="" "hiragino="" sans="" gb",="" "microsoft="" yahei",="" "wenquanyi="" micro="" hei",="" sans-serif;="" font-variant-ligatures:="" common-ligatures;"="">使用console功能,需要在main.lua里面加入</p><pre class="prettyprint" style="outline: 0px; padding: 8px 16px 6px 56px; margin-bottom: 24px; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 14px; position: relative; overflow-y: hidden; line-height: 22px; color: rgb(0, 0, 0); background-color: rgb(40, 44, 52); border-width: initial; border-style: none; border-color: initial; font-variant-ligatures: common-ligatures;"><code class="has-numbering" style="outline: 0px; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 14px; padding: 0.5em; line-height: 22px; color: rgb(171, 178, 191); background-color: rgb(40, 44, 52); border-radius: 4px; display: block; overflow-x: auto; white-space: pre; word-wrap: normal; text-size-adjust: none; word-break: break-all;">require "console"

console.setup(1, 115200) – 设置为串口1,波特率为115200

<p style=”outline: 0px; padding: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify; word-break: break-all; font-family: -apple-system, “ sf=”” ui=”” text”,=”” arial,=”” “pingfang=”” sc”,=”” “hiragino=”” sans=”” gb”,=”” “microsoft=”” yahei”,=”” “wenquanyi=”” micro=”” hei”,=”” sans-serif;=”” font-variant-ligatures:=”” common-ligatures;”=””>console是通过串口输入,可以使用USB转TTL连接UART,也可以将跳线帽短接UART,使用USB接口 。

<p style=”outline: 0px; padding: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify; word-break: break-all; font-family: -apple-system, “ sf=”” ui=”” text”,=”” arial,=”” “pingfang=”” sc”,=”” “hiragino=”” sans=”” gb”,=”” “microsoft=”” yahei”,=”” “wenquanyi=”” micro=”” hei”,=”” sans-serif;=”” font-variant-ligatures:=”” common-ligatures;”=””>


<p style=”outline: 0px; padding: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify; word-break: break-all; font-family: -apple-system, “ sf=”” ui=”” text”,=”” arial,=”” “pingfang=”” sc”,=”” “hiragino=”” sans=”” gb”,=”” “microsoft=”” yahei”,=”” “wenquanyi=”” micro=”” hei”,=”” sans-serif;=”” font-variant-ligatures:=”” common-ligatures;”=””>注意:如果将跳线帽短接到UART,USB连接的UART,只能进行标准的UART通信。如果要下载程序,打印trace,则需要短接到HOST口上。

<p style=”outline: 0px; padding: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify; word-break: break-all; font-family: -apple-system, “ sf=”” ui=”” text”,=”” arial,=”” “pingfang=”” sc”,=”” “hiragino=”” sans=”” gb”,=”” “microsoft=”” yahei”,=”” “wenquanyi=”” micro=”” hei”,=”” sans-serif;=”” font-variant-ligatures:=”” common-ligatures;”=””>在使用前需要做几个名词解释:

<p style=”outline: 0px; padding: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify; word-break: break-all; font-family: -apple-system, “ sf=”” ui=”” text”,=”” arial,=”” “pingfang=”” sc”,=”” “hiragino=”” sans=”” gb”,=”” “microsoft=”” yahei”,=”” “wenquanyi=”” micro=”” hei”,=”” sans-serif;=”” font-variant-ligatures:=”” common-ligatures;”=””>API:Luat Lib下面由lua编写的API

<p style=”outline: 0px; padding: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify; word-break: break-all; font-family: -apple-system, “ sf=”” ui=”” text”,=”” arial,=”” “pingfang=”” sc”,=”” “hiragino=”” sans=”” gb”,=”” “microsoft=”” yahei”,=”” “wenquanyi=”” micro=”” hei”,=”” sans-serif;=”” font-variant-ligatures:=”” common-ligatures;”=””>Lua API:Lua语言自带的API

<p style=”outline: 0px; padding: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify; word-break: break-all; font-family: -apple-system, “ sf=”” ui=”” text”,=”” arial,=”” “pingfang=”” sc”,=”” “hiragino=”” sans=”” gb”,=”” “microsoft=”” yahei”,=”” “wenquanyi=”” micro=”” hei”,=”” sans-serif;=”” font-variant-ligatures:=”” common-ligatures;”=””>扩展API:用C语言实现的,在lod里面。

<p style=”outline: 0px; padding: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify; word-break: break-all; font-family: -apple-system, “ sf=”” ui=”” text”,=”” arial,=”” “pingfang=”” sc”,=”” “hiragino=”” sans=”” gb”,=”” “microsoft=”” yahei”,=”” “wenquanyi=”” micro=”” hei”,=”” sans-serif;=”” font-variant-ligatures:=”” common-ligatures;”=””>扩展API和Lua API直接可以通过console调用,API需要在脚本里require后才能调用,举个例子:如果使用http,那么需要在main.lua里面require “http”。什么?API说明哪儿找? 当然上wiki。

<p style=”outline: 0px; padding: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify; word-break: break-all; font-family: -apple-system, “ sf=”” ui=”” text”,=”” arial,=”” “pingfang=”” sc”,=”” “hiragino=”” sans=”” gb”,=”” “microsoft=”” yahei”,=”” “wenquanyi=”” micro=”” hei”,=”” sans-serif;=”” font-variant-ligatures:=”” common-ligatures;”=””>进入正题,打开串口调试助手,选择串口,波特率。

<p style=”outline: 0px; padding: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify; word-break: break-all; font-family: -apple-system, “ sf=”” ui=”” text”,=”” arial,=”” “pingfang=”” sc”,=”” “hiragino=”” sans=”” gb”,=”” “microsoft=”” yahei”,=”” “wenquanyi=”” micro=”” hei”,=”” sans-serif;=”” font-variant-ligatures:=”” common-ligatures;”=””>举几个例子,感受一下

<p style=”outline: 0px; padding: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify; word-break: break-all; font-family: -apple-system, “ sf=”” ui=”” text”,=”” arial,=”” “pingfang=”” sc”,=”” “hiragino=”” sans=”” gb”,=”” “microsoft=”” yahei”,=”” “wenquanyi=”” micro=”” hei”,=”” sans-serif;=”” font-variant-ligatures:=”” common-ligatures;”=””>1、json

<p style=”outline: 0px; padding: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify; word-break: break-all; font-family: -apple-system, “ sf=”” ui=”” text”,=”” arial,=”” “pingfang=”” sc”,=”” “hiragino=”” sans=”” gb”,=”” “microsoft=”” yahei”,=”” “wenquanyi=”” micro=”” hei”,=”” sans-serif;=”” font-variant-ligatures:=”” common-ligatures;”=””>


<p style=”outline: 0px; padding: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify; word-break: break-all; font-family: -apple-system, “ sf=”” ui=”” text”,=”” arial,=”” “pingfang=”” sc”,=”” “hiragino=”” sans=”” gb”,=”” “microsoft=”” yahei”,=”” “wenquanyi=”” micro=”” hei”,=”” sans-serif;=”” font-variant-ligatures:=”” common-ligatures;”=””>2、Lua string

<p style=”outline: 0px; padding: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify; word-break: break-all; font-family: -apple-system, “ sf=”” ui=”” text”,=”” arial,=”” “pingfang=”” sc”,=”” “hiragino=”” sans=”” gb”,=”” “microsoft=”” yahei”,=”” “wenquanyi=”” micro=”” hei”,=”” sans-serif;=”” font-variant-ligatures:=”” common-ligatures;”=””>


<p style=”outline: 0px; padding: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify; word-break: break-all; font-family: -apple-system, “ sf=”” ui=”” text”,=”” arial,=”” “pingfang=”” sc”,=”” “hiragino=”” sans=”” gb”,=”” “microsoft=”” yahei”,=”” “wenquanyi=”” micro=”” hei”,=”” sans-serif;=”” font-variant-ligatures:=”” common-ligatures;”=””>3、misc

<p style=”outline: 0px; padding: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify; word-break: break-all; font-family: -apple-system, “ sf=”” ui=”” text”,=”” arial,=”” “pingfang=”” sc”,=”” “hiragino=”” sans=”” gb”,=”” “microsoft=”” yahei”,=”” “wenquanyi=”” micro=”” hei”,=”” sans-serif;=”” font-variant-ligatures:=”” common-ligatures;”=””>


<p style=”outline: 0px; padding: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify; word-break: break-all; font-family: -apple-system, “ sf=”” ui=”” text”,=”” arial,=”” “pingfang=”” sc”,=”” “hiragino=”” sans=”” gb”,=”” “microsoft=”” yahei”,=”” “wenquanyi=”” micro=”” hei”,=”” sans-serif;=”” font-variant-ligatures:=”” common-ligatures;”=””>4、AT命令

<p style=”outline: 0px; padding: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify; word-break: break-all; font-family: -apple-system, “ sf=”” ui=”” text”,=”” arial,=”” “pingfang=”” sc”,=”” “hiragino=”” sans=”” gb”,=”” “microsoft=”” yahei”,=”” “wenquanyi=”” micro=”” hei”,=”” sans-serif;=”” font-variant-ligatures:=”” common-ligatures;”=””>


<p style=”outline: 0px; padding: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify; word-break: break-all; font-family: -apple-system, “ sf=”” ui=”” text”,=”” arial,=”” “pingfang=”” sc”,=”” “hiragino=”” sans=”” gb”,=”” “microsoft=”” yahei”,=”” “wenquanyi=”” micro=”” hei”,=”” sans-serif;=”” font-variant-ligatures:=”” common-ligatures;”=””>深入分析

<p style=”outline: 0px; padding: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify; word-break: break-all; font-family: -apple-system, “ sf=”” ui=”” text”,=”” arial,=”” “pingfang=”” sc”,=”” “hiragino=”” sans=”” gb”,=”” “microsoft=”” yahei”,=”” “wenquanyi=”” micro=”” hei”,=”” sans-serif;=”” font-variant-ligatures:=”” common-ligatures;”=””>将console的核心代码提取,精简

newfenv = {                     -- 沙盒新环境,并重写print函数。
print = function( ... )
print(arg[1].."test")
end
}

setmetatable(newfenv,{__index = _G}) –新环境继承_G全局表

–xpcall捕捉脚本异常
xpcall(function()
local line = “print(1)”
local f = loadstring(line)
setfenv(f, newfenv) –在沙盒中执行f()函数
f()
end,
function() – 错误输出
print(debug.traceback())
end
)
–输出结果 1test

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
<p style=”outline: 0px; padding: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify; word-break: break-all; font-family: -apple-system, “ sf=”” ui=”” text”,=”” arial,=”” “pingfang=”” sc”,=”” “hiragino=”” sans=”” gb”,=”” “microsoft=”” yahei”,=”” “wenquanyi=”” micro=”” hei”,=”” sans-serif;=”” font-variant-ligatures:=”” common-ligatures;”=””>1、loadstring

<p style=”outline: 0px; padding: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify; word-break: break-all; font-family: -apple-system, “ sf=”” ui=”” text”,=”” arial,=”” “pingfang=”” sc”,=”” “hiragino=”” sans=”” gb”,=”” “microsoft=”” yahei”,=”” “wenquanyi=”” micro=”” hei”,=”” sans-serif;=”” font-variant-ligatures:=”” common-ligatures;”=””>Lua里面可以使用loadstring来加载一个字符串,返回function。

f = loadstring("a = 1")   -- 相当于 function () a = 1 end,返回值为function类型
f() --执行函数
  • 1
  • 2
<p style=”outline: 0px; padding: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify; word-break: break-all; font-family: -apple-system, “ sf=”” ui=”” text”,=”” arial,=”” “pingfang=”” sc”,=”” “hiragino=”” sans=”” gb”,=”” “microsoft=”” yahei”,=”” “wenquanyi=”” micro=”” hei”,=”” sans-serif;=”” font-variant-ligatures:=”” common-ligatures;”=””>2、沙盒

<p style=”outline: 0px; padding: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify; word-break: break-all; font-family: -apple-system, “ sf=”” ui=”” text”,=”” arial,=”” “pingfang=”” sc”,=”” “hiragino=”” sans=”” gb”,=”” “microsoft=”” yahei”,=”” “wenquanyi=”” micro=”” hei”,=”” sans-serif;=”” font-variant-ligatures:=”” common-ligatures;”=””>出于安全或者改变一些内置函数行为的目的,某些程序在沙盒中执行,即使程序崩溃,也不会影响全局域。newfenv为沙盒环境,这儿重写了print函数,在第一个参数后面添加test输出。

<p style=”outline: 0px; padding: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify; word-break: break-all; font-family: -apple-system, “ sf=”” ui=”” text”,=”” arial,=”” “pingfang=”” sc”,=”” “hiragino=”” sans=”” gb”,=”” “microsoft=”” yahei”,=”” “wenquanyi=”” micro=”” hei”,=”” sans-serif;=”” font-variant-ligatures:=”” common-ligatures;”=””>3、xpcall

<p style=”outline: 0px; padding: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify; word-break: break-all; font-family: -apple-system, “ sf=”” ui=”” text”,=”” arial,=”” “pingfang=”” sc”,=”” “hiragino=”” sans=”” gb”,=”” “microsoft=”” yahei”,=”” “wenquanyi=”” micro=”” hei”,=”” sans-serif;=”” font-variant-ligatures:=”” common-ligatures;”=””>xpcall类似于JAVA中的try…..catch…进行脚本的异常捕捉。

<p style=”outline: 0px; padding: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify; word-break: break-all; font-family: -apple-system, “ sf=”” ui=”” text”,=”” arial,=”” “pingfang=”” sc”,=”” “hiragino=”” sans=”” gb”,=”” “microsoft=”” yahei”,=”” “wenquanyi=”” micro=”” hei”,=”” sans-serif;=”” font-variant-ligatures:=”” common-ligatures;”=””>在理解了上面程序后,不难了解console的运行过程。从串口接收到数据后,执行串口接收中断程序,通过loadstring将串口数据包装为function,重写print和sendat函数,在沙盒中运行,并将结果通过uart输出。

上次更新 2021-01-28