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

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

?? guitask.c

?? 這套代碼已經成功一直到S3C44B0X開發板上
?? 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        : GUITASK.C
Purpose     : Saves/Restores task context with supported OSs.
              It also uses a resource semaphore.

  The following externals are used and should typically be defined
  in GUI_X.c:
  
    U32  GUI_X_GetTaskId();
    void GUI_X_Unlock();
    void GUI_X_Lock();

----------------------------------------------------------------------
Version-Date---Author-Explanation
----------------------------------------------------------------------
3.70    031016 TQ     GUI_MAXTASK set to 4
3.60    030902 TQ     GUI_MAXTASK increased to 6
3.52    030618 RS     GUI_MAX_LOCK_NESTING increased
3.40    030228 RS     GUI_MAX_LOCK_NESTING introduced
3.02a   020722 RS     Use of macro GUI_DEBUG_ERROROUT_IF in order
                      to simplify th code.
3.02    020514 RS     Avoided nested calls of GUI_X_Lock, GUI_X_Unlock
                      (because some RTOSes, such as CMX and u/C-OS
                      could not handle this easily)
3.00    010425 RS     Cleanup for Version 3.00
                      a) Dummy routines added to avoid link errors
                        in case some modules are compiled with
                        different settings
1.00.01 990926 RS     Fix in order to make sure init task has no
                      context of its own (_CurrentTaskNo =-1)
1.00.00 990918 RS     Initial version for version control purposes.
---------------------------END-OF-HEADER------------------------------
*/

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

/*********************************************************************
*
*       Configuration defaults
*
**********************************************************************
*/

#ifndef GUI_MAXTASK
  #define GUI_MAXTASK (4)
#endif

#ifndef GUI_MAX_LOCK_NESTING
  #define GUI_MAX_LOCK_NESTING 48   /* If a lot of nested dialogs are used, this may not be sufficient. */
#endif

#if GUI_OS

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

static struct {
  U32  TaskID;
  GUI_CONTEXT Context;
} _Save[GUI_MAXTASK];

static int _CurrentTaskNo = -1;
static int _EntranceCnt   =  0;
static U32 _TaskIDLock = 0;

/*********************************************************************
*
*       Static code
*
**********************************************************************
*/
/*********************************************************************
*
*       _GetTaskNo
*/
static int _GetTaskNo(void) {
  int i;
  for (i=0; i< GUI_MAXTASK; i++) {
    U32 TaskId = GUI_X_GetTaskId();
    if (_Save[i].TaskID == TaskId)
      return i;
    if (_Save[i].TaskID == 0) {
      _Save[i].TaskID = TaskId;
      return i;
    }
  }
  GUI_DEBUG_ERROROUT("No Context available for task ... (increase GUI_MAXTASK)");
  return 0;
}

/*********************************************************************
*
*       Public code
*
**********************************************************************
*/
/*********************************************************************
*
*       GUI_Unlock
*/
void GUI_Unlock(void) {
  if (--_EntranceCnt == 0) {
    GUI_X_Unlock();
  }
  /* Test if _EntranceCnt is in reasonable range ... Not required in release builds */
  GUI_DEBUG_ERROROUT_IF((_EntranceCnt < 0), "GUITASK.c: GUI_Unlock() _EntranceCnt underflow ");
}

/*********************************************************************
*
*       GUI_Lock
*/
void GUI_Lock(void) {
  if (_EntranceCnt == 0) {
    GUI_X_Lock();
    _TaskIDLock = GUI_X_GetTaskId();         /* Save task ID */
  } else {
    if (_TaskIDLock != GUI_X_GetTaskId()) {
      GUI_X_Lock();
      _TaskIDLock = GUI_X_GetTaskId();         /* Save task ID */
    }
  }
  if (++_EntranceCnt == 1) {
    int TaskNo = _GetTaskNo();
    if (TaskNo != _CurrentTaskNo) {
      /* Save data of current task */
      if (_CurrentTaskNo>=0) {  /* Make sure _CurrentTaskNo is valid */
        _Save[_CurrentTaskNo].Context = GUI_Context;
        /* Load data of this task */
        GUI_Context = _Save[TaskNo].Context;
      }
      _CurrentTaskNo = TaskNo;
    }
  }
  /* Test if _EntranceCnt is in reasonable range ... Not required in release builds */
  GUI_DEBUG_ERROROUT_IF((_EntranceCnt > GUI_MAX_LOCK_NESTING), "GUITASK.c: GUI_Lock() _EntranceCnt overflow ");
}

/*********************************************************************
*
*       GUITASK_Init
*/
void GUITASK_Init(void) {
  _CurrentTaskNo =-1;   /* Invalidate */
  GUI_X_InitOS();
}


/*********************************************************************
*
*       GUITASK_CopyContext
*/
void GUITASK_CopyContext(void) {
  int i;
  for (i = 0; i < GUI_MAXTASK; i++) {
    _Save[i].Context = GUI_Context;
    _Save[i].TaskID  = 0;
  }
}


#if defined(WIN32) && defined(_DEBUG)

/*********************************************************************
*
*       GUITASK_AssertLock
*
*/
void GUITASK_AssertLock(void) {  
  if (!_EntranceCnt) {
    GUI_DEBUG_ERROROUT("GUITASK.c: GUITASK_AssertLock failed!");
  }
}

/*********************************************************************
*
*       GUITASK_AssertNoLock
*
*/
void GUITASK_AssertNoLock(void) {  
  GUI_Lock();
  if (_EntranceCnt > 1) {
    GUI_DEBUG_ERROROUT("GUITASK.c: GUITASK_AssertNoLock failed!");
  }
  GUI_Unlock();
}

#endif

#else

/*********************************************************************
*
*       Dummy Kernel routines
*
* The routines below are dummies in case configuration tells us not
* to use any kernel. In this case the routines below should
* not be required, but it can not hurt to have them. The linker
* will eliminate them anyhow.
*/
void GUI_Unlock(void);
void GUI_Unlock(void) {}
void GUI_Lock(void);
void GUI_Lock(void) {}
void GUITASK_Init(void);
void GUITASK_Init(void) {}
void GUITASK_StoreDefaultContext(void);
void GUITASK_StoreDefaultContext(void) {}

#endif

/*************************** End of file ****************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美色综合网站| 欧美日韩一二区| 天天综合网 天天综合色| 精品乱人伦一区二区三区| av中文字幕一区| 蜜臀av一区二区三区| 亚洲色图欧美在线| 精品国产乱码久久久久久图片| 一本色道久久加勒比精品| 黑人巨大精品欧美一区| 同产精品九九九| 亚洲素人一区二区| 国产校园另类小说区| 日韩欧美一级精品久久| 在线观看不卡一区| jlzzjlzz亚洲日本少妇| 蜜桃久久av一区| 亚洲v日本v欧美v久久精品| 国产精品久久久久久福利一牛影视 | 精品黑人一区二区三区久久| 欧美亚洲日本一区| 99国产精品国产精品毛片| 国产中文字幕精品| 美女www一区二区| 午夜精品福利视频网站| 一区二区三区四区中文字幕| 国产精品国产成人国产三级| 久久精品免费在线观看| 精品国产乱码久久| 日韩精品一区二区三区蜜臀| 在线成人小视频| 欧美日韩电影一区| 欧美性猛交一区二区三区精品| 91视视频在线直接观看在线看网页在线看| 国产一区不卡在线| 黑人巨大精品欧美一区| 国内欧美视频一区二区 | jlzzjlzz亚洲日本少妇| 成人av在线看| www.欧美亚洲| 97久久精品人人做人人爽50路| 成人午夜激情在线| 99久久精品情趣| 99热国产精品| 欧美伊人久久久久久午夜久久久久| 91丨porny丨首页| 色综合久久久久网| 在线精品视频一区二区三四| 欧美最猛性xxxxx直播| 欧美性大战xxxxx久久久| 欧美色图一区二区三区| 欧美日韩成人一区| 日韩欧美视频一区| 久久久久国产精品人| 欧美国产一区在线| 亚洲天堂久久久久久久| 亚洲www啪成人一区二区麻豆| 日本视频免费一区| 国产综合一区二区| 成人av网站在线观看免费| 99精品国产视频| 欧美视频在线播放| 精品女同一区二区| 中文字幕成人在线观看| 亚洲精品欧美激情| 日韩电影免费一区| 国产精品一区二区你懂的| 99在线精品视频| 欧美日韩国产小视频| 日韩欧美国产午夜精品| 国产日韩一级二级三级| 亚洲精品少妇30p| 男女激情视频一区| 成人免费视频caoporn| 欧美视频自拍偷拍| 国产午夜一区二区三区| 亚洲欧美在线aaa| 日产国产高清一区二区三区| 欧美精品久久天天躁| 日韩一区二区麻豆国产| 久久久蜜桃精品| 亚洲日韩欧美一区二区在线| 日韩国产在线观看一区| 国产精品12区| 欧美日韩小视频| 国产欧美日韩在线| 亚洲成国产人片在线观看| 久久99精品一区二区三区三区| 99精品视频中文字幕| 日韩视频一区二区三区在线播放| 国产精品人成在线观看免费| 午夜精品免费在线观看| 成人激情午夜影院| 欧美一级黄色大片| 亚洲精品国产第一综合99久久 | 久久9热精品视频| 一本久久a久久精品亚洲| www激情久久| 亚洲成人福利片| 不卡欧美aaaaa| 日韩女优电影在线观看| 亚洲欧美精品午睡沙发| 国产乱一区二区| 欧美一区二区三区视频免费播放 | 欧美精品久久天天躁| 综合欧美亚洲日本| 韩国女主播一区二区三区| 欧美日韩色综合| 亚洲欧美日韩久久| 成人免费观看男女羞羞视频| 日韩女优av电影在线观看| 亚洲国产成人av| 91麻豆国产福利精品| 国产欧美精品日韩区二区麻豆天美| 日韩精品国产精品| 欧美色图片你懂的| 亚洲一区二区免费视频| 91香蕉视频mp4| 国产精品国产精品国产专区不蜜| 国产精品一区二区在线播放| 欧美一二三区在线| 午夜精品成人在线视频| 欧美性做爰猛烈叫床潮| 亚洲美腿欧美偷拍| 99re热视频精品| 日韩美女精品在线| 成人小视频在线| 国产三级精品三级在线专区| 国产精品123区| 国产视频不卡一区| 国产黄色成人av| 国产亚洲综合av| 国产69精品久久99不卡| 久久久91精品国产一区二区精品 | 成人动漫在线一区| 国产日韩v精品一区二区| 国产伦精品一区二区三区在线观看| 日韩欧美卡一卡二| 毛片基地黄久久久久久天堂| 精品视频色一区| 视频一区二区中文字幕| 91麻豆精品国产无毒不卡在线观看| 午夜精品久久久| 日韩免费高清视频| 国内欧美视频一区二区| 国产欧美日韩卡一| 91美女片黄在线| 亚洲午夜日本在线观看| 欧美日本一区二区三区| 三级成人在线视频| 日韩一区二区三区四区| 精品无人码麻豆乱码1区2区 | 美女一区二区久久| 欧美电视剧在线观看完整版| 欧美日韩一区成人| 蜜桃av一区二区在线观看| 久久久亚洲精华液精华液精华液| 国产乱码一区二区三区| 国产精品不卡一区二区三区| 色久综合一二码| 肉丝袜脚交视频一区二区| 欧美精品一区二区三区在线播放| 国产福利一区二区三区视频| 国产精品国产成人国产三级| 欧美性猛交xxxxxx富婆| 九九视频精品免费| 国产精品久线观看视频| 欧美日韩在线播放一区| 精品一区二区在线观看| 国产免费久久精品| 在线免费亚洲电影| 另类小说欧美激情| 亚洲欧洲av在线| 91麻豆精品国产91久久久久久 | 午夜精品福利在线| 久久久不卡网国产精品二区 | 国产情人综合久久777777| 91老司机福利 在线| 奇米影视一区二区三区小说| 欧美经典一区二区| 欧美亚洲综合色| 国产成人免费在线视频| 亚洲在线成人精品| 久久久不卡网国产精品一区| 欧美视频在线观看一区二区| 国产乱国产乱300精品| 亚洲一区二区精品视频| 精品成人佐山爱一区二区| 色狠狠桃花综合| 国产一区二区三区av电影| 亚洲一区二区三区四区在线观看 | 欧美日韩国产片| 成人一区二区三区| 亚洲福中文字幕伊人影院| 国产亚洲欧美色| 欧美日韩国产高清一区二区三区| 丁香婷婷综合五月| 捆绑紧缚一区二区三区视频| 亚洲黄色小说网站| 国产精品污污网站在线观看|