社区
汇编语言
帖子详情
挑战:如何做到精确等待n个CPU时钟,并且在等待时期将控制权交给操作系统???
gencheng
2008-03-10 08:37:53
由于现在在做的是实时通讯,要求精确的延时,汇编语言能不能做到:精确等待n个CPU时钟,并且在等待时期将控制权交给操作系统???
也就是说在等待时期内不占用cpu资源.我现在用的是Delphi,它的sheep()函数经测试精度太差,比如sheep(1)应该是等待1毫秒,在这1毫秒内让出cpu使用权.但实际上等待了n个毫秒,很不精确.不知道汇编语言能不能做到??
...全文
213
13
打赏
收藏
挑战:如何做到精确等待n个CPU时钟,并且在等待时期将控制权交给操作系统???
由于现在在做的是实时通讯,要求精确的延时,汇编语言能不能做到:精确等待n个CPU时钟,并且在等待时期将控制权交给操作系统??? 也就是说在等待时期内不占用cpu资源.我现在用的是Delphi,它的sheep()函数经测试精度太差,比如sheep(1)应该是等待1毫秒,在这1毫秒内让出cpu使用权.但实际上等待了n个毫秒,很不精确.不知道汇编语言能不能做到??
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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函数主动放弃。
ISA-bus-timings.pdf.zip_ISA Specification_isa
ISA Bus Timings Specification
计算机组成原理期末复习重点总结
本文档适用于大学生学习。主要归纳了计算机组成原理该科目的知识内容,用于期末复习。其中,部分资料为手写归纳,若出现错误请以课本为主
操作系统
CPU
调度
概述多道程序
操作系统
的基础。通过在进程之间切换
CPU
,
操作系统
可以提高计算机的吞吐率。 对于单处理器系统,每次只允许一个进程运行:任何其他进程必须
等待
,直到
CPU
空闲能被调度为止。
CPU
按一定的调度算法从就绪队列中选择一个进程,把
CPU
的使用权
交给
被选中的进程,如果没有就绪进程,系统会安排一个系统空闲进程或系统空闲进程。调度触发事件: 创建、唤醒、退出等进程控制操作 进程
等待
I/O,I/O中断
Linux
操作系统
之
时钟
时钟
在计算机系统中扮演着至关重要的角色,它不仅为
CPU
的操作提供了时间基准,还对进程调度、资源管理和时间管理起着关键作用。通过合理配置和使用
时钟
芯片,
操作系统
能够实现高效的任务调度和准确的时间管理。随着技术的发展,
时钟
的精度和稳定性将继续提高,为计算机系统的性能和可靠性提供保障。
CPU
调度
CPU
调度是多道程序
操作系统
的基础。通过在进程之间切换
CPU
,
操作系统
可以提高计算机的吞吐率。 进程调度—线程调度 基础 当一个进程必须
等待
时,
操作系统
会从该进程拿走
CPU
的使用权,而将
CPU
交给
其他进程。
CPU
的成功调度依赖于进程的如下属性:进程执行由
CPU
执行和I/O
等待
周期组成。进程在这两个状态之间切换。
CPU
burst—I/O bust I/O约束程序通常具有很多短C
汇编语言
21,497
社区成员
41,618
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章