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

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

?? os_mem.c

?? V2.8 uc/os移植到PC機上運行
?? C
?? 第 1 頁 / 共 2 頁
字號:

/*$PAGE*/
/*
*********************************************************************************************************
*                                 ASSIGN A NAME TO A MEMORY PARTITION
*
* Description: This function assigns a name to a memory partition.
*
* Arguments  : pmem      is a pointer to the memory partition
*
*              pname     is a pointer to an ASCII string that contains the name of the memory partition.
*
*              err       is a pointer to an error code that can contain one of the following values:
*
*                        OS_NO_ERR                  if the name was copied to 'pname'
*                        OS_MEM_INVALID_PMEM        if you passed a NULL pointer for 'pmem'
*                        OS_ERR_PNAME_NULL          You passed a NULL pointer for 'pname'
*						 OS_MEM_NAME_TOO_LONG       if the name doesn't fit in the storage area
*
* Returns    : None
*********************************************************************************************************
*/

#if OS_MEM_NAME_SIZE > 1
void  OSMemNameSet (OS_MEM *pmem, INT8U *pname, INT8U *err)
{
    INT8U      len;
#if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
    OS_CPU_SR  cpu_sr = 0;
#endif



    OS_ENTER_CRITICAL();
#if OS_ARG_CHK_EN > 0
    if (err == (INT8U *)0) {                     /* Validate 'err'                                     */
        OS_EXIT_CRITICAL();
        return;
    }
    if (pmem == (OS_MEM *)0) {                   /* Is 'pmem' a NULL pointer?                          */
        OS_EXIT_CRITICAL();                      /* Yes                                                */
        *err = OS_MEM_INVALID_PMEM;
        return;
    }
    if (pname == (INT8U *)0) {                    /* Is 'pname' a NULL pointer?                         */
        OS_EXIT_CRITICAL();                      /* Yes                                                */
        *err = OS_ERR_PNAME_NULL;
        return;
    }
#endif
    len = OS_StrLen(pname);                      /* Can we fit the string in the storage area?         */
    if (len > (OS_MEM_NAME_SIZE - 1)) {          /* No                                                 */
        OS_EXIT_CRITICAL();
        *err = OS_MEM_NAME_TOO_LONG;
        return;
    }
    (void)OS_StrCopy(pmem->OSMemName, pname);    /* Yes, copy name to the memory partition header      */
    OS_EXIT_CRITICAL();
    *err = OS_NO_ERR;
}
#endif

/*$PAGE*/
/*
*********************************************************************************************************
*                                         RELEASE A MEMORY BLOCK
*
* Description : Returns a memory block to a partition
*
* Arguments   : pmem    is a pointer to the memory partition control block
*
*               pblk    is a pointer to the memory block being released.
*
* Returns     : OS_NO_ERR            if the memory block was inserted into the partition
*               OS_MEM_FULL          if you are returning a memory block to an already FULL memory
*                                    partition (You freed more blocks than you allocated!)
*               OS_MEM_INVALID_PMEM  if you passed a NULL pointer for 'pmem'
*               OS_MEM_INVALID_PBLK  if you passed a NULL pointer for the block to release.
*********************************************************************************************************
*/

INT8U  OSMemPut (OS_MEM *pmem, void *pblk)
{
#if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
    OS_CPU_SR  cpu_sr = 0;
#endif



#if OS_ARG_CHK_EN > 0
    if (pmem == (OS_MEM *)0) {                   /* Must point to a valid memory partition             */
        return (OS_MEM_INVALID_PMEM);
    }
    if (pblk == (void *)0) {                     /* Must release a valid block                         */
        return (OS_MEM_INVALID_PBLK);
    }
#endif
    OS_ENTER_CRITICAL();
    if (pmem->OSMemNFree >= pmem->OSMemNBlks) {  /* Make sure all blocks not already returned          */
        OS_EXIT_CRITICAL();
        return (OS_MEM_FULL);
    }
    *(void **)pblk      = pmem->OSMemFreeList;   /* Insert released block into free block list         */
    pmem->OSMemFreeList = pblk;
    pmem->OSMemNFree++;                          /* One more memory block in this partition            */
    OS_EXIT_CRITICAL();
    return (OS_NO_ERR);                          /* Notify caller that memory block was released       */
}
/*$PAGE*/
/*
*********************************************************************************************************
*                                          QUERY MEMORY PARTITION
*
* Description : This function is used to determine the number of free memory blocks and the number of
*               used memory blocks from a memory partition.
*
* Arguments   : pmem        is a pointer to the memory partition control block
*
*               p_mem_data  is a pointer to a structure that will contain information about the memory
*                           partition.
*
* Returns     : OS_NO_ERR            If no errors were found.
*               OS_MEM_INVALID_PMEM  if you passed a NULL pointer for 'pmem'
*               OS_MEM_INVALID_PDATA if you passed a NULL pointer to the data recipient.
*********************************************************************************************************
*/

#if OS_MEM_QUERY_EN > 0
INT8U  OSMemQuery (OS_MEM *pmem, OS_MEM_DATA *p_mem_data)
{
#if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
    OS_CPU_SR  cpu_sr = 0;
#endif



#if OS_ARG_CHK_EN > 0
    if (pmem == (OS_MEM *)0) {                   /* Must point to a valid memory partition             */
        return (OS_MEM_INVALID_PMEM);
    }
    if (p_mem_data == (OS_MEM_DATA *)0) {        /* Must release a valid storage area for the data     */
        return (OS_MEM_INVALID_PDATA);
    }
#endif
    OS_ENTER_CRITICAL();
    p_mem_data->OSAddr     = pmem->OSMemAddr;
    p_mem_data->OSFreeList = pmem->OSMemFreeList;
    p_mem_data->OSBlkSize  = pmem->OSMemBlkSize;
    p_mem_data->OSNBlks    = pmem->OSMemNBlks;
    p_mem_data->OSNFree    = pmem->OSMemNFree;
    OS_EXIT_CRITICAL();
    p_mem_data->OSNUsed    = p_mem_data->OSNBlks - p_mem_data->OSNFree;
    return (OS_NO_ERR);
}
#endif                                           /* OS_MEM_QUERY_EN                                    */
/*$PAGE*/
/*
*********************************************************************************************************
*                                    INITIALIZE MEMORY PARTITION MANAGER
*
* Description : This function is called by uC/OS-II to initialize the memory partition manager.  Your
*               application MUST NOT call this function.
*
* Arguments   : none
*
* Returns     : none
*
* Note(s)    : This function is INTERNAL to uC/OS-II and your application should not call it.
*********************************************************************************************************
*/

void  OS_MemInit (void)
{
#if OS_MAX_MEM_PART == 1
    OS_MemClr((INT8U *)&OSMemTbl[0], sizeof(OSMemTbl));   /* Clear the memory partition table          */
    OSMemFreeList               = (OS_MEM *)&OSMemTbl[0]; /* Point to beginning of free list           */
#if OS_MEM_NAME_SIZE > 1
    OSMemFreeList->OSMemName[0] = '?';                    /* Unknown name                              */
    OSMemFreeList->OSMemName[1] = OS_ASCII_NUL;
#endif
#endif

#if OS_MAX_MEM_PART >= 2
    OS_MEM  *pmem;
    INT16U   i;


    OS_MemClr((INT8U *)&OSMemTbl[0], sizeof(OSMemTbl));   /* Clear the memory partition table          */
    pmem = &OSMemTbl[0];                                  /* Point to memory control block (MCB)       */
    for (i = 0; i < (OS_MAX_MEM_PART - 1); i++) {         /* Init. list of free memory partitions      */
        pmem->OSMemFreeList = (void *)&OSMemTbl[i+1];     /* Chain list of free partitions             */
#if OS_MEM_NAME_SIZE > 1
        pmem->OSMemName[0]  = '?';                        /* Unknown name                              */
        pmem->OSMemName[1]  = OS_ASCII_NUL;
#endif
        pmem++;
    }
    pmem->OSMemFreeList = (void *)0;                      /* Initialize last node                      */
#if OS_MEM_NAME_SIZE > 1
    pmem->OSMemName[0]  = '?';                            /* Unknown name                              */
    pmem->OSMemName[1]  = OS_ASCII_NUL;
#endif

    OSMemFreeList       = &OSMemTbl[0];                   /* Point to beginning of free list           */
#endif
}
#endif                                                    /* OS_MEM_EN                                 */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美色国产精品| 激情欧美一区二区| 中文字幕巨乱亚洲| 久久久久久久久久电影| 精品免费日韩av| 日韩欧美三级在线| 日韩视频免费观看高清完整版在线观看 | 首页国产丝袜综合| 亚洲一区二区三区四区五区黄| 亚洲少妇中出一区| 亚洲欧洲制服丝袜| 午夜视频一区在线观看| 看片的网站亚洲| 国产一区二区在线视频| heyzo一本久久综合| 91在线国内视频| 欧美午夜理伦三级在线观看| 7777女厕盗摄久久久| 久久久久久久网| 亚洲激情五月婷婷| 热久久免费视频| 高清shemale亚洲人妖| 欧美最新大片在线看 | 久久爱www久久做| 国产成a人亚洲| 精品视频色一区| 欧美mv日韩mv国产网站app| 欧美激情综合五月色丁香| 亚洲免费观看高清完整版在线 | 日韩理论片中文av| 视频一区免费在线观看| 国产精品88888| 欧美亚洲精品一区| 久久免费电影网| 亚洲不卡av一区二区三区| 捆绑调教美女网站视频一区| 色综合激情五月| 久久久久久毛片| 日韩精品一二三区| 一本大道久久精品懂色aⅴ| 7777精品伊人久久久大香线蕉完整版 | 97成人超碰视| 日韩色在线观看| 亚洲与欧洲av电影| 丁香天五香天堂综合| 欧美一区二区私人影院日本| 国产精品电影院| 国产剧情一区在线| 日韩一级完整毛片| 亚洲国产精品影院| 成人免费va视频| 久久久久9999亚洲精品| 日韩高清在线电影| 欧洲精品在线观看| 亚洲欧洲精品成人久久奇米网| 久久精品国产免费| 56国语精品自产拍在线观看| 一区二区三区电影在线播| 岛国精品一区二区| 久久精品综合网| 韩国中文字幕2020精品| 日韩三级在线观看| 日本成人中文字幕在线视频| 99re视频精品| 亚洲人吸女人奶水| 成人h精品动漫一区二区三区| 欧美精品一区二区在线观看| 日韩精品亚洲专区| 欧美一区二区三区婷婷月色| 亚洲国产精品综合小说图片区| 色婷婷精品久久二区二区蜜臂av | 国产传媒欧美日韩成人| 精品日韩一区二区三区| 日韩av不卡一区二区| 欧美精品日韩综合在线| 午夜成人在线视频| 欧美一区二区三区免费大片| 美女任你摸久久| 日韩精品一区二区三区老鸭窝| 蜜臀国产一区二区三区在线播放| 日韩欧美成人激情| 国产主播一区二区三区| 国产欧美一区视频| hitomi一区二区三区精品| 国产精品久久久久9999吃药| av在线播放成人| 亚洲一卡二卡三卡四卡| 欧美日韩极品在线观看一区| 男女男精品网站| 国产视频一区在线观看| 91在线无精精品入口| 亚洲综合一二三区| 制服丝袜激情欧洲亚洲| 黄色日韩网站视频| 亚洲免费观看在线视频| 欧美日韩高清不卡| 久久国产日韩欧美精品| 国产精品乱子久久久久| 色婷婷综合久久久中文字幕| 天堂成人国产精品一区| 久久久久国产精品免费免费搜索| 99v久久综合狠狠综合久久| 亚洲国产欧美日韩另类综合| 欧美成人a视频| 99国产精品视频免费观看| 日韩精品亚洲一区二区三区免费| 久久精品夜色噜噜亚洲aⅴ| 色先锋aa成人| 国内不卡的二区三区中文字幕 | 亚洲一区二区黄色| 久久久久久久久久美女| 欧美亚洲国产一区二区三区va| 免费在线观看精品| 亚洲欧洲另类国产综合| 日韩精品一区二区三区在线| 91在线视频网址| 麻豆传媒一区二区三区| 亚洲欧洲三级电影| 日韩精品一区二区三区老鸭窝| 一本一道久久a久久精品| 九九精品一区二区| 亚洲成a人片在线不卡一二三区 | 日本久久一区二区| 激情综合亚洲精品| 图片区小说区国产精品视频| 国产精品成人免费在线| 精品国产乱码91久久久久久网站| 色婷婷久久99综合精品jk白丝| 国产福利一区二区三区在线视频| 亚洲 欧美综合在线网络| 亚洲丝袜另类动漫二区| 国产人久久人人人人爽| 欧美不卡在线视频| 欧美日韩精品一区二区| 色婷婷综合久久久久中文一区二区| 国产又黄又大久久| 久久国内精品自在自线400部| 偷拍一区二区三区四区| 亚洲亚洲精品在线观看| 一区二区三区欧美激情| 欧美日韩激情在线| 欧美日韩视频在线第一区| 91麻豆国产福利在线观看| 国产成人亚洲综合a∨婷婷| 国内精品写真在线观看| 黄一区二区三区| 国内成人精品2018免费看| 美女爽到高潮91| 久久精品av麻豆的观看方式| 蜜臀av国产精品久久久久| 秋霞国产午夜精品免费视频| 日本成人中文字幕| 精品一区二区久久| 国产一区二区三区在线观看免费 | 日韩国产欧美一区二区三区| 亚洲成在人线免费| 五月激情六月综合| 麻豆精品在线视频| 精品夜夜嗨av一区二区三区| 九九视频精品免费| 成人在线一区二区三区| 成人精品鲁一区一区二区| 波多野结衣亚洲| 色婷婷av一区二区三区大白胸 | 国产在线不卡一卡二卡三卡四卡| 国产综合久久久久影院| 成人小视频免费在线观看| 91视频观看免费| 欧美日韩在线播放一区| 日韩一区二区三区高清免费看看| 精品1区2区在线观看| 欧美韩日一区二区三区| 一区二区三区欧美激情| 蜜桃一区二区三区四区| 懂色av一区二区在线播放| 色一情一乱一乱一91av| 制服丝袜中文字幕亚洲| 国产亲近乱来精品视频| 亚洲一区二区三区三| 免费成人在线影院| 95精品视频在线| 欧美一级专区免费大片| 国产精品每日更新在线播放网址| 亚洲一区二区视频在线观看| 激情图区综合网| 欧美在线一二三四区| 久久女同精品一区二区| 洋洋av久久久久久久一区| 韩国女主播一区| 精品视频123区在线观看| 国产婷婷色一区二区三区| 亚洲r级在线视频| 国产成人免费高清| 91精品国产综合久久福利| 国产精品美女久久久久av爽李琼| 人妖欧美一区二区| 色综合视频一区二区三区高清| 欧美va天堂va视频va在线| 亚洲高清视频中文字幕| 国产高清久久久久|