微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > char * sim900a_waitask(uint8_t waitask_hook(void))中的waitask_hook有什么用,真心求教

char * sim900a_waitask(uint8_t waitask_hook(void))中的waitask_hook有什么用,真心求教

时间:10-02 整理:3721RD 点击:
char * sim900a_waitask(uint8_t waitask_hook(void))      //等待有数据应答
{
    uint8_t len=0;
    char *redata;
    do{
        redata = SIM900A_RX(len);   //接收数据
        if(waitask_hook!=0)
        {
            if(waitask_hook()==SIM900A_TRUE)           //返回 SIM900A_TRUE 表示检测到事件,需要退出
            {
                redata = 0;
                return redata;               
            }
        }
    }while(len==0);                 //接收数据为0时一直等待

    SIM900A_DELAY(20);              //延时,确保能接收到全部数据(115200波特率下,每ms能接收11.52个字节)
    return redata;
}

这是一个回调函数指针,不知道硬件如何
从代码看,调用sim900a_waitask函数的人还需要自己提供等待应答的回调函数
意思可能有应答,也可能没有应答
需要在waitask_hook函数内读取硬件或某些数据,判断给出结果,如果是SIM900A_TRUE,说明正在等应答或其他符合硬件的事件,直接退出了
也可能在waitask_hook函数内实现了超时的判断等等
如果没有事件,就一直接收,收到一个长度不为零的就退出循环,如果没有这个回调函数,外部没数据会死循环
这样做的代码的自由度比较大,可以把硬件驱动代码和软件应用层隔离,移植到不同的硬件时,实现不同waitask_hook就可以了

真心感谢,共同进步

他是这么调用的:redata=sim900a_waitask(0);不是很理解这么做有什么用,我是一个新手,很多地方不懂

意思就是直接读取数据,不管其他状态

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top