无法从回调函数中获取变量。已经定义为全局。软件
Can't get variable out of Callback function. Already defined as global. Matlab
我有一个串口bytesavailable回调函数。
function readFrame(src,~)
global data
global payloadBytes
message = read(src,payloadBytes,"uint8");
src.UserData = message;
data = message;
return
我把缓冲区读入变量message,然后保存为全局变量数据。
我在我的工作区中得到了变量。然后发生了一些我无法解释的事情。我尝试将这个全局变量保存在我的 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;
我遇到异常:索引不匹配。这也难怪。
有人可以告诉我我做错了什么吗?
谢谢。
MATLAB 是 single-threaded。除非您明确使用并行处理工具箱,否则 Stuff 不会 运行 并行。因此,要将回调写入 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
暂停时间不需要太长,只要您能忍受就可以,因为这样可以减少您的等待时间。
我有一个串口bytesavailable回调函数。
function readFrame(src,~)
global data
global payloadBytes
message = read(src,payloadBytes,"uint8");
src.UserData = message;
data = message;
return
我把缓冲区读入变量message,然后保存为全局变量数据。 我在我的工作区中得到了变量。然后发生了一些我无法解释的事情。我尝试将这个全局变量保存在我的 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;
我遇到异常:索引不匹配。这也难怪。
有人可以告诉我我做错了什么吗? 谢谢。
MATLAB 是 single-threaded。除非您明确使用并行处理工具箱,否则 Stuff 不会 运行 并行。因此,要将回调写入 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
暂停时间不需要太长,只要您能忍受就可以,因为这样可以减少您的等待时间。