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

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

?? guialloc.c

?? 這套代碼已經成功一直到S3C44B0X開發板上
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
*********************************************************************************************************
*                                                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        : GUIAlloc.C
Purpose     : Dynamic memory management
----------------------------------------------------------------------
*/

#include <stddef.h>           /* needed for definition of NULL */
#include <string.h>           /* for memcpy, memset */

#include "GUI_Protected.h"
#include "GUIDebug.h"

/*********************************************************************
*
*       Internal memory management
*
**********************************************************************
*/

#ifndef GUI_ALLOC_ALLOC

#if GUI_ALLOC_SIZE==0
  #error GUI_ALLOC_SIZE needs to be > 0 when using this module
#endif

/*********************************************************************
*
*       Defines, config defaults
*
**********************************************************************
*/

/* Permit automatic defragmentation when necessary */
#ifndef GUI_ALLOC_AUTDEFRAG
  #define GUI_ALLOC_AUTDEFRAG 1
#endif

#ifndef GUI_BLOCK_ALIGN        /* 2 means 4 bytes, 1 means 2 bytes      */
  #define GUI_BLOCK_ALIGN 2    /* 1 can be used on 16-bit CPUs and CPUs */
#endif                         /* which do not require aligned 32-bit   */
                               /* values (such as x86)                  */ 

#ifndef GUI_MAXBLOCKS
  #define GUI_MAXBLOCKS (2 + GUI_ALLOC_SIZE / 32)
#endif

#ifndef GUI_ALLOC_LOCATION
  #define GUI_ALLOC_LOCATION
#endif

#ifndef GUI_MEM_ALLOC          /* Allows us in some systems to place the GUI memory */
  #define GUI_MEM_ALLOC        /* in a different memory space ... eg "__far"        */
#endif

/*********************************************************************
*
*       Defines
*
**********************************************************************
*/

#define Min(v0,v1) ((v0>v1) ? v1 : v0)
#define Max(v0,v1) ((v0>v1) ? v0 : v1)
#define ASSIGN_IF_LESS(v0,v1) if (v1<v0) v0=v1
#define HMEM2PTR(hMem) (void*)&GUI_Heap.abHeap[aBlock[hMem].Off]

#if GUI_MAXBLOCKS >= 256
  #define HANDLE U16
#else
  #define HANDLE U8
#endif

/*********************************************************************
*
*       Types
*
**********************************************************************
*/

typedef union {
  int aintHeap[GUI_ALLOC_SIZE / 4];   /* required for proper alignement */
  U8  abHeap[GUI_ALLOC_SIZE];
} GUI_HEAP;

typedef struct {
  GUI_ALLOC_DATATYPE Off;       /* Offset of memory area          */
  GUI_ALLOC_DATATYPE Size;      /* usable size of allocated block */
  HANDLE Next;         /* next handle in linked list     */
  HANDLE Prev;
} tBlock;

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

GUI_MEM_ALLOC GUI_HEAP GUI_Heap GUI_ALLOC_LOCATION;         /* Public for debugging only */

static tBlock aBlock[GUI_MAXBLOCKS];

struct {
  int       NumUsedBlocks, NumFreeBlocks, NumFreeBlocksMin; /* For statistical purposes only */
  GUI_ALLOC_DATATYPE NumUsedBytes,  NumFreeBytes,  NumFreeBytesMin;
} GUI_ALLOC;

static char   IsInitialized =0;

/*********************************************************************
*
*       Static code
*
**********************************************************************
*/
/*********************************************************************
*
*       _Size2LegalSize
*
* Return value:
*   Legal allocation size
*/
static GUI_ALLOC_DATATYPE _Size2LegalSize(GUI_ALLOC_DATATYPE size) {
  return (size + ((1 << GUI_BLOCK_ALIGN) - 1)) & ~((1 << GUI_BLOCK_ALIGN) - 1);
}
  
/*********************************************************************
*
*       _GetSize
*/
static GUI_ALLOC_DATATYPE _GetSize(GUI_HMEM  hMem) {
  return aBlock[hMem].Size;
}

/*********************************************************************
*
*       _Free
*/
static void _Free(GUI_HMEM hMem) {
  GUI_ALLOC_DATATYPE Size;
  GUI_DEBUG_LOG1("\nGUI_ALLOC_Free(%d)", hMem);
  /* Do some error checking ... */
  #if GUI_DEBUG_LEVEL>0
    /* Block not allocated ? */
    if (aBlock[hMem].Size == 0) {
      GUI_DEBUG_ERROROUT("GUI_ALLOC_Free(): Invalid hMem");
      return;
    }
  #endif
  Size = aBlock[hMem].Size;
  #ifdef WIN32
    GUI_MEMSET(&GUI_Heap.abHeap[aBlock[hMem].Off], 0xcc, Size);
  #endif
  GUI_ALLOC.NumFreeBytes += Size;
  GUI_ALLOC.NumUsedBytes -= Size;
  aBlock[hMem].Size = 0;
  {
    int Next = aBlock[hMem].Next;
    int Prev = aBlock[hMem].Prev;
    aBlock[Prev].Next = Next;
    if (Next) {
      aBlock[Next].Prev = Prev;
    }
  }  
  GUI_ALLOC.NumFreeBlocks++;
  GUI_ALLOC.NumUsedBlocks--;
}

/*********************************************************************
*
*       _FindFreeHandle
*
* Return value:
*   Free handle
*/
static GUI_HMEM _FindFreeHandle(void) {
  int i;
  for (i=1; i< GUI_MAXBLOCKS; i++) {
    if (aBlock[i].Size ==0)
	  return i;
  }
  GUI_DEBUG_ERROROUT1("Insufficient memory handles configured (GUI_MAXBLOCKS == %d (See GUIConf.h))", GUI_MAXBLOCKS);
  return GUI_HMEM_NULL;
}

/*********************************************************************
*
*       _FindHole
*
* Return value:
*   Offset to the memory hole (if available)
*   -1 if not available
*/
static GUI_HMEM _FindHole(GUI_ALLOC_DATATYPE Size) {
  int i, iNext;
  for (i=0; (iNext = aBlock[i].Next) != 0; i = iNext) {
    int NumFreeBytes = aBlock[iNext].Off- (aBlock[i].Off+aBlock[i].Size);
    if (NumFreeBytes>=Size) {
      return i;
    }
  }
  /* Check last block */
  if (GUI_ALLOC_SIZE - (aBlock[i].Off+aBlock[i].Size) >= Size) {
    return i;
  }
  return -1;
}

/*********************************************************************
*
*       _CreateHole
*
* Return value:
*   Offset to the memory hole (if available)
*   -1 if not available
*/
static GUI_HMEM _CreateHole(GUI_ALLOC_DATATYPE Size) {
  int i, iNext;
  int r = -1;
  for (i=0; (iNext =aBlock[i].Next) !=0; i= iNext) {
    GUI_ALLOC_DATATYPE NumFreeBytes = aBlock[iNext].Off- (aBlock[i].Off+aBlock[i].Size);
    if (NumFreeBytes < Size) {
      GUI_ALLOC_DATATYPE NumBytesBeforeBlock = aBlock[iNext].Off - (aBlock[i].Off+aBlock[i].Size);
      if (NumBytesBeforeBlock) {
        U8* pData = &GUI_Heap.abHeap[aBlock[iNext].Off];
        memmove(pData-NumBytesBeforeBlock, pData, aBlock[iNext].Size);
        aBlock[iNext].Off -=NumBytesBeforeBlock;
      }
    }
  }
  /* Check last block */
  if (GUI_ALLOC_SIZE - (aBlock[i].Off+aBlock[i].Size) >= Size) {
    r = i;
  }
  return r;
}

/*********************************************************************
*
*       _CheckInit
*/
static void _CheckInit(void) {
  if (!IsInitialized) {
    GUI_ALLOC_Init();
  }
}

/*********************************************************************
*
*       _Alloc
*/
static GUI_HMEM _Alloc(GUI_ALLOC_DATATYPE size) {
  GUI_HMEM hMemNew, hMemIns;
  _CheckInit();
  size = _Size2LegalSize(size);
  /* Check if memory is available at all ...*/
  if (size > GUI_ALLOC.NumFreeBytes) {
    GUI_DEBUG_WARN1("GUI_ALLOC_Alloc: Insufficient memory configured (Trying to alloc % bytes)", size);
    return 0;
  }
  /* Locate free handle */
  if ((hMemNew = _FindFreeHandle()) == 0)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合久久久久网| 综合久久久久综合| 亚洲男女一区二区三区| 奇米一区二区三区av| 色就色 综合激情| 久久精品视频在线看| 亚洲高清久久久| 99久久国产综合精品色伊| 日韩视频在线你懂得| 亚洲激情校园春色| 丰满亚洲少妇av| 久久综合久色欧美综合狠狠| 亚洲一区二区三区中文字幕 | 久久久www免费人成精品| 亚洲日本乱码在线观看| 国产高清视频一区| 精品国产区一区| 久久er精品视频| 欧美一区午夜精品| 天天免费综合色| 欧美日韩久久久| 亚洲成人黄色影院| 欧美在线免费观看亚洲| 亚洲欧美日韩精品久久久久| 成人激情午夜影院| 国产清纯美女被跳蛋高潮一区二区久久w | 欧美一区二区三区日韩| 亚洲一区二区精品视频| 色老头久久综合| 亚洲综合色区另类av| 日本乱人伦一区| 伊人一区二区三区| 色网站国产精品| 亚洲一区电影777| 欧洲精品一区二区| 五月综合激情网| 欧美肥妇毛茸茸| 久久91精品国产91久久小草| 日韩欧美一区二区免费| 精品亚洲porn| 欧美国产一区视频在线观看| 成人黄动漫网站免费app| 中文字幕高清不卡| 91精彩视频在线观看| 午夜伦理一区二区| 精品美女在线播放| 不卡电影一区二区三区| 亚洲精品中文在线观看| 欧美日韩高清一区二区| 麻豆高清免费国产一区| 中文字幕精品在线不卡| 一本大道久久a久久综合婷婷 | 欧美aaaaaa午夜精品| 欧美一区二区免费视频| 国产精品一二三区| 自拍av一区二区三区| 欧美日韩国产首页在线观看| 麻豆国产欧美一区二区三区| 久久久久一区二区三区四区| 色综合久久天天| 蜜桃精品视频在线观看| 国产日韩欧美精品电影三级在线 | 亚洲精品国产精品乱码不99| 欧美美女黄视频| 国产精品一二二区| 亚洲在线观看免费视频| 精品国产电影一区二区| 91亚洲大成网污www| 秋霞成人午夜伦在线观看| 久久精品一区二区三区不卡| 色猫猫国产区一区二在线视频| 天堂成人免费av电影一区| 国产欧美精品区一区二区三区 | 大胆亚洲人体视频| 一区二区三区免费网站| 欧美一二三区在线观看| 色视频成人在线观看免| 激情综合色播激情啊| 夜夜嗨av一区二区三区网页| 久久综合九色综合97婷婷| 91久久久免费一区二区| 国产成人精品亚洲午夜麻豆| 亚洲成人精品在线观看| 中文字幕欧美日韩一区| 91精品国产综合久久香蕉的特点| 成人av免费在线播放| 国产在线视视频有精品| 天堂va蜜桃一区二区三区漫画版| 亚洲欧洲美洲综合色网| 久久久亚洲综合| 日韩一级免费观看| 欧美午夜免费电影| 91丨九色丨尤物| 成人妖精视频yjsp地址| 精品亚洲aⅴ乱码一区二区三区| 亚洲国产精品久久久久婷婷884| 国产精品三级av| 久久久久成人黄色影片| 日韩午夜在线影院| 欧美日韩一级二级三级| 91麻豆福利精品推荐| 成人免费毛片片v| 国产一区999| 国产原创一区二区| 国产在线国偷精品产拍免费yy| 秋霞午夜鲁丝一区二区老狼| 性感美女久久精品| 午夜精品影院在线观看| 亚洲成人中文在线| 亚洲电影第三页| 亚洲电影视频在线| 视频一区视频二区在线观看| 亚洲成人黄色小说| 天堂影院一区二区| 蜜臀久久久99精品久久久久久| 日本成人在线一区| 麻豆精品久久久| 国产盗摄一区二区| 成人18视频在线播放| av网站免费线看精品| 99久久精品费精品国产一区二区| 91蜜桃传媒精品久久久一区二区| 本田岬高潮一区二区三区| 不卡的av电影在线观看| 91丨九色丨蝌蚪富婆spa| 欧美无人高清视频在线观看| 欧美日韩精品一区二区三区蜜桃| 欧美日韩一区三区| 欧美大片免费久久精品三p| 久久免费国产精品| 亚洲欧洲日韩av| 日韩成人精品在线观看| 国产一区二区0| 91香蕉视频黄| 欧美日韩国产三级| 久久精品在线观看| 亚洲一区二区在线免费观看视频| 午夜精品福利在线| 粉嫩高潮美女一区二区三区| www.欧美.com| 56国语精品自产拍在线观看| 久久综合丝袜日本网| 亚洲欧洲99久久| 日韩国产在线观看| 国产成人av电影在线观看| 91福利区一区二区三区| 欧美一级久久久| 国产精品每日更新| 亚洲成人手机在线| 国产盗摄一区二区| 8x8x8国产精品| 日本一区二区在线不卡| 亚洲777理论| 99久久综合国产精品| 日韩午夜激情视频| 一区二区三区中文字幕精品精品| 久久99精品久久只有精品| 色妞www精品视频| 久久久久久久久久久电影| 亚洲制服丝袜一区| 成人午夜av电影| 欧美一级一级性生活免费录像| 中文字幕第一区| 另类小说欧美激情| 欧美最猛性xxxxx直播| 国产欧美日韩在线观看| 日韩在线一区二区三区| 91在线视频观看| 久久精品免视看| 奇米影视在线99精品| 色哟哟国产精品| 中文av字幕一区| 激情综合网av| 欧美一级艳片视频免费观看| 曰韩精品一区二区| 99久久精品国产精品久久| 久久亚洲精品小早川怜子| 亚洲第一久久影院| 色综合婷婷久久| 欧美高清一级片在线观看| 狠狠色丁香婷综合久久| 欧美精品久久久久久久久老牛影院| 中文字幕一区在线观看| 国产伦精品一区二区三区免费| 日韩一卡二卡三卡| 天堂久久久久va久久久久| 欧美性极品少妇| 亚洲成人久久影院| 欧美日韩一区精品| 午夜精品国产更新| 欧美高清hd18日本| 日韩精品电影一区亚洲| 欧美日韩免费观看一区二区三区 | 国产精品99久久久久久久女警| 91精品国产综合久久福利 | 日韩欧美中文一区| 免费观看成人av| 日韩视频中午一区| 极品美女销魂一区二区三区免费| 精品日韩在线观看|