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

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

?? os_mem.c

?? avr ucos 代碼 測試環境:source insight WINAVR 4個進程
?? C
?? 第 1 頁 / 共 2 頁
字號:
*                                         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.
*********************************************************************************************************
*/
/*
*********************************************************************************************************
                                                        釋放一個內存塊
描述:返回一個內存塊到分割區中
參數;pmem:指向內存分割控制塊的指針
                pblk:指向將被釋放內存塊的指針
 返回:OS_NO_ERR:如果內存塊成功插入到分割區
                  OS_MEM_FULL:如果返回內存塊到一個已滿的內存分割區中
                  OS_MEM_INVALID_PMEM:如果你傳遞一個空指針到“pmem”
                  OS_MEM_INVALID_PBLK:如果傳一個空指針到將釋放的塊
備注:此函數并不知道內存塊是屬于哪個分區的,也就是說,如果用戶程序
從一個包含32B內存塊的分區中分配了一個內存塊,用完后千萬不要將一個包含
120B內存塊給返回來,因為如果下次一個程序申請120B內存時,只會得到32B
*********************************************************************************************************
*/



INT8U  OSMemPut (OS_MEM  *pmem, void *pblk)
{
#if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
    OS_CPU_SR  cpu_sr;
#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
*
*               pdata   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 for the block to release.
*********************************************************************************************************
*/
/*
*********************************************************************************************************
                                                查詢一個內存分區狀態
描述:查詢一億內存分割區的空內存塊和已用內存塊
參數:pmem:指向一個內存分割控制塊的指針
                 pdata:    將要包含內存分割區信息的結構指針
返回:OS_NO_ERR:沒有發現錯誤
                 OS_MEM_INVALID_PMEM :如果傳送一個空指針給‘pmem’
                 OS_MEM_INVALID_PDATA:如果傳一個空指針到將釋放的塊
*********************************************************************************************************
*/



#if OS_MEM_QUERY_EN > 0
INT8U  OSMemQuery (OS_MEM *pmem, OS_MEM_DATA *pdata)
{
#if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
    OS_CPU_SR  cpu_sr;
#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 (pdata == (OS_MEM_DATA *)0) {             /* Must release a valid storage area for the data     */
        return (OS_MEM_INVALID_PDATA);//必須為數據釋放一個可行的存儲空間
    }//OS_MEM_DATA中存放了特定內存分區中內存塊的大小,可用內存塊數目和
    //已用內存塊數目等信息。
#endif
    OS_ENTER_CRITICAL();
    pdata->OSAddr     = pmem->OSMemAddr;//將指定內存分區的信息全部復制到指定變量的
    pdata->OSFreeList = pmem->OSMemFreeList;//相應區域,此過程中,中斷被關,防止在此過程中
    pdata->OSBlkSize  = pmem->OSMemBlkSize;//數據被改
    pdata->OSNBlks    = pmem->OSMemNBlks;
    pdata->OSNFree    = pmem->OSMemNFree;
    OS_EXIT_CRITICAL();
    pdata->OSNUsed    = pdata->OSNBlks - pdata->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.
*********************************************************************************************************
*/
/*
*********************************************************************************************************
                                                            初始化內存分割區管理
描述:ucos內部調用,其它應用程序不能調用
參數:無
返回:元
備注:ucos內部調用,其它應用程序不能調用
*********************************************************************************************************
*/



void  OS_MemInit (void)
{
#if OS_MAX_MEM_PART == 1//分割區為一塊
    OSMemFreeList                = (OS_MEM *)&OSMemTbl[0]; /* Point to beginning of free list          */
//指向空閑列表開始的指針
    OSMemFreeList->OSMemFreeList = (void *)0;              /* Initialize last node                     */
//初始化最后結點?什么意思?它是指向空內存塊指針的
    OSMemFreeList->OSMemAddr     = (void *)0;              /* Store start address of memory partition  */
//保存內存分割區的開始地址
    OSMemFreeList->OSMemNFree    = 0;                      /* No free blocks                           */
//為零表明沒有空塊
    OSMemFreeList->OSMemNBlks    = 0;                      /* No blocks                                */
//分割區中沒有內存塊
    OSMemFreeList->OSMemBlkSize  = 0;                      /* Zero size                                */
//大小為零
#endif

#if OS_MAX_MEM_PART >= 2//如果分割區有兩塊以上
    OS_MEM  *pmem;//內存結構
    INT16U   i;


    pmem = (OS_MEM *)&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                 */
		//內存管理空間鏈表
        pmem->OSMemAddr     = (void *)0;              /* Store start address of memory partition       */
		//內存分割區存儲開始地址
        pmem->OSMemNFree    = 0;                      /* No free blocks                                */
		//無空閑塊
        pmem->OSMemNBlks    = 0;                      /* No blocks                                     */
		//無塊
        pmem->OSMemBlkSize  = 0;                      /* Zero size                                     */
		//大小為零
        pmem++;//內存控制塊加一?
    }
    pmem->OSMemFreeList = (void *)0;                  /* Initialize last node                          */
//初始化最后一個結點,空余內存塊列表指針
    pmem->OSMemAddr     = (void *)0;                  /* Store start address of memory partition       */
//開始地址
    pmem->OSMemNFree    = 0;                          /* No free blocks                                */
    pmem->OSMemNBlks    = 0;                          /* No blocks                                     */
    pmem->OSMemBlkSize  = 0;                          /* Zero size                                     */

    OSMemFreeList       = (OS_MEM *)&OSMemTbl[0];     /* Point to beginning of free list               */
	//空表開始指針
#endif
}
#endif                                           /* OS_MEM_EN                                          */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久影院色老大| 国产欧美一二三区| 国产精品888| 偷偷要91色婷婷| 国产精品女同一区二区三区| 在线观看91av| 91免费视频网址| 国产精品18久久久久久久网站| 亚洲一区二区三区三| www国产成人免费观看视频 深夜成人网| 91丝袜呻吟高潮美腿白嫩在线观看| 精品一区二区三区免费观看| 一个色在线综合| 国产精品视频一二三| 久久众筹精品私拍模特| 91精品中文字幕一区二区三区| 99国产麻豆精品| 国产精品一区二区三区乱码| 日韩av一区二| 亚洲第四色夜色| 亚洲精品免费看| 国产精品久久久久久久久晋中| 精品国产欧美一区二区| 欧美老年两性高潮| 欧美系列亚洲系列| av中文字幕一区| 91成人看片片| 91视频精品在这里| 成人精品gif动图一区| 国产精品 日产精品 欧美精品| 麻豆精品一二三| 久久黄色级2电影| 日本视频一区二区三区| 天天影视色香欲综合网老头| 亚洲一级二级在线| 亚洲午夜影视影院在线观看| 亚洲精品高清视频在线观看| 亚洲精品欧美二区三区中文字幕| 亚洲免费观看在线视频| 日韩毛片视频在线看| 亚洲欧美一区二区三区孕妇| 综合网在线视频| 亚洲另类在线一区| 亚洲一区二区av电影| 午夜免费久久看| 日本视频在线一区| 国产又黄又大久久| 丁香六月综合激情| 97久久精品人人爽人人爽蜜臀| 99久久免费精品高清特色大片| 99久久久久久99| 欧美视频中文一区二区三区在线观看| 色噜噜狠狠一区二区三区果冻| 色婷婷综合久久久久中文一区二区| 97精品视频在线观看自产线路二| 91日韩在线专区| 欧美视频在线观看一区二区| 欧美日韩的一区二区| 日韩欧美一级二级| 国产精品日日摸夜夜摸av| 日韩一区有码在线| 亚洲国产精品自拍| 青青草视频一区| 国产成人在线看| 色综合天天性综合| 欧美日韩三级一区二区| 日韩女优电影在线观看| 国产农村妇女精品| 亚洲成人免费视频| 国产精选一区二区三区| 99re免费视频精品全部| 欧美美女一区二区三区| 久久理论电影网| 亚洲精品视频在线观看免费| 日本视频在线一区| 99久久精品国产导航| 欧美肥妇bbw| 国产精品久久久久影视| 亚洲bt欧美bt精品777| 国产九色精品成人porny| 91美女在线观看| 欧美电影免费观看完整版| 国产精品灌醉下药二区| 日韩av电影免费观看高清完整版在线观看| 韩国精品在线观看| 一本到一区二区三区| 欧美精品一区二区久久婷婷 | 日韩美女视频在线| 中文字幕一区二区三区乱码在线| 日产精品久久久久久久性色| 成人黄色免费短视频| 91精品国产日韩91久久久久久| 国产亚洲精久久久久久| 亚洲一区二区欧美日韩| 成人一区在线看| 日韩三级精品电影久久久 | 91精品国产综合久久精品图片 | 波多野结衣中文字幕一区二区三区 | 欧美v亚洲v综合ⅴ国产v| 亚洲狠狠丁香婷婷综合久久久| 韩国成人精品a∨在线观看| 欧美性一级生活| 国产欧美日本一区视频| 麻豆国产精品官网| 在线视频观看一区| 国产精品久久久久久久久搜平片| 久久精品久久99精品久久| 欧洲生活片亚洲生活在线观看| 欧美国产成人精品| 极品美女销魂一区二区三区| 在线电影欧美成精品| 亚洲综合久久久久| 99精品欧美一区| 国产视频一区不卡| 精品一区二区三区视频| 欧美一级片在线观看| 亚洲韩国一区二区三区| 91亚洲精华国产精华精华液| 久久精子c满五个校花| 久久国产精品72免费观看| 欧美一区二区三区在线| 亚洲午夜久久久| 91美女视频网站| 亚洲另类在线一区| 色综合色狠狠天天综合色| 中文字幕中文在线不卡住| 国产精品66部| 久久久久久免费| 国产一区二区在线影院| 精品久久久久久综合日本欧美 | 午夜精品影院在线观看| 欧美自拍丝袜亚洲| 亚洲精品中文字幕乱码三区 | 欧美一区二区三区成人| 欧美96一区二区免费视频| 欧美一区二区三区电影| 久久成人精品无人区| 久久影院电视剧免费观看| 韩国v欧美v日本v亚洲v| 久久中文字幕电影| 国产成人免费xxxxxxxx| 国产精品久久久久四虎| 色综合一区二区三区| 一区二区三区四区亚洲| 色视频一区二区| 亚洲aⅴ怡春院| 欧美一区二区三区爱爱| 国产做a爰片久久毛片| 国产日韩欧美一区二区三区综合| 国产91精品入口| 亚洲欧美色图小说| 欧美日韩国产123区| 日韩av中文在线观看| 久久综合九色综合欧美就去吻| 国产精品一区二区在线观看网站| 国产精品网站在线播放| 91美女片黄在线| 天天做天天摸天天爽国产一区| 久草中文综合在线| 国产在线精品一区二区| 91精品欧美久久久久久动漫| 中文字幕精品综合| 一本色道**综合亚洲精品蜜桃冫 | 亚洲一区二区精品3399| 欧美一区二区免费视频| 国产精品综合av一区二区国产馆| 欧美精品久久99久久在免费线 | 国产一区二区三区不卡在线观看| 亚洲视频一二三区| 久久美女艺术照精彩视频福利播放| 欧美视频精品在线| av一本久道久久综合久久鬼色| 日本va欧美va精品| 一区二区三区不卡在线观看 | 国产日本欧美一区二区| 91精品国产综合久久精品麻豆 | 精品国精品国产| 欧美三级视频在线播放| 91丨九色丨蝌蚪富婆spa| 国产精品99久久久久久有的能看 | 亚洲福中文字幕伊人影院| 中文字幕av一区二区三区高| 日韩一区二区三区免费观看| 欧美影视一区在线| www.成人在线| 成人午夜看片网址| 国内精品写真在线观看| 奇米777欧美一区二区| 亚洲午夜电影在线观看| 亚洲免费在线看| 国产精品久久久99| 欧美激情在线一区二区| 久久色.com| 久久日韩精品一区二区五区| 欧美一区二区视频免费观看| 欧美日韩电影一区| 欧美日本一区二区在线观看| 欧美午夜片在线观看| 91麻豆swag| 在线亚洲+欧美+日本专区|