zoukankan      html  css  js  c++  java
  • windows下实现微秒级的延时

     

    windowsintegeriostream汇编嵌入式任务

    最近正在做一个嵌入式系统,是基于windows ce的,外接硬件的时序要微秒级的延时.
    1.微秒级的延时肯定不能基于消息(SetTimer函数),因为一出现消息堵塞等就会影响精
    度,而且setTimer单位才是毫秒.实际响应时间可能要到55毫秒左右.
    2.微秒级的延时也不能不能基于中断,VxD最快的时钟服务程序Set_Global_Time_Out函数
    才能保证1毫秒的精度.其他挂接int 8H中断处理函数等,只能保证55ms的精度.(有时还不
    能)
    3.因此可以想到汇编下的那种基于循环执行语句的那种延时.但汇编那种代码不通用,跟
    cpu的频率有关.
    所以可以用windows下的几个函数来写出通用代
    码.GetTickCout,timeGetTime,QueryPerformanceCounter.
    1)GetTickCout响应只能保证55ms的精度
    2)timeGetTime只能保证1ms的精度
    3)而QueryPerformanceCounter函数不依赖计算中断的次数,而是靠读取别的硬件时钟来
    实现的,可以有0.8微秒的精度.这个系统不支持windows 95以下的系统,不过这些系统应
    该没人用了吧.呵呵.
    下面是示例代码:

    Code


    因为windows是多任务系统,只要保证windows执行这段代码时不被其他进程打断,就可以
    保证延时微秒级成功.出现打断的几率很小.一般可以不考虑.如果代码执行时间低于一
    个时间片,那就100%不会被打断了.

  • 相关阅读:
    Oracle exp/imp导出导入命令及数据库备份 (转载)
    多表初始化
    调用别的窗体
    修复k8s内存泄露问题
    如何高效的学习(转)
    Ansible11:变量详解【转】
    沟通的方式方法
    shell中的循环及条件判断
    Tomcat参数优化
    将DataReader转化为DataTables的一个简单实现
  • 原文地址:https://www.cnblogs.com/sczw-maqing/p/3363957.html
Copyright © 2011-2022 走看看