主 题: [关于串口问题]这个问题我没法调试,想请教大家,串口发送程序终止的原因?
首先感谢:aiirii(ari-淘金坑) ( ) 帮我解决了上一个串口的问题。
我的程序中有一个连续向串口发送帧的功能,那是一个TIMER控件控制的,但是当TIMER所在的窗体
不是焦点的时候,换成其他有些(不是全部)窗体在最前面时,TIMER函数继续执行,但是在TIMER函数中调用的发送串口数据的函数出了问题,该函数是自定义的,在下面有
TIMER在主窗体中,当打开和主窗体同在一个工程的窗体时,发送串口的函数就会停止。谁能告诉我这是什么原因呢,如何修改程序结构
程序设计如下:
//DM 数据窗体;
COMM1:SPCOMM
beingwriteflag:BOOLEAN//串口占用标志
//里定义了串口接受数据的函数
//mainfrm 主窗体
cmdtosinglechip//串口向单片机发送命令的函数
begin
if beingwriteflag = false then//检查标志如果如果占用就退出
beingwriteflag:=true
else
exit;
repeat
DM.Comm1.writecommdata()//向串口写信息
while (GetTickCount - XXX) < 300 do //等待串口回应,修改状态标志
Application.ProcessMessage;
end
TIME3:=TIMES+1;
UTILL TIMES=3;
beingwriteflag:=false;//修改串口占用标志
TIMER1TIMER//时间空间函数,设置时间为300毫秒;
//我调试的时候发现TIMER是一直运行了的,但是beingwriteflag 一直为TRUE。
begin
if beingwriteflag = false then //如果串口不被占用
cmdtosinglechip;
end
//managefrm //和mainfrm同在一个工程的窗体
,。,。
当打开和mainfrm同在一个工程的窗体的时候,cmdtosinglechip就可能停止了,
里面的beingwriteflag 一直为true,知道刚才打开的窗体关闭的时候才继续运行。。
打开不同在一个工程的窗体就不会出现这样的现象
这是为什么呢?
如何修改,谢谢
首先感谢:aiirii(ari-淘金坑) ( ) 帮我解决了上一个串口的问题。
我的程序中有一个连续向串口发送帧的功能,那是一个TIMER控件控制的,但是当TIMER所在的窗体
不是焦点的时候,换成其他有些(不是全部)窗体在最前面时,TIMER函数继续执行,但是在TIMER函数中调用的发送串口数据的函数出了问题,该函数是自定义的,在下面有
TIMER在主窗体中,当打开和主窗体同在一个工程的窗体时,发送串口的函数就会停止。谁能告诉我这是什么原因呢,如何修改程序结构
程序设计如下:
//DM 数据窗体;
COMM1:SPCOMM
beingwriteflag:BOOLEAN//串口占用标志
//里定义了串口接受数据的函数
//mainfrm 主窗体
cmdtosinglechip//串口向单片机发送命令的函数
begin
if beingwriteflag = false then//检查标志如果如果占用就退出
beingwriteflag:=true
else
exit;
repeat
DM.Comm1.writecommdata()//向串口写信息
while (GetTickCount - XXX) < 300 do //等待串口回应,修改状态标志
Application.ProcessMessage;
end
TIME3:=TIMES+1;
UTILL TIMES=3;
beingwriteflag:=false;//修改串口占用标志
TIMER1TIMER//时间空间函数,设置时间为300毫秒;
//我调试的时候发现TIMER是一直运行了的,但是beingwriteflag 一直为TRUE。
begin
if beingwriteflag = false then //如果串口不被占用
cmdtosinglechip;
end
//managefrm //和mainfrm同在一个工程的窗体
,。,。
当打开和mainfrm同在一个工程的窗体的时候,cmdtosinglechip就可能停止了,
里面的beingwriteflag 一直为true,知道刚才打开的窗体关闭的时候才继续运行。。
打开不同在一个工程的窗体就不会出现这样的现象
这是为什么呢?
如何修改,谢谢
如果打开的是 Modal 形式的,如: XXXForm.ShowModal ,就可能会出现,但不是绝对的所以,如果想做一个比较稳定的通信,一般,要将通信部分写到线程中。如果你是spcomm控件,那已经是线程乐
很奇怪,这样就不卡了
是不是因为SPCOMM线程以前一直都争取不到CPU运行时间
因为TIMER只有300毫秒
SPCOMM线程优先级别低呀