我有一個串口位元組可用回呼函式。
function readFrame(src,~)
global data
global payloadBytes
message = read(src,payloadBytes,"uint8");
src.UserData = message;
data = message;
return
我將緩沖區讀入變數訊息,然后將其保存為全域變數資料。我在我的作業區中獲取變數。然后發生了一些我無法解釋的事情。我嘗試將此全域變數保存在我的 Mainscript 的區域變數中。注意:全域資料在 mainscript 中定義。
global data;
global payloadBytes;
msg=[];
frameCount = 1;
numFrames = 10;
messageByte = zeros(numFrames,payloadBytes)
while(app)
%wait till callback triggered and serial data read
while isempty(msg)
%save global variable data in local variable msg
msg = data;
disp("wait for data")
end
%save msg in an expanding 2D Variable messagebyte
messageByte(frameCount,:) = msg;
%empty msg variable
msg =[]
frameCount = frameCount 1
%stop when 10 frames are caught
if frameCount == 11
app = 0;
end
end
問題已處理資料始終為空。所以當我想制作一個二維矩陣來保存不同的資料時:
processedData(frameCount,:) = data;
我得到一個例外:索引不匹配。這也難怪。
有人可以告訴我我做錯了什么。謝謝你。
uj5u.com熱心網友回復:
MATLAB 是單執行緒的。除非您明確使用并行處理工具箱,否則東西不會并行運行。因此,對于要寫入的回呼data,您的主回圈必須給回呼一個執行的機會。在回圈中添加一個pause,這將允許執行回呼以及計時器物件。
while isempty(msg)
pause(0.1) % find a suitable pause length here
%save global variable data in local variable msg
msg = data;
disp("wait for data")
end
暫停不需要很長,但只要您可以容忍,就可以暫停,因為這將使您的等待減少處理器密集度。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/484049.html
下一篇:在python腳本中切換環境
