J'ai écrit une fonction de rappel dans Matlab. Mon ordinateur portable communique avec un autre ordinateur portable qui lui envoie des octets toutes les quelques secondes qui sont enregistrées dans un fichier texte. Par exemple l'ordinateur portable envoie "66" et mon ordinateur portable écrit dans le fichier Event_Markers.txt "66" en continu jusqu'à ce que l'autre ordinateur portable envoie quelque chose d'autre. Le code est ci-dessous. Le problème que je suis actuellement confronté est que dans ma fonction de rappel (ci-dessous) j'utilise une boucle while
pour écrire continuellement la même "information" (par exemple "66") dans le fichier texte jusqu'à ce que l'autre ordinateur portable envoie autre chose . Mais cette boucle est bloquée. Cette partie est d'un script plus grand qui acquiert des données à partir d'un spectromètre et l'ajoute à mon script et provoque tout coincé et le reste du script n'est pas exécuté. J'ai essayé d'utiliser une boucle if
au lieu de while
et il écrit seulement deux fois "66" au lieu de l'écrire en continu. Il est, cependant, d'écrire dans le fichier texte comme je le veux.Pendant que la boucle est bloquée
Est-ce que quelqu'un sait si j'ai besoin d'ajouter une autre ligne de code pour l'empêcher de se bloquer?
Merci!
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
Ce serait bien si vous pouvez afficher recevoir octets sur la fenêtre de commande pour vous assurer que vous êtes obtenir des informations attendues ou non. – User1551892
Je ne suis pas familier avec la communication série dans matlab mais vous n'avez pas besoin de lire le port série encore et encore dans la boucle while. – User1551892
@ User1551892 thats ce que fait la fonction de rappel, il lit en permanence. –