关于CH375计算机端软件问题

我使用CH375,计算机和USB接口通讯很正常,用了好长一段时间了,今天我发现我的软件有一个问题,那就是界面不能输入汉字,一切换到汉字输入状态程序就死机,我是在中断例程中用CH375ReadData这个函数的读数据的,如果不执行CH375ReadData,就没问题。请问为什么?是不是这个函数和汉字输入有什么关系?我用的是CVI8.5,下面是我的程序代码:

if(!CH375SetIntRoutine(0, ReadUsb )) { MessagePopup("程序错误","USB Open 失败!"); UsbOpen=0; exit(0); } else UsbOpen=1;

VOID CALLBACK ReadUsb(PUCHAR iBuffer) { unsigned long mReadLen; char RBuffer[512];

if(UsbOpen==0) return; if( CH375ReadData( 0,RBuffer, &mReadLen ) )// 接收成功 { ...... }

} 请快回复我,谢谢。

中断回调函数里不要这样处理,在ReadUsb里发送一个消息,在消息里做CH375ReadData的处理,ReadUsb函数是在我们的动态库里的系统线程执行的,优先级比较高,不要做费时操作,你用c语言可以使用多线程+查询的方式.


按照你说的: 《在ReadUsb里发送一个消息,在消息里做CH375ReadData的处理》 程序如下: VOID CALLBACK IntReadUsb(PUCHAR iBuffer) { PostMessage((HWND)postHandle,LQS_USBREAD_Message,0,0); }

int CVICALLBACK ReadUsb(int panelHandle, int message, unsigned int* wParam, unsigned int* lParam, void* callbackData) { if(CH375ReadData( 0,RBuffer, &mReadLen ) ){// 接收成功 ............ } } 执行的结果是,读数据没问题,但界面几乎不能动,比在中断里读更差。好像CH375ReadData用时很多,为什么? 麻烦你给我看看是什么问题,谢谢! 我忘记说了,单片机那边是20ms发送一次数据,16个字节。

在单片机里:

if( (Time10ms%2)==0 ) {//20ms 发送一次,每秒50组数据,1000s/20ms=50 CH375_WR_CMD_PORT( CMD_WR_USB_DATA5 );//发送中断数据 CH375_WR_DAT_PORT(0); }

USB中断程序:

void Int1_ISR(void)interrupt 2 { unsigned char InterruptStatus;

CH375_WR_CMD_PORT( CMD_GET_STATUS ); /* 获取中断状态并取消中断请 */ InterruptStatus = CH375_RD_DAT_PORT( ); /* 获取中断状态 */ switch ( InterruptStatus )/* 分析中断状态处理 */ { case USB_INT_EP2_OUT:/* 批量端点下传成功 */ Read_USB_Data();// 从计算机上读数据 break; case USB_INT_EP2_IN: /* 批量数据发送成功 */ CH375_WR_CMD_PORT( CMD_UNLOCK_USB ); break; case USB_INT_EP1_IN:/*中断数据发送成功*/ CH375_WR_CMD_PORT( CMD_UNLOCK_USB ); FaSongData();//发送数据到计算机 break; case USB_INT_EP1_OUT: CH375_WR_CMD_PORT( CMD_UNLOCK_USB ); break; default: CH375_WR_CMD_PO(CMD_UNLOCK_USB ); break; } }


只有登录才能回复,可以选择微信账号登录