社区
汇编语言
帖子详情
挑战:如何做到精确等待n个CPU时钟,并且在等待时期将控制权交给操作系统???
gencheng
2008-03-10 08:37:53
由于现在在做的是实时通讯,要求精确的延时,汇编语言能不能做到:精确等待n个CPU时钟,并且在等待时期将控制权交给操作系统???
也就是说在等待时期内不占用cpu资源.我现在用的是Delphi,它的sheep()函数经测试精度太差,比如sheep(1)应该是等待1毫秒,在这1毫秒内让出cpu使用权.但实际上等待了n个毫秒,很不精确.不知道汇编语言能不能做到??
...全文
187
13
打赏
收藏
挑战:如何做到精确等待n个CPU时钟,并且在等待时期将控制权交给操作系统???
由于现在在做的是实时通讯,要求精确的延时,汇编语言能不能做到:精确等待n个CPU时钟,并且在等待时期将控制权交给操作系统??? 也就是说在等待时期内不占用cpu资源.我现在用的是Delphi,它的sheep()函数经测试精度太差,比如sheep(1)应该是等待1毫秒,在这1毫秒内让出cpu使用权.但实际上等待了n个毫秒,很不精确.不知道汇编语言能不能做到??
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zmwgreenrain
2008-03-14
打赏
举报
回复
使用timer函数
cnzdgs
2008-03-12
打赏
举报
回复
如果你是要精确一些的定时可以用CreateWaitableTimer和SetWaitableTimer,每秒50次还是没问题的,不过这个定时器跟Sleep的效果是不同的,比Sleep准得多,但离精确到n个CPU周期可差得远了。
再罗嗦一句,这问题跟汇编语言没什么关系。
gencheng
2008-03-12
打赏
举报
回复
不是我要求苛刻,而是用户要求在Windows系统上实现单位时间内的数据采集率要求有一定的指标.比如说每秒50组数据等等.所以Sleep就达不到要求了.而如果不Sleep,让cpu一直无限循环的采集数据,那么cpu占用率将会一直保持在97%以上,用不了多久也会死掉,那样更玩完.
rularys
2008-03-11
打赏
举报
回复
在一个实时系统上也许可以实现;在Windows上可不行,楼主要求很苛刻
大熊猫侯佩
2008-03-11
打赏
举报
回复
windows非实时OS,你可以看一下 windows 内核揭秘 4edit 为什么不可以。
alan001
2008-03-11
打赏
举报
回复
一块板+时钟引线+定时器芯片/处理器
BMCRNET
2008-03-11
打赏
举报
回复
MARK
ckc
2008-03-11
打赏
举报
回复
晕到死不是实时操作系统,无法实现你的要求
不知道你的具体应用是什么,要么降低应用对实时的要求,要么使用硬件解决这个问题
archim
2008-03-11
打赏
举报
回复
阅读CPU手册,计算每条指令的时钟数,然后自己设计一个循环来等待
gencheng
2008-03-11
打赏
举报
回复
楼上的还真够取巧.因为Delphi的Sleep()也是调用win32API的 Sleep.所以效果应该一样.
另外Delphi内嵌的BASM不支持invoke,所以上述方法事实上在Delphi中也行不通.
cnzdgs
2008-03-11
打赏
举报
回复
要与Sleep(1)效果相同?那就用汇编调Sleep函数不就行了。
invoke Sleep, 1
gencheng
2008-03-11
打赏
举报
回复
如何用汇编做出效果和sleep(1)函数相同的东西?难道汇编做不到???
因为主要是用在串口数据采集上,所以有此要求!
cnzdgs
2008-03-10
打赏
举报
回复
做不到,也不可能做到,因为切换一次任务所需要的时间就是微秒级的。如果等待时间不把控制权交出,在一定程度上还有机会做到。
执行Sleep函数不是定时用的,而是放弃线程对CPU的控制权,等到线程轮回一周后才能再次获得控制权,此时如果还未达到Sleep指定的时间,则自动再次放弃控制权,如此往复。线程每次获得控制权是10毫秒(时间片),达到10毫秒后系统会自动切换到其它线程,未达到时可以执行Sleep函数主动放弃。
相关推荐
C语言嵌入式Linux编程第9期:
CPU
和
操作系统
入门
操作系统
和多任务编程,是很多嵌入式学员学习的难点和重点。本期课程针对嵌入式学员,尤其是非CS专业的嵌入式学员,补充
CPU
工作机制、
操作系统
核心技术等理论短板,为后续的Linux内核、驱动开发等高阶课程打下良好的理论基础。
终止应用程序
Windows是一种非剥夺式多任务
操作系统
。只有的应用程序交出
CPU
控制权
后,Windows才能把
控制权
交给
其他应用程序。当GetMessage函数找不到
等待
应用程序处理的消息时,自动交出
控制权
,Windows把
CPU
的
控制权
交给
其他
等待
控制权
的应用程序。由于每个应用程序都有一个消息循环,这种隐式交出
控制权
的方式保证合并各个应用程序共享
控制权
。一旦发往该应用程序的消息到达应用程序队列,即开始执行G
Windows消息机制(3)
(五)终止应用程序:Windows是一种非剥夺式多任务
操作系统
。只有的应用程序交出
CPU
控制权
后,Windows才能把
控制权
交给
其他应用程序。当GetMessage函数找不到
等待
应用程序处理的消息时,自动交出
控制权
,Windows把
CPU
的
控制权
交给
其他
等待
控制权
的应用程序。由于每个应用程序都有一个消息循环,这种隐式交出
控制权
的方式保证合并各个应用程序共享
控制权
。一旦发往该应用程序的消息到达应
window消息机制(三)
五)终止应用程序: Windows是一种非剥夺式多任务
操作系统
。只有的应用程序交出
CPU
控制权
后,Windows才能把
控制权
交给
其他应用程序。当GetMessage函数找不到
等待
应用程序处理的消息时,自动交出
控制权
,Windows把
CPU
的
控制权
交给
其他
等待
控制权
的应用程序。由于每个应用程序都有一个消息循环,这种隐式交出
控制权
的方式保证合并各个应用程序共享
控制权
。一旦发往该应用程序的消息到达应用
发帖
汇编语言
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
2.1w+
社区成员
4.1w+
社区内容
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
帖子事件
创建了帖子
2008-03-10 08:37
社区公告
暂无公告