OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3404|回复: 0

有没有知道VC++6.0制作的上位机中定时器可以和本身的串口进行定时使用吗?

[复制链接]

3

主题

4

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2016-7-5
在线时间
4 小时
发表于 2016-7-18 09:33:23 | 显示全部楼层 |阅读模式
void CTestDlg::OnTimer(UINT nIDEvent)
{       
       
        unsigned char readOrder1[5]={0x01,0x01,0x01,0x0d,0x0a};
        unsigned char readOrder2[5]={0x01,0x01,0x02,0x0d,0x0a};
        unsigned char readOrder3[5]={0x01,0x01,0x03,0x0d,0x0a};
        unsigned char readOrder4[5]={0x01,0x01,0x04,0x0d,0x0a};
        unsigned char readOrder5[5]={0x01,0x01,0x05,0x0d,0x0a};
        unsigned char readOrder6[5]={0x01,0x01,0x07,0x0d,0x0a};
        int i,j,t;
        CTime TimeS;
        VARIANT variant_inp;
        COleSafeArray safearray_inp;
        CString tempstr0,tempstr1;
        CByteArray array,array2;
        LONG len,k;
        CString strtemp;
        char rxdata[2048];
        short fgh=0;
       
        switch(nIDEvent)
        {
                case 0x0001:
                        array.RemoveAll();
                        array.SetSize(5);
                        array2.RemoveAll();
                        array2.SetSize(5);
                        for(i=0;i<5;i++)
                        {
                                array.SetAt(i, readOrder1[i]);
                        }
                        UpdateData(true);
                        m_ctrlComm.SetOutput(COleVariant(array));
                        while(fgh!=2)
                        {
                                fgh=m_ctrlComm.GetCommEvent();
                                //m_ctrlComm.SetOutput(COleVariant(array));
                        }
                        Sleep(50);
                        variant_inp=m_ctrlComm.GetInput();
                        safearray_inp=variant_inp;
                        len=safearray_inp.GetOneDimSize();
                        for(k=0;k<len;k++)
                        safearray_inp.GetElement(&k,rxdata+k);
                        USART_TX_STA=0;
                        for(k=0;k<len;k++)
                        {
                        USART_TX_BUF[USART_TX_STA&0X3FFF]=*(rxdata+k) ;
                        USART_TX_STA++;
                        }
这是上位机中定时器程序的一小部分,该定时器设置为1S触发一次,nIDEvent返回为1,即表示定时器1,在定时器1中,每秒通过串口向单片机发送可以array5个字节的数据,然后单片机会自动返回数据上位机的串口,而上位机则一直在判断m_ctrlComm.GetCommEvent()的值是否为2,即判断上位机串口接收缓冲区有没有数据,但程序一旦执行,就卡死在while(fgh!=2)
                        {
                                fgh=m_ctrlComm.GetCommEvent();
                                //m_ctrlComm.SetOutput(COleVariant(array));
                        }
这个语句中,导致程序直接死机,请问有人知道是什么回事吗?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 20:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表