Objective c 目标C/Arduino通信速度减慢
我已经在objective C中为一台cnc机器编写了一个G代码解释器/控制应用程序。在前20-30秒内,一切都运行良好,但在那之后,整个过程又停止了20秒,恢复得非常慢。我制作了一个视频,你可以自己看: . 据我所知,它没有跳过步骤或类似的东西,只是走得很慢 在我的X代码控制台中,我可以看到代码是以正常速度解释的(每次写入一个字节时使用NSLog) 我使用来自的IOkit进行通信。我尝试了很多不同的波特率,有时这会延长它正常工作的时间,但最终它总是变慢 我在这一行之后有些事情需要清理串行缓冲区之类的Objective c 目标C/Arduino通信速度减慢,objective-c,cocoa,arduino,serial-communication,iokit,Objective C,Cocoa,Arduino,Serial Communication,Iokit,我已经在objective C中为一台cnc机器编写了一个G代码解释器/控制应用程序。在前20-30秒内,一切都运行良好,但在那之后,整个过程又停止了20秒,恢复得非常慢。我制作了一个视频,你可以自己看: . 据我所知,它没有跳过步骤或类似的东西,只是走得很慢 在我的X代码控制台中,我可以看到代码是以正常速度解释的(每次写入一个字节时使用NSLog) 我使用来自的IOkit进行通信。我尝试了很多不同的波特率,有时这会延长它正常工作的时间,但最终它总是变慢 我在这一行之后有些事情需要清理串行缓冲区
// send a byte to the serial port
void writeByte(char val) {
write(serialFileDescriptor, [[NSString stringWithFormat:@"%c" , val] cStringUsingEncoding:NSUTF8StringEncoding], 1);
}
更新:我正在运行OS X 10.9的17英寸MBP上开发该应用程序,我在运行10.9.1的其他13英寸MBP上尝试了该应用程序,同样的情况也会发生,但当我使用运行10.6.8的其他13英寸MBP时,它工作正常
你知道这里发生了什么吗?可能你写的比波特率快,但只有当输出缓冲区满时你才会慢下来,因为你需要等待写入。这可以通过多种方式解决或解决,因为原来有一个流氓串行。write()有些是在Arduino代码中(我放在那里是为了找到另一个bug,只是忘记了)该语句慢慢地填满了串行缓冲区。您需要缩小问题的范围。您有两个不同的系统在交互。速度减慢是因为Arduino硬件、Mac应用程序或某些字节组合出现问题吗?数据包是否以您期望的速率发送到Arduino?“字节组合”应为在最后的评论中,@AndrewMadsen我做了一些测试,我不认为是Arduino,我连接了一个LED,使它亮起
if(Serial.available()>0)
并在其他情况下关闭。它开始持续亮起,之后只每隔一秒左右亮一次。我是否正确地认为它与我的Mac应用程序有关?我尝试通过放置[NSThread sleepForTimeInterval:t1]来降低写入速率在writeByte语句之后。我尝试了很多不同的t1
(甚至一秒钟)但最终它们都变慢了。我是否正确地认为问题不是由写入速度超过波特率引起的?或者这不是检查的正确方法?这不是正确的方法。波特率/10是您的字节/s。然后做一些数学计算:)谢谢,但我不认为这是问题所在。我希望发送速度小于500字节/秒,我尝试了不同的波特率,都高于5000到1000000(我相信Arduino的最大波特率)。奇怪的是,这在一台计算机上可以,但在另一台计算机上却不行。@Tim是的,我对这一点也有点困惑