亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? guitimer.c

?? 一個在44b0上移植成功的ucgui
?? C
字號:
/***********************************************************************************************************                                                uC/GUI*                        Universal graphic software for embedded applications**                       (c) Copyright 2002, Micrium Inc., Weston, FL*                       (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH**              礐/GUI is protected by international copyright laws. Knowledge of the*              source code may not be used to write a similar product. This file may*              only be used in accordance with a license and should not be redistributed*              in any way. We appreciate your understanding and fairness.*----------------------------------------------------------------------
File        : GUITimer.c
Purpose     : Supplies timers for new emWin GSC
----------------------------------------------------------------------
---------------------------END-OF-HEADER------------------------------
*/


#include <stddef.h>           /* needed for definition of NULL */
#include "GUI_Protected.H"


/*
  *****************************************************************
  *                                                               *
  *              Config defaults                                  *
  *                                                               *
  *****************************************************************
*/

/*
      *************************************************************
      *                                                           *
      *                 Object definition                         *
      *                                                           *
      *************************************************************

*/
typedef struct {
  GUI_TIMER_CALLBACK* cb;
  GUI_TIMER_Handle hNext;
  int Flags;
	U32 Context;
	GUI_TIMER_TIME t0;
	GUI_TIMER_TIME Period;
} GUI_TIMER_Obj;

/*
  *****************************************************************
  *                                                               *
  *              Static data                                      *
  *                                                               *
  *****************************************************************
*/

GUI_TIMER_Handle hFirstTimer;


/*
  ********************************************************************
  *                                                                  *
  *                 Macros for internal use                          *
  *                                                                  *
  ********************************************************************
*/

#define GUI_TIMER_H2P(h) (GUI_TIMER_Obj*)GUI_ALLOC_H2P(h)

/*
  ********************************************************************
  *                                                                  *
  *                    Static routines                               *
  *                                                                  *
  ********************************************************************
*/


static void Unlink(GUI_TIMER_Handle hTimer) {
  GUI_TIMER_Obj* pTimer = GUI_TIMER_H2P(hTimer);
  GUI_TIMER_Handle hi;
  GUI_TIMER_Obj*   pi;
/* Check if it is the first element */
  if (hFirstTimer == hTimer) {
    hFirstTimer = pTimer->hNext;
    return;
	}
  hi = hFirstTimer;
/* Try to find it in the list ... */
  while(hi) {
    /* GUI_ASSERT(hi<1000,0); */
    pi = GUI_TIMER_H2P(hi);
    if (pi->hNext == hTimer) {
      pi->hNext = pTimer->hNext;
      break;
		}        
    hi = pi->hNext;
  }  
}

/*********************************************************************
   Link new Timer
	 ==============

	This routine inserts the new timer (referenced by its handle) into
	the linked list. The linked list is sorted according to timestamps.
	The first element is the timer which expires first.
*/
void Link(GUI_TIMER_Handle hNew) {
  GUI_TIMER_Obj*   pNew        = GUI_TIMER_H2P(hNew);
  GUI_TIMER_Obj*   pTimer;
  GUI_TIMER_Obj*   pNext;
  GUI_TIMER_Handle hNext;
  if (hFirstTimer ==0) { /* List is empty, make it the only element */
    hFirstTimer = hNew;
	  pNew->hNext = 0;
  } else {
    GUI_TIMER_Obj* pFirstTimer      = GUI_TIMER_H2P(hFirstTimer);
/* Check if we have to make it the first element */
    if ((pNew->t0 - pFirstTimer->t0) <=0) {
      pNew->hNext = hFirstTimer;
      hFirstTimer = hNew;
			return;
		} else {
      GUI_TIMER_Handle hTimer = hFirstTimer;
/* Put it into the list */
      do {
        pTimer       = GUI_TIMER_H2P(hTimer);
        hNext        = pTimer->hNext;
        if (hNext ==0)
					goto Append;
        pNext      = GUI_TIMER_H2P(hNext);
				if ((pNew->t0 - pNext->t0) <=0) {
          pNew->hNext  = hNext;
          pTimer->hNext= hNew;
          return;
				}
			} while(1);
/* Put it at the end of the list */
Append:
      pNew->hNext  = hNext;
      pTimer->hNext= hNew;
      return;
		}
  }
}

/*
  ********************************************************************
  *
  *        Static routines:  Exec
  *
  ********************************************************************
*/


int GUI_TIMER_Exec(void) {
  int r = 0;
  GUI_TIMER_TIME t = GUI_GetTime();
  GUI_LOCK(); {
    while (hFirstTimer) {
     	GUI_TIMER_Obj* pTimer = GUI_TIMER_H2P(hFirstTimer);
      if ((pTimer->t0-t) <=0) {
        GUI_TIMER_MESSAGE tm;
        tm.Time = t;
				tm.Context = pTimer->Context;
        hFirstTimer = pTimer->hNext;
				pTimer->cb(&tm);
        r = 1;
			} else
			  break;
    }
    /*
		GUI_TIMER_Obj* pObj = GUI_TIMER_H2P(hObj);
    pObj->t0 = Time;
    */
  } GUI_UNLOCK(); 
  return r;
}


/*
  ********************************************************************
  *                                                                  *
  *        Exported routines:  Create                                *
  *                                                                  *
  ********************************************************************
*/

GUI_TIMER_Handle GUI_TIMER_Create      (    GUI_TIMER_CALLBACK* cb,
                                    int Time,
                                    U32 Context,
                                    int Flags) {
  GUI_TIMER_Handle hObj;
  GUI_TIMER_Obj* pObj;
  GUI_LOCK();
  GUI_USE_PARA(Flags);
  GUI_USE_PARA(Time);
  GUI_pfTimerExec = GUI_TIMER_Exec;
	{
    /* Alloc memory for obj */
    hObj = GUI_ALLOC_ALLOC(sizeof(GUI_TIMER_Obj));
    pObj = GUI_TIMER_H2P(hObj);
    /* init member variables */
    pObj->cb = cb;
		pObj->Context = Context;
    /* Link it */
		Link(hObj);
	} GUI_UNLOCK();
  return hObj;
}



/*
  ********************************************************************
  *                                                                  *
  *        Exported routines:  Delete                                *
  *                                                                  *
  ********************************************************************
*/

void GUI_TIMER_Delete(GUI_TIMER_Handle hObj) {
/* Unlink Timer */
  GUI_LOCK();
    Unlink(hObj);
    GUI_ALLOC_FREE(hObj);
  GUI_UNLOCK();
}

/*
  ********************************************************************
  *                                                                  *
  *        Exported routines:  Various methods                       *
  *                                                                  *
  ********************************************************************
*/
void GUI_TIMER_SetPeriod(GUI_TIMER_Handle hObj, GUI_TIMER_TIME Period) {
  GUI_LOCK(); {
    GUI_TIMER_Obj* pObj = GUI_TIMER_H2P(hObj);
    pObj->Period = Period;
  } GUI_UNLOCK(); 
}

void GUI_TIMER_SetTime(GUI_TIMER_Handle hObj, GUI_TIMER_TIME Time) {
  GUI_LOCK(); {
   	GUI_TIMER_Obj* pObj = GUI_TIMER_H2P(hObj);
    pObj->t0 = Time;
  } GUI_UNLOCK(); 
}

void GUI_TIMER_SetDelay(GUI_TIMER_Handle hObj, GUI_TIMER_TIME Delay) {
  GUI_LOCK(); {
   	GUI_TIMER_Obj* pObj = GUI_TIMER_H2P(hObj);
    pObj->t0 = Delay;
		Unlink(hObj);
		Link(hObj);
  } GUI_UNLOCK(); 
}

void GUI_TIMER_Restart(GUI_TIMER_Handle hObj) {
  GUI_LOCK(); {
   	GUI_TIMER_Obj* pObj = GUI_TIMER_H2P(hObj);
    pObj->t0 = GUI_GetTime() +pObj->Period;
		Unlink(hObj);
		Link(hObj);
  } GUI_UNLOCK(); 
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜日韩在线观看| 3d动漫精品啪啪1区2区免费| 欧美日韩一区二区在线观看| 国产日产欧美精品一区二区三区| 亚洲国产精品天堂| 91老师片黄在线观看| www国产精品av| 裸体歌舞表演一区二区| 欧美日韩在线观看一区二区 | 日韩欧美国产综合| 伊人开心综合网| av不卡免费在线观看| 久久久国产午夜精品| 午夜免费久久看| 在线免费观看不卡av| 亚洲欧美成aⅴ人在线观看| 国产成人综合亚洲91猫咪| 精品盗摄一区二区三区| 青青草国产精品亚洲专区无| 欧美裸体bbwbbwbbw| 亚洲成人av一区二区三区| 在线亚洲高清视频| 亚洲精品自拍动漫在线| 91丨porny丨蝌蚪视频| 国产精品视频观看| 成人午夜又粗又硬又大| 国产亚洲欧美日韩在线一区| 国产综合久久久久久久久久久久| 91精品国产综合久久国产大片| 亚洲国产一区二区视频| 欧美日韩免费电影| 婷婷激情综合网| 欧美一区二区三区四区在线观看| 日本三级亚洲精品| 日韩欧美电影一区| 国产精品18久久久久久久久久久久| 精品噜噜噜噜久久久久久久久试看| 日本成人在线不卡视频| 精品久久一区二区| 国产成人免费高清| 亚洲欧洲一区二区在线播放| 色偷偷88欧美精品久久久| 亚洲成国产人片在线观看| 91麻豆精品久久久久蜜臀| 久久99久久精品| 中文字幕欧美日韩一区| 在线一区二区三区四区五区 | 国产永久精品大片wwwapp| 久久久99免费| 在线免费观看一区| 美女mm1313爽爽久久久蜜臀| 久久久不卡网国产精品二区| 99天天综合性| 日日骚欧美日韩| 久久久久久久国产精品影院| a美女胸又www黄视频久久| 亚洲电影你懂得| 2024国产精品| 99re热视频精品| 五月婷婷激情综合网| 精品国产乱码久久久久久蜜臀| 成人精品国产一区二区4080| 午夜精品福利视频网站| 国产亚洲午夜高清国产拍精品 | 岛国精品在线观看| 亚洲成人激情社区| 久久久久久一二三区| 欧美午夜电影网| 高清不卡一区二区在线| 亚洲成在人线在线播放| 国产午夜亚洲精品羞羞网站| 在线一区二区三区四区五区 | 在线免费一区三区| 国产精品一色哟哟哟| 亚洲福利一区二区三区| 欧美激情一区在线观看| 91精品国产综合久久国产大片| www..com久久爱| 精品一区二区三区不卡| 亚洲电影一区二区三区| 中文无字幕一区二区三区| 7777精品久久久大香线蕉| 99精品国产99久久久久久白柏 | 午夜精品久久久久久久99水蜜桃| 国产视频视频一区| 欧美一区二区在线不卡| 一本大道av伊人久久综合| 国产九色sp调教91| 日韩和欧美的一区| 樱花影视一区二区| 国产精品国产三级国产普通话99| 精品成人免费观看| 91精品国产品国语在线不卡| 在线观看三级视频欧美| 91在线观看污| 91在线观看高清| 成人黄色小视频| 国产成人精品免费视频网站| 国内精品写真在线观看| 久久国产成人午夜av影院| 日韩激情视频网站| 视频一区视频二区中文| 午夜精品福利视频网站| 亚洲成av人影院在线观看网| 亚洲福利视频一区二区| 亚洲国产cao| 午夜欧美在线一二页| 亚洲图片欧美色图| 亚洲国产成人av网| 亚洲成av人片在线观看无码| 一区二区三区精品视频| 艳妇臀荡乳欲伦亚洲一区| 亚洲欧美另类久久久精品| 中文字幕视频一区| 亚洲免费观看高清完整版在线| 综合av第一页| 亚洲在线视频一区| 五月婷婷综合激情| 美女一区二区久久| 国产美女一区二区| 成人av小说网| 91美女片黄在线观看91美女| 色婷婷久久综合| 欧美妇女性影城| 欧美tickling网站挠脚心| 久久久九九九九| 成人欧美一区二区三区视频网页| 一区二区三区精品在线| 肉肉av福利一精品导航| 久久99精品久久久久婷婷| 国产成人一级电影| 日本黄色一区二区| 欧美人狂配大交3d怪物一区| 精品国产露脸精彩对白| 国产精品视频九色porn| 亚洲激情五月婷婷| 美国av一区二区| 成年人国产精品| 欧美日韩国产一级二级| 久久亚洲影视婷婷| 亚洲欧美一区二区久久| 性久久久久久久| 狠狠色丁香久久婷婷综合_中| av网站免费线看精品| 欧美片在线播放| 国产拍欧美日韩视频二区| 亚洲一区二区三区在线播放| 久久av老司机精品网站导航| 99精品视频一区| 欧美xxxxxxxx| 亚洲免费成人av| 国产尤物一区二区在线| 在线观看日韩毛片| 国产欧美一区二区精品性| 一区二区高清免费观看影视大全| 美女网站色91| 在线免费一区三区| 国产日韩欧美麻豆| 丝袜亚洲另类欧美| 97精品超碰一区二区三区| 精品国产一二三| 亚洲成人久久影院| 99re这里只有精品首页| 26uuu欧美日本| 午夜精品视频一区| 色综合中文字幕国产 | 无码av中文一区二区三区桃花岛| 韩日欧美一区二区三区| 欧美日韩国产在线播放网站| 国产精品人人做人人爽人人添| 免费观看30秒视频久久| 欧美影院一区二区三区| 国产精品第13页| 国产精品一区二区免费不卡| 日韩一区二区电影| 亚洲一二三四在线观看| av在线这里只有精品| 国产欧美一二三区| 国产麻豆精品95视频| 欧美精品一二三四| 亚洲777理论| 欧美性色黄大片手机版| 亚洲另类中文字| 99精品国产热久久91蜜凸| 国产三级精品视频| 精品无人码麻豆乱码1区2区| 3d动漫精品啪啪一区二区竹菊 | 欧美日韩激情一区二区三区| 亚洲激情第一区| 色综合激情久久| 一区二区在线观看视频| 91美女在线看| 一区二区三区精品| 欧美三级电影精品| 亚洲成人激情自拍| 91精品国产综合久久香蕉的特点| 午夜精品福利一区二区蜜股av| 欧美日韩精品欧美日韩精品一 | 一区二区三区日本| 91黄色免费看|