Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 目标C/Arduino通信速度减慢_Objective C_Cocoa_Arduino_Serial Communication_Iokit - Fatal编程技术网

Objective c 目标C/Arduino通信速度减慢

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进行通信。我尝试了很多不同的波特率,有时这会延长它正常工作的时间,但最终它总是变慢 我在这一行之后有些事情需要清理串行缓冲区

我已经在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是的,我对这一点也有点困惑