extend控件的初始化
正常情况下,把extend控件拖拽到设计界面上即可完成控件的初始化,但还需注意以下两点:
一、需要在appbase中添加相应的函数
初建appbase的时候,需要按下图选择:
如何是ESP32的串口屏,且需要连接wifi的时候,onWIFI32和dnpool以及onASYNC也需要选择,总之按需选择,并确保onRTUrecv选中即可
生成之后,里面的onRTUrecv事件需要按如下修改
void onRTUrecv(){
//有RTU数据帧收到
//echo("recv RTU!!!!");
int len;
len=rtucopy(bs);
//此时可以使用getv(bs,addr,type)来读取数据处理RTU包
recvbinwork(bs,len); //在此函数中继承或直接处理RTU数据包
//以下三条语句需要添加
hook_run("onRTUrecv","*","*");
hook_set(bs);
hook_set(len);
}
添加三条钩子语句,用于在RTU数据接收到后,回调其他控件挂上的处理RTU数据的钩子函数
二、如何在页面开始的时候调用extend控件
错误的代码:
//!!!!注意:以下代码错误,不能正确运行!!!!!
class app=loadcom(appbase);
class page=loadcom(page);
class e1=loadcom(extend); //加载扩展板驱动控件
void init(){
e1.setmode(0,"11111111"); //设置E口为8个输出
}
init(); //在进入消息循环前初始化一些设置
start();
错误原因:
在前面讲解的:消息体系图 中我们知道,在start()函数中,才会运行 e1.create()函数,而在上面例子中init函数运行时,e1.create()还没有被运行,此时调用 e1.setmode()方法显然有问题,为此我们在e1控件中增加了oncreate的事件
正确的代码:
class app=loadcom(appbase);
class page=loadcom(page);
class e1=loadcom(extend); //加载扩展板驱动控件
void e1.oncreate(){ //在进入消息循环前初始化一些设置
e1.setmode(0,"11111111"); //设置E口为8个输出
}
start();