
console模式既是即时命令行模式戚巧, 也可以称之为交互模式, 就像micropython的交互模式一样
烧录console模式脚本, 烧录方法和第一篇中讲解的一样, 脚本是luattools v2自带的,在 \resource\8910_script\script_LuaTask_V2.3.6\demo\console 目录下
烧录完成后, 我们需要用一条micro-USB数据线连接UART接口, 然后打开电脑上的串口调试助手, 我们可以看到串口调试助手进入了console
根据air724ug a13原橘仔拦理图: http://openluat-luatcommunity.oss-cn-hangzhou.aliyuncs.com/attachment/20210106210504049_EVB_Air724UG_A13_%E8%AE%BE%E8%AE%A1%E6%96%87%E4%BB%B6_20200723.pdf
我们可以看到: gpio1接到了 绿色LED灯上
现在我们想点亮这个灯, 方法就是在console中输入命令使得gpio1引脚拉高
具体 *** 作步骤只有一步, 在控制台输入:
灯亮了。这里, 我们其实用了一个pins模块的setup函数。参考API: http://doc.openluat.com/wiki/3?wiki_page_id=1382
参考文档: http://doc.openluat.com/wiki/6?wiki_page_id=60
Air724UG模块引脚共支持29个GPIO,部分引脚上电前后状态不同,如使用这些管脚,需根据实际情况使用。
注意 : Air724UG没有GPIO8
对luat来说 GPIO控制只有以下两个方法:
首先要引入 pins模块
返回值
返回function
配置为输出模式时,返回的函数,可以设置IO的电平
配置为输入圆胡或者中断模式时,返回的函数,可以实时获取IO的电平
精彩的设计, 以下是举例:
我们可以初始化一个pin脚blue_led为输出.
此时blue_led这个变量是个function类型的数据
上面的配置是输出模式,所以返回的function可以设置IO的电平
明白了, setup以后,控制GPIO高低可以直接 blue_led(0) 这样了
以demo中的console为例:
通过看main文件,我们可以确定:
下面我们来一个LED闪烁程序,尝尝鲜
然后开始编写逻辑:
我们发现, 一个小小的闪灯并不简单, 涉及了任务等我们没有接触过的luat特性, 接下来, 我们会慢慢的越来越了解
下面, 尝试将闪烁函数抽取并开启多任务
根据上面的 pins.setup 函数,如果函数的第二个参数传入function的话,就会开启GPIO中断
下面我们来尝试一下:
由于开发板没有按键,我们使用GPIO15来模拟按键, GPIO15的位置如下图所示
开启中断模式, 我们首先要定义一个function作为中断函数, 这里还是使用了匿名函数
根据上面的 pins.setup 函数的返回值, 如果是中断模式时,返回的函数可以实时获取IO的电平, 所以我们可以看一下中断电平
1.使用接口方式,用户代入用户名和密码进入取数据这是一个携带有有关函数或活动记录的各种信息的结构。 lu a_getstack 只会填充结构的私有部分供后面使用。 调用 lu a_getinfo 可以在 lu a_Debug 中填充那些可被使用的信息域。
下面对 lu a_Debug 的各个域做一个说明:
2.source: 创建这个函数的代码块的名字。 如果 source 以 '@' 打头, 指这个函数定义在一个文件中,而 '@' 之后的部分就是文件名。 若 source 以 '=' 打头, 剩余的部分由用户行为来决定如何表示源码。 其它的情况下,这个函数定义在一个字符串中, 而 source 正是那个字符串。
short_src: 一个“可打印版本”的 source ,用于出错信息。
linedefined: 函数定义开始处的行号。
lastlinedefined: 函数定义结束处的行号。
3.what: 如果函数是一个 Lu a 函数,则为一个字符串 "L ua" ; 如果是一个 C 函数,则为 "C"; 如果它是一个代码块的主体部分,则为 "main"。
currentline: 给定函数正在执行的那一行。 当提供不了行号信息的时候,皮大 currentline 被设为 -1 。
name: 给定函数的一个合理的名字。 因为 L ua 中的函数是一等公民, 所以它们没有固定的名字: 一些函数可能是全局复合变量的值, 另一些可能仅仅只是被保存在一张表的某个域中。 lua _getinfo 函数会检查函数是怎样被调用的, 以此来找到一个适合的名字。 如果它找不到名字, name 就被设置为 NULL 。
4.namewhat: 用于解释 name 域。 namewhat 的值可以是 "global", "local", "method", "field", "upvalue", 或是 "" (空串)。 这取决于函数怎样被调用。 (Lu a 用空串表示其它选项都不符合。)
istailcall: 如果函数以尾调用形式调用,这个值就为真。 在这种情况下,当层的调用者不在栈中。
nups: 函数的上值个数。
nparams: 函数固定形参个数 (燃或竖对于 C 函数永远是 0 )。
isvararg: 如果函数是一个可变参数函数则为真 (对于 C 函数永远为真)。
5.没有内置的调试机制。 但是它提供了一组特殊的函数接口以及 钩子。 这组接口可用于构建出不同的调试器、性能剖析器、 或是其它需要从解释器获取“内部信息”的工具。
6.通常,这个函数不会返回; 当协程一次次延续,将从延续函数继续运行。 然而,团拦有一个例外: 当这个函数从一个逐行运行的钩子函数(参见) 中调用时,l ua_yieldk 不可以提供延续函数。 (也就是类似 lu a_yield 的形式), 而此时,钩子函数在调用完让出后将立刻返回。 L ua 会使协程让出,一旦协程再次被延续, 触发钩子的函数会继续正常运行。
7.当一个线程处于未提供延续函数的 C 调用中,调用它会抛出一个错误。 从并非用延续方式(例如:主线程)启动的线程中调用它也会这样。
Lua是扩展语言,有两种方式来使用Lua:
C语言、Delphi等其它语言编写的程序调用Lua,把Lua作为一个扩辩虚展。
Lua本身去调用外部的库,这些库由C语言、Delphi等竖吵编写而成。
Lua语言本身非常简单,单独靠Lua自身,是无法编写出真携纤燃正有用的程序。
所以你要学的话,除了Lua语言,你应该至少先要熟悉C语言、Delphi等其它语言。
Lua的官方网站上有下载,Lua的核心就是一个文件: lua51.dll 或最新的lua52.dll
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)