FlexLua低代码单片机定时器中断功能一行代码实现

96 篇文章 0 订阅
32 篇文章 0 订阅

Timer

本教程的实现基于 FlexLua 低代码单片机技术,脱离复杂单片机C语言开发正逐渐成为一种快速高效的 IoT 硬件开发方式。即使新手不懂单片机开发也可很快很容易用FlexLua零门槛开发各种 IoT 硬件,更多教程请参考 FlexLua 官网。

1ef34a9019cbc71f95e5559db3554ace.jpeg

一、Timer的介绍

ShineBlink Core提供一个10毫秒的Timer定时器,即每10毫秒Timer会触发一次回调函数的调用。做过单片机开发的同学应该知道这种机制就相当于10毫秒中断一次,程序会跳往中断函数执行相应的代码。

二、Timer存在的意义

Core提供的Timer是基于Lua语言,它的意义在于能够保证定时器在每个10毫秒间隔会立即执行我们在Lua代码中定义的 LIB_10msTimerCallback() 回调函数。这样就保证了一些任务的执行时间精度能够达到10毫秒。虽然和底层单片机的微秒级别定时器无法比拟,但对于Lua这种面向应用层的高级语言开发而言已经足矣。

三、用定时器Timer来保证代码执行时间的精确性

当我们编程中涉及到时间问题时,我们可以有两种选择:

  1. 使用延时函数LIB_DelayMs(),简单直接,但在有些情况下使用并不能达到期望的延时目的。
  2. 使用系统自带的10毫秒定时器及其回调函数LIB_10msTimerCallback(),相比较延时函数更精确。

1. 延时函数LIB_DelayMs()及其弊端

我们看下面的代码:

--开始大循环
while(GC(1) == true)
do
--延时1秒
LIB_DelayMs(1000)
--每隔1秒打印输出"hello world!"
print("hello world!")
end


上面的代码由于print(“hello world”)并不会阻塞很长时间,所以整个大循环能保证1秒执行一次“hello world”的打印工作,但假如在这个大循环里还有很多其他代码需要执行,那么整个大循环实际循环一次的时间是大于1秒的,这样也就无法使用LIB_DelayMs(1000)这个函数来保证1秒1次的大循环了,当然我们可以把1000降低一些,但是这个值是多少,得取决于您的实际代码。

2. 使用系统10毫秒定时器

从名字可以看出,定时器能保证代码执行时间的精确性达到10毫秒,10毫秒的精确性对用高级语言开发应用程序来说已经能够满足大多数应用了。由于这个10毫秒定时器是基于硬件底层中断所实现的,每10毫秒硬件会产生一次中断并自动调用您在代码中定义的LIB_10msTimerCallback()回调函数,所以能够保证实时性。

使用方法举例(一):基本用法

--定义10毫秒定时器的回调函数,函数名字必须是LIB_10msTimerCallback
function LIB_10msTimerCallback()
--执行一些实时性要求更高的代码,但代码一定不是阻塞型的
--建议在这里只做一些关键变量赋值的任务或一些非阻塞的任务
end
--使能系统10毫秒定时器开始工作
LIB_10msTimerConfig("ENABLE")
--开始大循环
while(GC(1) == true)
do
--do something
end


使用方法举例(二):编程技巧 -- 实现分时执行多种任务

--初始化变量
cnt1 = 0
cnt2 = 0
cnt3 = 0
--定义10毫秒定时器的回调函数,函数名字必须是LIB_10msTimerCallback
function LIB_10msTimerCallback()
cnt1 = cnt1 + 10
cnt2 = cnt2 + 10
cnt3 = cnt3 + 10
end
--使能系统10毫秒定时器开始工作
LIB_10msTimerConfig("ENABLE")
--开始大循环
while(GC(1) == true)
do
--每隔1秒打印一次 "hello world 1"
if cnt1 >= 1000 then
cnt1 = 0
print("hello world 1")
end
--每隔2秒打印一次 "hello world 2"
if cnt2 >= 2000 then
cnt2 = 0
print("hello world 2")
end
--每隔3秒打印一次 "hello world 3"
if cnt3 >= 3000 then
cnt3 = 0
print("hello world 3")
end
end


  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值