我可以减少串口的写函数调用的时间吗

5视图(30天)
你好,
问题:有串口的设置会使编写命令运行得更快?
我开发了一个代码编写uint16单词一个小小的板连接到USB串行端口。收到很小的报告值。
很小的希望代码形式
信号= [25600、word1 word1、word3 word4,经常);
并发送回USB的话收到的12 LSB位uint16格式。
1000年在for循环中运行以下comand周期需要278毫秒,导致写操作以278美元或3.5 khz
写(USB信号,“uint16”);
然而,如果我创建了一个包含2000序列信号,使用
我= = 1:1999信号(信号(25600,1234,2341,3412,4095,3210]];结束现在2000的样品6 uint16 %信号
一写命令2000 x6单词需要小于7.7 correspondind女士250 khz的频率周期6字
我认为写命令有一个握手机制将数据发送到COM端口的缓冲,这减慢了速度。
可以进行调整,以提高速度吗?
下面的代码需要一个很小的,但是可以使用环回测试设备的USB串行端口。
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
清晰;
% % % % % %用户设置
USBPORT =“COM18”;%更新w /很小的COM端口
%设置很小的COM端口
删除(instrfindall);%删除任何挂COM端口
USB =串口(USBPORT, 6000000);
% fopen (USB);
写(USB,“h”,“字符”);
暂停(0.1);
读(USB、USB.NumBytesAvailable“字符串”)
信号= (25600,1234,2341,3412,4095,3210];
写(USB信号,“uint16”);% d后跟5这一行写十六进制代码16位的值
暂停(0.003);
%读(USB、USB.NumBytesAvailable“字符串”)
读(USB、USB.NumBytesAvailable / 2“uint16”)
信号= (25600,1234,2341,3412,4095,3210];
%包含十六进制代码' d '其次是5 16位的值
%小小的滴d和发回signal.read 5值16位
抽搐
k = 1:1000
写(USB信号,“uint16”);%这条线系列。十六进制代码写到d后跟5 16位的值
结束
writespeed = 1000 / toc%的措施写入速度和报告编写循环频率
%暂停(0.002);
抽搐
x =阅读(USB USB.NumBytesAvailable / 2,“uint16”);
%暂停(0.01)
readspeed = 1000 / toc%的报告读周期频率
我= = 1:1999信号(信号(25600,1234,2341,3412,4095,3210]];结束现在2000的样品6 uint16 %信号
抽搐
写(USB信号,“uint16”);% d后跟5这一行写十六进制代码16位的值
如果(USB.NumBytesAvailable > 0)
x =阅读(USB USB.NumBytesAvailable / 2,“uint16”);
结束
writereadspeed = 2000 / toc

答案(1)

沃尔特·罗伯森
沃尔特·罗伯森 2023年6月15日2:44
有串口的设置能让写命令运行得更快?
开发代码编写uint16单词一个小小的板连接到USB串行端口。
是的。最好的办法让一个串行端口写执行得更快并不是使用USB。
在串行是 定义 缓冲数据,直到一个USB包满,否则一个计时器过期了没有新的输入。USB标准定义了一个“推”操作,意味着“停止等待,发送数据包就可以安排”,但MATLAB并不使该操作对用户可用。
因此,如果你有时间敏感串行数据包。不要使用USB。

标签

s manbetx 845


释放

R2021a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!