社区
汇编语言
帖子详情
挑战:如何做到精确等待n个CPU时钟,并且在等待时期将控制权交给操作系统???
gencheng
2008-03-10 08:37:53
由于现在在做的是实时通讯,要求精确的延时,汇编语言能不能做到:精确等待n个CPU时钟,并且在等待时期将控制权交给操作系统???
也就是说在等待时期内不占用cpu资源.我现在用的是Delphi,它的sheep()函数经测试精度太差,比如sheep(1)应该是等待1毫秒,在这1毫秒内让出cpu使用权.但实际上等待了n个毫秒,很不精确.不知道汇编语言能不能做到??
...全文
227
13
打赏
收藏
挑战:如何做到精确等待n个CPU时钟,并且在等待时期将控制权交给操作系统???
由于现在在做的是实时通讯,要求精确的延时,汇编语言能不能做到:精确等待n个CPU时钟,并且在等待时期将控制权交给操作系统??? 也就是说在等待时期内不占用cpu资源.我现在用的是Delphi,它的sheep()函数经测试精度太差,比如sheep(1)应该是等待1毫秒,在这1毫秒内让出cpu使用权.但实际上等待了n个毫秒,很不精确.不知道汇编语言能不能做到??
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
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函数主动放弃。
操作系统
CPU
调度
通过在进程之间切换
CPU
,
操作系统
可以提高计算机的吞吐率。 对于单处理器系统,每次只允许一个进程运行:任何其他进程必须
等待
,直到
CPU
空闲能被调度为止。
CPU
按一定的调度算法从就绪队列中选择一个进程,把
CPU
的...
每次
时钟
中断(Timer Interrupt)用来干嘛?为什么要一直中断?
如果没有它,系统将会“停滞”在某个任务中,这样,每 10ms
操作系统
都会。每次
时钟
中断,OS 会检查。,如果是,就让进程继续运行。这些新技术比传统的 PIT。每次触发
时钟
中断,OS。,可以减少
CPU
开销。
时钟
中断是...
操作系统
是如何运行的?
中断向量表将
控制权
传递给入口,
CPU
会保存现场,允许处理函数执行。此时的中断处理并不直接切换到其他任务,而是先通过汇编指令跳转到 C 语言的do_timer函数。/* 更新全局
时钟
节拍 */total++;// jiffies++,记录自...
CPU
调度
当一个进程必须
等待
时,
操作系统
会从该进程拿走
CPU
的使用权,而将
CPU
交给
其他进程。
CPU
的成功调度依赖于进程的如下属性:进程执行由
CPU
执行和I/O
等待
周期组成。进程在这两个状态之间切换。
CPU
burst—I/O bust I/...
操作系统
- 计算机系统概述
考纲内容
操作系统
的基本概念
操作系统
的发展历程程序运行环境
CPU
运行模式;内核模式与用户模式中断和异常处理;系统调用程序的链接与装入;车光绪运行时内存映像与地址空间
操作系统
结构分层、模块化、宏内核、微内核...
汇编语言
21,497
社区成员
41,617
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章