日期 | 作者 | 版本 | 说明 |
---|---|---|---|
2020.12.27 | Mr.Zheng | V1.1 | 可控周期性类回调函数的实现 |
声明
此次新编写的可控周期性类回调函数使用了lua和miniC两种脚本式编程语言,是基于某款TFT屏软件上实现的功能,其他脚本式工控屏编程也可参考学习,希望能够给初学者带来启发。
一、可控周期性类回调函数名字的由来
在TFT编程里,有很多回调函数,它们通俗来讲:就是满足这个回调函数的执行条件,就会依次开始执行此回调函数里的各项指令。
无论是用lua,还是用miniC,都没有一个随时可以轮询调用的无执行条件周期函数,这个时候我就想到,有很多逻辑需要从系统工作开始就要一直不间断执行下去,他们放在目前现有的哪个回调函数里都不太合适,那么为什么不自己设计一个类似回调函数机制的代码串,自定义设置轮询时间,将所有需要不间断循环进行下去的逻辑放在这里,于是就有了这样一个可控周期性类回调函数的诞生
二、代码串介绍
此次设计的代码主体由两个定时器组成,很好理解,两个定时器交替唤醒交替工作,这两个定时器在lua里写,然后在定时器里设定一个参数随着定时器切换自动变换,这样在miniC里找这个参数发生变化时执行指令就可以实现整个可控周期的类回调了。
可控周期性类回调函数分三个部分:lua启动扳机代码、lua参数交替代码、miniC回调主体代码
1.lua启动扳机代码
lua倒计时启动代码方法一:
--当画面切换时,执行此回调函数,screen为目标画面。
function on_screen_change(screen)
if screen == 1
then
start_timer(0,100,1,0)
end
if screen == 2
then
start_timer(0,100,1,0)
end
end
lua倒计时启动代码方法二:
--当系统初始化时,就启动此定时器
function on_init()
start_timer(0,100,1,0)
end
lua倒计时启动代码方法还有很多,最常用的两种介绍完毕,其他启动定时器方法留待读者自行尝试
2.lua参数交替代码
lua代码如下(示例):
function on_timer(timer_id)
--开启倒计时1
if timer_id == 0
then
--周期我这里设为100ms,也就是0.1s,这样周期就是0.2s,这个数字可改
start_timer(1,100,1,0)
--重点变量YYY赋值为9
set_variant("YYY",9)
--停止倒计时0
stop_timer(0)
end
--进行第二次倒计时函数计算,这是个循环,变化的是YYY
if timer_id == 1
then
start_timer(0,100,1,0)
--重点变量YYY赋值为9999
set_variant("YYY",9999)
--停止倒计时1
stop_timer(1)
end
end
3.miniC回调主体代码
miniC开始识别并启动回调的代码如下:
void on_variant_upate()
{
if(@"YYY")
{
//这里可以写下任何你想要根据自己设定的轮询周期进行的不间断循环的逻辑
}
}
三、发散思维下的高级用法
既然周期可控,那么完全可以根据仪器逻辑需要,设定满足其轮询要求的不同周期的代码串,植入到任何其他代码中去,这样可以有两个轮询周期(注意新的自设定片段式轮询周期要比TFT整体轮询周期大,这样才能实现不同轮询时间的设定),TFT系统自带的一个,类回调自设定轮询周期一个,可以应用在精度需求不高的逻辑区间,使之可以实现不同逻辑不同轮询周期的功能,具体适用在哪个领域因为笔者项目相关不便透漏,就有待各位的探索与创新啦~