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();