MCU开发---MCU跟DEVICE通讯的过程

第一步:MCU把数据放到发送数组

第二步:MCU超时等待数组的数据发送完成

第三步:MCU超时等待接收DEVICE应答的数据

MCU的状态分为:

SEND_FREE:发送空闲

SEND_BUSY:正在发送数据

SEND_FAIL:发送失败(超时)

SEND_SUCCESS:发送成功

GET_BUSY:正在接收数据

GET_FAIL:接收失败(超时)

GET_SUCCESS:接收成功


unsigned char Normal_SendGet(unsigned char *status, unsigned long *time, unsigned char (*dataToBuf)(void), unsigned char (*bufToDevice)(void), unsigned char(*get)(void))
{
    switch(*status)
    {
        case SEND_FREE:                //数据放到缓存区
        {
            if( dataToBuf() )
                *status = SEND_BUSY;
            else
                *status = SEND_FAIL;
                
            *time = time_ms;
            break;
        }
        case SEND_BUSY:                //等待数据发送完成
        {
            if((time_ms-*time)<500)
            {
                if(bufToDevice())
                {
                    *status = GET_BUSY;
                }
            }
            else
            {
                *status = SEND_FAIL;
            }    
            *time = time_ms;
            break;
        }
        case SEND_FAIL:            //失败
        {
            if((time_ms-*time)>=500)
            {
                *status = SEND_FREE;
            }
            break;
        }
        case GET_BUSY:                //等待接收数据
        {
            if((time_ms-*time)<500)
            {
                if(get())
                {
                    *status = SEND_FREE;
                }
            }
            else
            {
                *status = SEND_FREE;
            }
            break;
        }
    }
    
    return *status;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值