无法从回调函数中获取变量。已经定义为全局。软件

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

暂停时间不需要太长,只要您能忍受就可以,因为这样可以减少您的等待时间。