循环卡住

时间:2016-04-01 14:20:59

标签: matlab while-loop callback fwrite serial-communication

我在Matlab中编写了一个回调函数。我的笔记本电脑正在与另一台笔记本电脑进行通信,该笔记本电脑每隔几秒发送一次记录在文本文件中对于例如笔记本电脑发送" 66"我的笔记本电脑写入文件Event_Markers.txt" 66"一直持续到其他笔记本电脑发送其他东西代码如下。

我目前面临的问题是,在我的回调函数(下面)中,我使用while循环来连续写出相同的"信息" (例如" 66")到文本文件,直到另一台笔记本电脑发送其他内容。但这个while循环卡住了。这部分是一个更大的脚本,它从光谱仪中获取数据并将其添加到我的脚本中,导致所有内容卡住,并且不执行脚本的其余部分。我尝试使用if循环而不是while,它只会写" 66"两次而不是连续写。但是,它正如我所希望的那样写入文本文件。

有人知道我是否需要添加一些其他代码来阻止它被卡住?

谢谢!

appenderFile=fopen('Event_Markers.txt','a+t');
s=serial('COM3');
set(s,'BytesAvailable',{@myCallback,appenderFile});
set(s,'BytesAvailableFcnCount',1);
set(s,'BytesAvailableFcnMode','byte');
fopen(s);

function myCallback(s,~,appenderFile)
    bytes=(s,'BytesAvailable')

    if(bytes==1)
         [data count msg] = fread(s,bytes);
    end 

    fprintf(appenderFile,'%d \n',data);
    bytes=(s,'BytesAvailable');

    while bytes==0
         fprintf(appenderFile,'%d \n',data);
         bytes=get(s,'BytesAvailable');
    end
end

1 个答案:

答案 0 :(得分:0)

当"发送其他东西"时,你需要突破循环,如:

while bytes==0
   fprintf(appenderFile,'%d \n',data);
   bytes=get(s,'BytesAvailable');
   if s ~= 66
     break
   end
 end