我正在尝试在matlab上绘制实时序列值,但我无法通过任何演示成功。我的嵌入式系统已经发送了由串行终端检查的数据。当我试图让他们通过matlab时出现这样的错误:
Warning: Matching failure in format.
??? In an assignment A(I) = B, the number of
elements in B and
I must be the same.
Error in ==> real_time_data_plot at 81 voltage(count) = fscanf(serialObject,'%f'); %#ok<SAGROW>
作为matlab中的序列我正在使用此文件:http://www.mathworks.com/matlabcentral/fileexchange/25519-collect-and-plot-data-from-an-instrument-in-real-time 在嵌入式方面,我只是发送固定值100,以减少错误案例概率为
sprintf(str,"%d\n",100);
USART_puts(USART2,str);
代码可以绘制几个样本,但稍后它会因上面的错误通知而崩溃。你有什么建议吗? 感谢
答案 0 :(得分:1)
错误消息:
在赋值A(I)= B中,B和I中的元素数必须为 同样的。
表示您的 fscanf(serialObject,'%f')向量与 count 的长度不同。如果你可以在一个这样的实例中检查 fscanf(serialObject,'%f')的输出,你会看到这种情况。假设count是一个整数,那么serialObject很可能包含多个元素。
一个简单的解决方法就是:
temp = fscanf(serialObject,'%f');voltage(count) = temp(1);
如果最终值是您感兴趣的值,您可能希望使用temp(结束)。
我不熟悉“USART_puts()”,但我的猜测是有一些积压形成,所以它偶尔会向serialObject发送多个更新。它也可能是发送一个空向量,其中大小(temp)将为0 x 0,这也会导致错误消息。