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

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

?? ring.c

?? 新一代基于事件的嵌入式操作系統dyos在三星的s3c44b0的arm芯片上的完整移植代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
//----------------------------------------------------
//Copyright (C), 2004-2009,  lst.
//版權所有 (C), 2004-2009,   lst.
//所屬模塊: 緩沖區
//作者:lst
//版本:V1.0.0
//文件描述: 提供環形緩沖區服務
//其他說明:
//修訂歷史:
//    2. ...
//    1. 日期:
//       作者:
//       新版本號:
//       修改說明:
//------------------------------------------------------
#include "inc_os.h"
#include    <string.h>

//----建立環形緩沖區----------------------------------------------------------
//功能: 建立環形緩沖區并初始化,使用這個函數之前,用戶應該定義緩沖區內存塊和
//      緩沖區數據結構。
//參數: ring,目標環形緩沖區結構指針
//      buf,緩沖區起始地址
//      len,緩沖區長度.單位是字節數
//返回: 無
//-----------------------------------------------------------------------------
void ring_init(struct ring_buf *ring, uint8_t *buf, uint32_t len)
{
    ring->buf = buf;
    ring->max_len = len;
    ring->offset_write = 0;
    ring->offset_read  = 0;
    ring->len = 0;
}

//----檢查緩沖區容量-----------------------------------------------------------
//功能: 返回緩沖區容量
//參數: ring,目標線性緩沖區結構指針
//返回: 緩沖區容量,就是調用ring_init時使用的len參數。
//-----------------------------------------------------------------------------
uint32_t ring_capacity(struct ring_buf *ring)
{
    return ring->max_len;
}

//----返回字節池地址-----------------------------------------------------------
//功能: 查詢緩沖區的字節池地址,這個地址是用戶調用ring_init時使用的緩沖區地址。
//參數: ring,目標線性緩沖區指針.
//返回: 環形緩沖區的字節池地址
//說明: 有兩種情況會產生獲得緩沖區地址的需求
//      1、要釋放緩沖區內存,應用程序可以使用調用ring_init時使用的指針,如果該
//         指針丟失,可用本函數取回該指針。
//      2、用戶想自己動手訪問該緩沖區,這不是一個明智的選擇,有破壞模塊獨立性
//         的嫌疑,這時候,使用者應該完全明白自己在干什么!
//-----------------------------------------------------------------------------
uint8_t *ring_get_buf(struct ring_buf *ring)
{
    return ring->buf;
}

//----環形緩沖區寫入-----------------------------------------------------------
//功能: 環形緩沖區寫入若干個字節,返回實際寫入的數據量,并移動寫指針,如果環形
//      緩沖區沒有足夠的空間,按實際剩余空間寫入
//參數: ring,目標環形緩沖區結構指針
//      buffer,待寫入的數據指針
//      len,待寫入的數據長度.單位是字節數
//返回: 實際寫入的字節數,如果緩沖區有足夠的空間,=len
//-----------------------------------------------------------------------------
uint32_t    ring_write(struct ring_buf *ring,uint8_t *buffer,uint32_t len)
{
    uint32_t    wr_len;
    uint32_t    partial;
    wr_len = ring->max_len - ring->len;
    if(wr_len == 0)
        return 0;
    if(wr_len > len)
        wr_len = len;
    if((ring->offset_write + wr_len) > ring->max_len)
    {   //數據發生環繞
        partial = ring->max_len - ring->offset_write;
        memcpy(&ring->buf[ring->offset_write],buffer,partial);    //寫第一部分
        memcpy( ring->buf,&buffer[partial],wr_len - partial);    //寫第二部分
        ring->offset_write = wr_len - partial;
    }else
    {   //不發生環繞
        memcpy( &ring->buf[ring->offset_write],buffer,wr_len);
        ring->offset_write +=wr_len;
    }
    ring->len += wr_len;
    return wr_len;
}

//----從環形緩沖區讀-----------------------------------------------------------
//功能: 從環形緩沖區讀出若干個字節,返回實際讀出的數據量,并且移動讀指針如果
//      緩沖區內數據不足,按實際數量讀取。
//參數: ring,目標環形緩沖區結構指針
//      buffer,接收數據的緩沖區指針
//      len,待讀出的數據長度.單位是字節數
//返回: 實際讀出的字節數,如果緩沖區有足夠的數據,=len
//------------------------------------------------------------------------------
uint32_t    ring_read(struct ring_buf *ring,uint8_t *buffer,uint32_t len)
{
    uint32_t    wr_len;
    wr_len = (ring->len < len)? ring->len : len;
    if((ring->offset_read + wr_len) > ring->max_len)
    {   //數據發生環繞
        uint32_t  partial;
        partial =ring->max_len - ring->offset_read;
        memcpy( buffer,&ring->buf[ring->offset_read],partial);    //寫第一部分
        memcpy( &buffer[partial],ring->buf,wr_len - partial);    //寫第二部分
        ring->offset_read = wr_len - partial;
    }else
    {   //不發生環繞
        memcpy( buffer,&ring->buf[ring->offset_read],wr_len);
        ring->offset_read += wr_len;
    }
    ring->len -= wr_len;
    return wr_len;
}

//----檢查緩沖區數據量----------------------------------------------------------
//功能: 檢查指定的環形緩沖區中的數據量,返回字節數.
//參數: ring,目標環形緩沖區指針.
//返回: 緩沖區中的數據量
//------------------------------------------------------------------------------
uint32_t    ring_check(struct ring_buf *ring)
{
    return ring->len;
}

//----檢查緩沖區是否空-----------------------------------------------------------
//功能: 檢查指定的環形緩沖區中是否已經空.
//參數: ring,目標環形緩沖區指針.
//返回: 空則返回true,非空返回false
//------------------------------------------------------------------------------
bool_t   ring_if_empty(struct ring_buf *ring)
{
    return (ring->len ==0)? true:false;
}

//----檢查緩沖區是否滿-----------------------------------------------------------
//功能: 檢查指定的環形緩沖區中是否已經滿.
//參數: ring,目標環形緩沖區指針.
//返回: 滿則返回true,非滿返回false
//------------------------------------------------------------------------------
bool_t   ring_if_full(struct ring_buf *ring)
{
    return (ring->len == ring->max_len)? true:false;
}

//----清空環形緩沖區-------------------------------------------------------------
//功能: 清除緩沖區中所有數據
//參數: ring,目標環形緩沖區指針.
//返回: 無
//------------------------------------------------------------------------------
void    ring_flush(struct ring_buf *ring)
{
    ring->len = 0;
    ring->offset_write = 0;
    ring->offset_read = 0;
}

//----釋放若干數據---------------------------------------------------------------
//功能: 從讀指針開始,釋放掉指定大小的數據,相當于啞讀了len個字節
//參數: ring,目標環形緩沖區指針.
//      len,釋放的數據數量
//返回: 實際釋放的數據量
//------------------------------------------------------------------------------
uint32_t ring_dumb_read(struct ring_buf *ring,uint32_t len)
{
    uint32_t    result;
    result = (ring->len < len)? ring->len : len;
    if((ring->offset_read + result) > ring->max_len)
    {   //數據發生環繞
        ring->offset_read = result + ring->offset_read - ring->max_len;
    }else
    {   //不發生環繞
        ring->offset_read += result;
    }
    ring->len -= result;
    return result;
}

//----退回若干數據-------------------------------------------------------------
//功能: 本函數與ring_dumb_read函數正好相反,把緩沖區指針退回len字節,如果退回的
//      長度超過緩沖區的空閑長度,則取緩沖區空閑長度。相當于把緩沖區中已經讀出
//      的數據返回緩沖區,好像沒有讀過的樣子。ring模塊并不校驗退回的部分是否包含
//      原來的數據。
//參數: ring,目標環形緩沖區指針.
//      len,退回的數據數量
//返回: 實際退回的數據量
//-----------------------------------------------------------------------------
uint32_t ring_recede_read(struct ring_buf *ring,uint32_t len)
{
    uint32_t    result;
    if((ring->max_len - ring->len) > len)   //空閑長度大于欲退回的長度

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人免费在线| 国产色综合一区| 99精品视频一区| 国产一区二区三区免费播放| 日韩高清在线不卡| 亚洲一区二区四区蜜桃| 亚洲欧美日韩人成在线播放| 国产精品理论在线观看| 国产欧美一区二区在线观看| 久久在线观看免费| 久久综合色播五月| 2023国产精品自拍| 久久午夜羞羞影院免费观看| 精品少妇一区二区三区在线播放| 91精品欧美综合在线观看最新| 欧美日韩电影在线播放| 欧美日韩一卡二卡| 51精品秘密在线观看| 国产亚洲成aⅴ人片在线观看| 日韩欧美在线不卡| 久久综合狠狠综合久久激情| 久久久久久久网| 亚洲国产成人一区二区三区| 国产精品理论片| 亚洲精品伦理在线| 日韩在线一二三区| 国产精品一区二区91| 成人免费毛片app| 91色.com| 日韩欧美色综合| 国产精品全国免费观看高清 | 亚洲观看高清完整版在线观看| 亚洲视频在线一区二区| 亚洲自拍偷拍av| 久久丁香综合五月国产三级网站| 精品亚洲欧美一区| 色综合中文字幕国产| 在线播放一区二区三区| 久久久久久久久久美女| 亚洲欧美激情一区二区| 舔着乳尖日韩一区| 国产精品影视网| 在线视频观看一区| 久久亚洲影视婷婷| 亚洲精选免费视频| 精品一区二区三区免费视频| 99精品一区二区| 日韩视频在线你懂得| 亚洲视频你懂的| 久久er99精品| 欧美视频一区二区三区| 国产亚洲一区二区三区| 亚洲va欧美va人人爽午夜| 国产精品白丝jk白祙喷水网站 | 一区二区三区 在线观看视频| 奇米888四色在线精品| 99精品视频免费在线观看| 日韩三级中文字幕| 一个色妞综合视频在线观看| 日韩精品一区二区三区swag| 欧美性做爰猛烈叫床潮| 久久久久久久综合色一本| 午夜精品aaa| 91福利视频在线| 国产精品第一页第二页第三页| 免费观看30秒视频久久| 欧洲在线/亚洲| 国产精品久久久久婷婷| 国产一区二区三区四区在线观看| 在线观看国产日韩| 中文字幕亚洲视频| 国产69精品久久久久毛片| 日韩视频一区在线观看| 亚洲成a天堂v人片| 在线观看日韩av先锋影音电影院| 中文字幕欧美日韩一区| 狠狠色丁香婷综合久久| 日韩免费一区二区三区在线播放| 午夜精品久久久久久久久久久 | 久久亚区不卡日本| 精品一区二区三区免费毛片爱| 欧美一区在线视频| 亚洲h在线观看| 欧美视频精品在线观看| 亚洲国产精品视频| 91精品婷婷国产综合久久性色 | 国产精品一品视频| 精品99999| 国产在线精品一区二区不卡了 | 亚洲欧洲日本在线| av电影天堂一区二区在线观看| 久久久久亚洲综合| 国产成人亚洲综合a∨婷婷图片| www国产亚洲精品久久麻豆| 国产乱码一区二区三区| 国产免费久久精品| 99视频在线精品| 一区二区三区产品免费精品久久75| 91丨porny丨蝌蚪视频| 亚洲高清免费在线| 精品成人一区二区三区四区| 粉嫩av一区二区三区在线播放| 中文字幕五月欧美| 欧美三区在线观看| 久久狠狠亚洲综合| 欧美国产激情二区三区 | 亚洲激情六月丁香| 欧美高清视频不卡网| 极品少妇xxxx偷拍精品少妇| 欧美国产乱子伦| 欧美日韩精品一区二区三区| 久久www免费人成看片高清| 日本一区二区电影| 欧美国产日本视频| 在线免费视频一区二区| 奇米888四色在线精品| 国产人成一区二区三区影院| 日本国产一区二区| 久久成人免费电影| 亚洲欧美日韩国产另类专区| 3d动漫精品啪啪一区二区竹菊| 国产精品一二三四五| 夜夜揉揉日日人人青青一国产精品 | 日韩中文字幕一区二区三区| 欧美精品一区二区三区一线天视频| 99久久99久久免费精品蜜臀| 蜜臀91精品一区二区三区| 中文字幕一区二区三区不卡| 日韩欧美一区二区视频| 99久久国产免费看| 国产毛片精品国产一区二区三区| 一区二区三区欧美激情| 久久久久久久久久久电影| 欧美日韩午夜精品| 91美女片黄在线| 国产伦精品一区二区三区免费| 亚洲大片精品永久免费| 中文字幕高清一区| 精品成人一区二区三区四区| 欧美日本在线视频| 欧美亚洲动漫精品| 91免费在线视频观看| 国产成人亚洲综合a∨婷婷图片| 日韩福利电影在线观看| 一区二区三区波多野结衣在线观看| 国产日本欧洲亚洲| 久久综合狠狠综合久久综合88| 欧美丰满高潮xxxx喷水动漫| 色婷婷狠狠综合| 99热精品一区二区| 国产不卡视频在线播放| 青青草国产成人99久久| 成人涩涩免费视频| 成人做爰69片免费看网站| 国产乱码精品一区二区三区忘忧草 | 国产98色在线|日韩| 加勒比av一区二区| 国内久久精品视频| 久久精品国产精品亚洲综合| 日本aⅴ精品一区二区三区| 天天色综合天天| 日本午夜精品视频在线观看| 三级不卡在线观看| 日韩成人一级大片| 九色porny丨国产精品| 精品一区二区三区视频在线观看 | 精品国产凹凸成av人导航| 91精品国产综合久久香蕉麻豆| 欧美另类变人与禽xxxxx| 欧美日韩视频在线第一区 | 日本va欧美va欧美va精品| 午夜精品在线视频一区| 日本中文一区二区三区| 青青草成人在线观看| 国产精品 日产精品 欧美精品| 精品一区二区三区在线播放视频| 国产一区免费电影| 成人av影视在线观看| 日本韩国欧美三级| 欧美日韩dvd在线观看| 精品日本一线二线三线不卡| 久久婷婷色综合| 亚洲精品视频自拍| 日韩av午夜在线观看| 国产一本一道久久香蕉| 99精品久久只有精品| 欧美日韩视频在线观看一区二区三区 | 国产福利一区二区三区视频在线 | 欧美精品丝袜中出| 自拍偷自拍亚洲精品播放| 亚洲亚洲人成综合网络| 丝袜美腿亚洲一区二区图片| 国产麻豆精品在线| 色婷婷综合久久久中文字幕| 欧美一区二区视频在线观看| 国产色一区二区| 天天综合色天天综合| 懂色中文一区二区在线播放| 欧美亚洲国产一区在线观看网站 | 26uuu另类欧美亚洲曰本|