I2C通信延时问题

ztmsimon 2014-07-29 09:35:52
我在做I2C通信的时候,上位机往下位机写了后需要进行等待50ms,这个时候我用sleep 50 进行延时,但是偶尔会报错,后来发现别人打开了Windows Media Player,不知道为什么这个程序竟然会对我sleep函数有影响,我用60次循环,每个循环sleep 1000,在不打开Windows Media Player差不多每次都是58~61秒之间,还算比较正常,但是一旦打开后就只用25秒左右程序就结束了,这个影响还是挺大的,我是用的windows xp的系统。
请问各位大神还有没其他精确延时的函数能够将延时精确在1ms以内的?
...全文
685 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
SYGKT 2014-07-30
  • 打赏
  • 举报
回复
引用 6 楼 ztmsimon 的回复:
[quote=引用 5 楼 SYGKT 的回复:] 因为我用sleep做了一个精度比较高的timer,但是仍然有误差,最后用stopwatch检测每次sleep的实际时间算出偏移量在下一次修正,最后精度在1ms,没问题
这个怎么做的?能告诉一下吗?[/quote] 大概说一下 是先 获取当前时间 然后sleep 再获取当前时间,和interval减一减出来一个offset,下一次sleep的时候修正 (这个是我看了那篇文章之后想出来的,那个文章上写的那个精确的有一个问题就是CPU占用率会100%)
ztmsimon 2014-07-30
  • 打赏
  • 举报
回复
引用 5 楼 SYGKT 的回复:
因为我用sleep做了一个精度比较高的timer,但是仍然有误差,最后用stopwatch检测每次sleep的实际时间算出偏移量在下一次修正,最后精度在1ms,没问题
这个怎么做的?能告诉一下吗?
SYGKT 2014-07-29
  • 打赏
  • 举报
回复
http://blog.chinaunix.net/uid-423637-id-357527.html 看看这个 或者你可以用stopwatch计时,sleep完了如果没到60秒就继续sleep,完了再检测
SYGKT 2014-07-29
  • 打赏
  • 举报
回复
引用 2 楼 ztmsimon 的回复:
我现在改成了GetTickCount来进行延时,现在好像确实是好了,但是我查了一下网上说的,有的说GetTickCount误差在15ms,有的说误差在50ms,我的下位机进行处理必须要等待50ms,这样的话用GetTickCount是不是很悬啊?仍然会有报错的可能?
因为我用sleep做了一个精度比较高的timer,但是仍然有误差,最后用stopwatch检测每次sleep的实际时间算出偏移量在下一次修正,最后精度在1ms,没问题
SYGKT 2014-07-29
  • 打赏
  • 举报
回复
引用 2 楼 ztmsimon 的回复:
我现在改成了GetTickCount来进行延时,现在好像确实是好了,但是我查了一下网上说的,有的说GetTickCount误差在15ms,有的说误差在50ms,我的下位机进行处理必须要等待50ms,这样的话用GetTickCount是不是很悬啊?仍然会有报错的可能?
你可以考虑直接用那个获得时间的就不用tickcount了,算时间比较方便
SYGKT 2014-07-29
  • 打赏
  • 举报
回复
引用 2 楼 ztmsimon 的回复:
我现在改成了GetTickCount来进行延时,现在好像确实是好了,但是我查了一下网上说的,有的说GetTickCount误差在15ms,有的说误差在50ms,我的下位机进行处理必须要等待50ms,这样的话用GetTickCount是不是很悬啊?仍然会有报错的可能?
stopwatch应该是很精确的(如果硬件支持的话) 这个你可以在msdn上看介绍,我记得这个好像也是用的cpu测频率那个api
ztmsimon 2014-07-29
  • 打赏
  • 举报
回复
我现在改成了GetTickCount来进行延时,现在好像确实是好了,但是我查了一下网上说的,有的说GetTickCount误差在15ms,有的说误差在50ms,我的下位机进行处理必须要等待50ms,这样的话用GetTickCount是不是很悬啊?仍然会有报错的可能?

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧