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%不会被打断了.

  • 相关阅读:
    540 Single Element in a Sorted Array 有序数组中的单一元素
    539 Minimum Time Difference 最小时间差
    538 Convert BST to Greater Tree 把二叉搜索树转换为累加树
    537 Complex Number Multiplication 复数乘法
    535 Encode and Decode TinyURL 编码和解码精简URL地址
    532 K-diff Pairs in an Array 数组中差为K的数对
    530 Minimum Absolute Difference in BST 二叉搜索树的最小绝对差
    529 Minesweeper 扫雷游戏
    526 Beautiful Arrangement
    1.5 函数
  • 原文地址:https://www.cnblogs.com/sczw-maqing/p/3363957.html
Copyright © 2011-2022 走看看