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_SEC在OS_CFG.H中设置为100,即每秒产

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

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

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

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

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

GUI_Delay函数的更多相关文章

  1. emWin 2天速成实例教程000_如何快速入门ucGUI/emWin

    备注:(1)打开工程目录下的"Exe\GUISimulationDebug.exe"即可看到效果.(2)看完教程000-005就基本会用emWin做项目,其他章节可以需要时再参考. ...

  2. [stm32] 利用uc-gui封装画图和画线函数移植51上的模拟动画

    >_<:这里的动画是黄色矩形区域中一个模仿俯视图的起重机运作动画,一个是模仿主视图的吊钩的运动.通过改变初始Init函数中的数据b_x,b_y实现矩形区域的移动.当实时采集时要首先根据起重 ...

  3. Python 小而美的函数

    python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况   any any(iterable) ...

  4. 探究javascript对象和数组的异同,及函数变量缓存技巧

    javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...

  5. JavaScript权威指南 - 函数

    函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ...

  6. C++对C的函数拓展

    一,内联函数 1.内联函数的概念 C++中的const常量可以用来代替宏常数的定义,例如:用const int a = 10来替换# define a 10.那么C++中是否有什么解决方案来替代宏代码 ...

  7. 菜鸟Python学习笔记第一天:关于一些函数库的使用

    2017年1月3日 星期二 大一学习一门新的计算机语言真的很难,有时候连函数拼写出错查错都能查半天,没办法,谁让我英语太渣. 关于计算机语言的学习我想还是从C语言学习开始为好,Python有很多语言的 ...

  8. javascript中的this与函数讲解

    前言 javascript中没有块级作用域(es6以前),javascript中作用域分为函数作用域和全局作用域.并且,大家可以认为全局作用域其实就是Window函数的函数作用域,我们编写的js代码, ...

  9. 复杂的 Hash 函数组合有意义吗?

    很久以前看到一篇文章,讲某个大网站储存用户口令时,会经过十分复杂的处理.怎么个复杂记不得了,大概就是先 Hash,结果加上一些特殊字符再 Hash,结果再加上些字符.再倒序.再怎么怎么的.再 Hash ...

随机推荐

  1. 、JAVA-异常

    异常 1.种类(error 系统异常,无法处理)(exception 程序异常,可以处理) 1.算数异常 2.空指针异常 原因:对象没有实例化就调用他的实例方法,会造成空指针异常 2.常见异常 1.R ...

  2. 转:python socket编程详细介绍

    Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供了标准的 BSD Sockets API. 第二个是 SocketServer, 它提供了服务器中心类,可以简化网络 ...

  3. nyist 596 谁是最好的Coder

    http://acm.nyist.net/JudgeOnline/problem.php?pid=596 谁是最好的Coder 时间限制:1000 ms  |  内存限制:65535 KB 难度:0 ...

  4. [转]WEB开发者必备的7个JavaScript函数

    我记得数年前,只要我们编写JavaScript,都必须用到几个常用的函数,比如,addEventListener 和 attachEvent,并不是为了很超前的技术和功能,只是一些基本的任务,原因是各 ...

  5. for穷举

    穷举:把所有可能的情况都走一遍,使用if条件筛选出来满足的条件的情况.(把所有的可能性都列举一边) 迭代:从初始情况按照规律不断求解中间情况,最终推导出结果.f foreach  专为数组定义的一种命 ...

  6. Keyframes介绍

    Keyframes被称为关键帧,其类似于Flash中的关键帧.在CSS3中其主要以“@keyframes”开头,后面紧跟着是动画名称加上一对花括号“{…}”,括号中就是一些不同时间段样式规则. @ke ...

  7. JQ 获取单选按钮选中的值

    ==========================html 代码 <input type="radio" style="float: left " on ...

  8. Javascript与C#编码解码

    (一) Javascript与C#编码解码的对应关系 http://www.jb51.net/article/44062.htm 这篇文章主要是对JS与C#编码解码进行了详细的介绍,需要的朋友可以过来 ...

  9. 代码坏味道特别篇————Long parameter List 过长的参数列表

    刚开始学习编程时,老师说:讲方法所需要的东西都以参数的形式传入,那是我们好像还没学OO这个东东,要不就弄成全局变量,我擦,全局变量可牛逼了,刚开始学习的时候我们都在用全局变量,可是后来工作了,经理说不 ...

  10. SDK Manager failed to install 'java.exe' locking directory

    转自:http://stackoverflow.com/questions/13587478/sdk-manager-failed-to-install-java-exe-locking-direct ...