因仑“3+1”工程特种兵精英论坛

标题: 新手求助程序问题,有些地方看不懂 [打印本页]

作者: 张衍波    时间: 2015-10-8 07:40
标题: 新手求助程序问题,有些地方看不懂

#define NEW99CLIENT_CHECKDELAY (FP32)1000000/SERIALBAND*11/((FP32)1000/(CPUFREQ/CLOCKCYCLE)*(108/12))        //串口一个字节所需要的循环次数
BOOL Com1SendPack(INT8U PROTO_NEW99CLIENT_DATA * cData)                                                        //使用主串口发出
{
    INT8U ci,cNum=NEW99CLIENT_CHECKDELAY;

        if(GetSerialSendNum()>0)
                return 0;
        ci=LOCADDRESSH+LOCADDRESSL;         //本机地址
        while(--ci);
#if(PROTO_NEW99CLIENT_SEMIDUPLEX)
        if(!m_bNew99MainBeing)
        {                                                                           //主机不存在
                while(--ci)
                {        
                        _nop_();
                        if(RXD)
                        {
                                if(!(--cNum))                                                                //检测发送检是否在一个字节内全部为高
                                {
                                        SetAllInt(false);
                                        goto NEWCLIENT_SEND;                                        //为了提高检测到可以发数据到实际发送数据之间的速度
                                                                                                                //特用了GOTO语句                                                                  
                                }
                        }
                        else
                                cNum=NEW99CLIENT_CHECKDELAY;
                }               
        }
        else
        {
#endif
                while(--ci)
                {        
                        _nop_();
                        if(TXD)
                        {
                                if(!(--cNum))                                                                //检测发送检是否在一个字节内全部为高
                                {
                                        SetAllInt(false);  //关闭串口中断
                                        goto NEWCLIENT_SEND;                                        //为了提高检测到可以发数据到实际发送数据之间的速度
                                                                                                                //特用了GOTO语句                                                                  
                                }
                        }
                        else
                                cNum=NEW99CLIENT_CHECKDELAY;                         //如果主机存在,则等待发送脚常高,否则等发送脚常高
                }
#if(PROTO_NEW99CLIENT_SEMIDUPLEX)
        }
#endif
        return 0;

NEWCLIENT_SEND:
        SendByte(cData[0],1);              //发送数据   
        SetAllInt(true);    //打开串口中断
    ci=1;
    while(ci<cData[4])
        {
      SendByte(cData[ci],0);      
      ci++;
        }
        m_dwNew99RegisterTick=GetTickCount();
        return 1;
}

上面程序是从别的地方看到的,用在51上,我想移植到32上来,但是看不明白,功能好象是检测数据发送时总线有没有被别的设备占用,具体也不知道怎么修改,求大家帮忙分析一下这个程序
转载






欢迎光临 因仑“3+1”工程特种兵精英论坛 (http://bbs.enlern.com/) Powered by Discuz! X3.4