zoukankan      html  css  js  c++  java
  • GUI_Delay函数

    GUI_Delay()函数

    使用GUI_Delay()函数时,对于其延时时间不确定,明明设置为最小值1,延时时间

    仍旧太长,不能达到需求。遂决定研究明白其实现机理。

    uC/OS-II使用OSTimeDly()函数实现延时,其单位是OS_TICKS,即延时多少个系统节

    拍。GUI使用GUI_Delay()函数延时,同时也实现显示刷新;基于同一个平台,估计也会

    调用OSTimeDly()函数以实现基本的延时功能。

    下面分析GUI_Delay()函数功能

    void GUI_Delay(int Period) { 

      int EndTime = GUI_GetTime()+Period; 

      int tRem; /* remaining Time */ 

    GUI_ASSERT_NO_LOCK(); 

      while (tRem = EndTime- GUI_GetTime(), tRem>0) { 

    GUI_Exec(); 

    GUI_X_Delay((tRem >5) ? 5 : tRem); 

    首先EndTime变量获得延时结束时间;

    使用一个while循环,在结束时间之前循环调用GUI_Exec()函数和GUI_X_Delay()

    函数;

    前者是GUI的刷新函数,保证在延时过程中不会停止GUI任务处理。后者就是我们要

    分析的延时函数GUI_X_Delay了。

    参数用三目变量,每次送给延时的参数最大是5

    跟踪GUI_X_Delay()函数,在GUI_X_uCOS.C文件中实现。

    void GUI_X_Delay (int period) 

    INT32U ticks; 

        ticks = (period * 1000) / OS_TICKS_PER_SEC; 

    OSTimeDly((INT16U)ticks); 

    可以看到,在GUI_X_Delay()函数中调用了系统延时函数OSTimeDly(),就像前面

    我们说过的,OSTimeDly()函数的延时时间是系统节拍,如果要改变GUI_Delay()函数

    的延时时间,就需要从此着手。

    再看看延时时间的取值:OS_TICKS_PER_SECOS_CFG.H中设置为100,即每秒产

    100个系统节拍。ticks变量在这里被扩展了10倍。即GUI_Delay()函数传递一个延时

    参数1,而实际的延时时间就是10个节拍即100毫秒。在这个延时时间之内,调用GUI_Delay

    ()函数的任务就不能执行,使得响应速度慢。为保持源程序的风格一致,这里改period

    的倍数为100,使GUI_Delay()函数的延时时间和OSTimeDly()函数时间单位一致,提

    高了响应速度增强其易用性。 

  • 相关阅读:
    Qt中的 Size Hints 和 Size Policies
    __declspec,__cdecl,__stdcall区别和作用
    深入理解DLL文件
    TCP/IP TIME_WAIT状态原理
    Linux 网络编程 高级套接字
    OpenCV 图像处理学习笔记(一)
    C++运算符重载的规则
    WinSock异步IO模型之Select
    ASSER、VERIFY、TRACE详解
    VC++ 网络编程总结(二)
  • 原文地址:https://www.cnblogs.com/Ph-one/p/3960340.html
Copyright © 2011-2022 走看看