Luat Console,调试神器!

Luat Console,调试神器!

前言:这次教大家使用Luat的console功能,如果使用过MicroPython,应该对console很熟悉。console,顾名思义,控制台,能做什么? 理论上在脚本运行的功能都可以在控制台执行。有什么好处?举个简单的例子:反转一个字符串,按照之前的步骤,写一个脚本,下载进模块,成功,万事大吉。失败,从头再来。这样的操作很繁琐。

那么使用了console,就可以这样玩


这里写图片描述

如果手抖打错一个单词,不要着急,再输入一遍即可。

所以,使用console,提高调试的效率,加快开发速度。

使用console功能,需要在main.lua里面加入

require "console"
console.setup(1, 115200)    -- 设置为串口1,波特率为115200
  • 1
  • 2

console是通过串口输入,可以使用USB转TTL连接UART,也可以将跳线帽短接UART,使用USB接口 。


注意:如果将跳线帽短接到UART,USB连接的UART,只能进行标准的UART通信。如果要下载程序,打印trace,则需要短接到HOST口上。

在使用前需要做几个名词解释:

API:Luat Lib下面由lua编写的API

Lua API:Lua语言自带的API

扩展API:用C语言实现的,在lod里面。

扩展API和Lua API直接可以通过console调用,API需要在脚本里require后才能调用,举个例子:如果使用http,那么需要在main.lua里面require “http”。什么?API说明哪儿找? 当然上wiki。

进入正题,打开串口调试助手,选择串口,波特率。

举几个例子,感受一下

1、json


2、Lua string


3、misc


4、AT命令


深入分析

将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

1、loadstring

Lua里面可以使用loadstring来加载一个字符串,返回function。

f = loadstring("a = 1")   -- 相当于 function () a = 1 end,返回值为function类型
f()     --执行函数
  • 1
  • 2

2、沙盒

出于安全或者改变一些内置函数行为的目的,某些程序在沙盒中执行,即使程序崩溃,也不会影响全局域。newfenv为沙盒环境,这儿重写了print函数,在第一个参数后面添加test输出。

3、xpcall

xpcall类似于JAVA中的try…..catch…进行脚本的异常捕捉。

在理解了上面程序后,不难了解console的运行过程。从串口接收到数据后,执行串口接收中断程序,通过loadstring将串口数据包装为function,重写print和sendat函数,在沙盒中运行,并将结果通过uart输出。

  • 发表于 2018-09-09 22:00
  • 阅读 ( 2575 )
  • 分类:默认分类

你可能感兴趣的文章

相关问题

4 条评论

请先 登录 后评论
不写代码的码农
冷红林

5 篇文章

作家榜 »

  1. 技术销售Delectate 43 文章
  2. 陈夏 26 文章
  3. 国梁 24 文章
  4. miuser 21 文章
  5. 晨旭 20 文章
  6. 朱天华 19 文章
  7. 金艺 19 文章
  8. 杨奉武 18 文章