• 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()函数时间单位一致,提

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

  • 相关阅读:
    最大匹配之匈牙利算法模板。。 (转)
    hdu 1597 find the nth digit
    hdu 1258 Sum It Up ( dfs )
    hdu 1596 find the safest road(Dijkstra)
    C 求完数 水仙花数 完全平方数 素数 2+22+222... PI
    C 字串匹配
    C 约瑟夫环[数组]
    C 鞍点所在行是最大值所在列是最小值
    C 创建链表并将信息存储在二进制文件中再读取
    C 统计字符数 行数
  • 原文地址:https://www.cnblogs.com/Ph-one/p/3960340.html
Copyright © 2020-2023  润新知