Я написал функцию обратного вызова в Matlab. Мой ноутбук общается с другим ноутбуком, который отправляет его байты каждые несколько секунд, которые записаны в текстовом файле. Напр. ноутбук отправляет «66», и мой ноутбук непрерывно записывает файл Event_Markers.txt «66», пока другой ноутбук не отправит что-то еще. Код ниже.Пока петля застряла
Проблема, с которой я столкнулся сейчас, заключается в том, что в моей функции обратного вызова (ниже) я использую цикл while
для непрерывной записи той же «информации» (например, «66») в текстовый файл, пока другой ноутбук не отправит что-то еще , Но этот цикл зацикливается. Эта часть имеет более крупный скрипт, который получает данные с спектрометра и добавляет его в мой скрипт и заставляет все застревать, а остальная часть скрипта не выполняется. Я пытался использовать цикл 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
Было бы хорошо, если бы вы могли отображать получить байты в командном окне, чтобы убедиться, что вы получение ожидаемой информации или нет. – User1551892
Я не знаком с последовательной связью в Matlab, но вам не нужно снова и снова считывать последовательный порт внутри цикла while. – User1551892
@ User1551892 это функция обратного вызова, она непрерывно читает. –