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

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

?? usrlib.h

?? scmRTOS is real-time preemptive operating system and supports up to 31 user processes (and one syste
?? H
字號:
//******************************************************************************
//*
//*     FULLNAME:  Single-Chip Microcontroller Real-Time Operating System
//*
//*     NICKNAME:  scmRTOS
//*               
//*     PURPOSE:  User Suport Library Header
//*               
//*     Version: 3.05
//*
//*     $Revision: 195 $
//*     $Date:: 2008-06-19 #$
//*
//*     Copyright (c) 2003-2008, Harry E. Zhurov
//*
//*     Permission is hereby granted, free of charge, to any person 
//*     obtaining  a copy of this software and associated documentation 
//*     files (the "Software"), to deal in the Software without restriction, 
//*     including without limitation the rights to use, copy, modify, merge, 
//*     publish, distribute, sublicense, and/or sell copies of the Software, 
//*     and to permit persons to whom the Software is furnished to do so, 
//*     subject to the following conditions:
//*
//*     The above copyright notice and this permission notice shall be included 
//*     in all copies or substantial portions of the Software.
//*
//*     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
//*     EXPRESS  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 
//*     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 
//*     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 
//*     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 
//*     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH 
//*     THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//*
//*     =================================================================
//*     See http://scmrtos.sourceforge.net for documentation, latest
//*     information, license and contact details.
//*     =================================================================
//*
//******************************************************************************

#ifndef USRLIB_H
#define USRLIB_H

#include <commdefs.h>

//------------------------------------------------------------------------------
//
//  DESCRIPTON: user namespace for some useful types and functions
//
//
namespace usr
{
    //------------------------------------------------------------------------------
    //
    ///     The Circular Buffer
    //
    ///         Byte-wide FIFO.
    //
    ///         Allows to:
    ///             add byte,
    ///             get byte,
    ///             write bytes from array,
    ///             read bytes to array,
    ///             and some other service actions.
    //
    class TCbuf
    {
    public:
        TCbuf(byte* const Address, const byte Size);
        bool write(const byte* data, const byte Count);
        void read(byte* const data, const byte Count);
        byte get_count() const { return count; }
        byte get_free_size() const { return size - count; }
        byte get_byte(const byte index) const;
        void clear() { count = 0; last = first; }
        bool put(const byte item);
        byte get();

    private:
       //------------------------------------------------------------------------------
       //
       //  DESCRIPTON: For internal purposes
       //
        void push(const byte item); ///< Use this function with care - it doesn't perform free size check
        byte pop();                 ///< Use this function with care - it doesn't perform count check
       //------------------------------------------------------------------------------

    private:
        byte* buf;
        byte  size;
        volatile byte count;
        byte  first;
        byte  last;
    };
    //------------------------------------------------------------------------------



    //-----------------------------------------------------------------------
    //
    ///     The Ring Buffer Template
    ///
    ///         Carries out FIFO functionality for
    ///         arbitrary data types
    ///
    ///         Allows to:
    ///             add item to back (default),
    ///             add item to front,
    ///             get item at front (default),
    ///             get item from back,
    ///             write items from array,
    ///             read items to array and some other actions
    //
    //
    //
    template<typename T, word Size, typename S = byte>
    class ring_buffer
    {
    public:
        ring_buffer() : Count(0), First(0), Last(0) { }

        //----------------------------------------------------------------
        //
        //    Data transfer functions
        //
        bool write(const T* data, const S cnt);
        void read(T* const data, const S cnt);

        bool push_back(const T item);
        bool push_front(const T item);

        T pop_front();
        T pop_back();

        bool push(const T item) { return push_back(item); }
        T pop() { return pop_front(); }

        //----------------------------------------------------------------
        //
        //    Service functions
        //
        S get_count() const { return Count; }
        S get_free_size() const { return Size - Count; }
        T& operator[](const S index);
        void flush() { Count = 0; Last = First; }

    private:
        //--------------------------------------------------------------
        //  DESCRIPTON: For internal purposes
        //              Use this functions with care: it don't perform
        //              free size and count check
        //
        void push_item(const T item);
        void push_item_front(const T item);
        T pop_item();
        T pop_item_back();
        //--------------------------------------------------------------

    private:
        S  Count;
        S  First;
        S  Last;
        T  Buf[Size];
    };
    //------------------------------------------------------------------
}
//---------------------------------------------------------------------------


//------------------------------------------------------------------------------
//
//    The ring buffer function-member definitions
//
//
//
template<typename T, word Size, typename S>
bool usr::ring_buffer<T, Size, S>::write(const T* data, const S cnt)
{
    if( cnt > (Size - Count) )
        return false;

    for(S i = 0; i < cnt; i++)
        push_item(*(data++));

    return true;
}
//------------------------------------------------------------------------------
template<typename T, word Size, typename S>
void usr::ring_buffer<T, Size, S>::read(T* data, const S cnt)
{
    S nItems = cnt <= Count ? cnt : Count;

    for(S i = 0; i < nItems; i++)
        data[i] = pop_item();
}
//------------------------------------------------------------------------------
template<typename T, word Size, typename S>
T& usr::ring_buffer<T, Size, S>::operator[](const S index)
{
    S x = First + index;

    if(x < Size)
        return Buf[x];
    else
        return Buf[x - Size];
}

//------------------------------------------------------------------------------
template<typename T, word Size, typename S>
bool usr::ring_buffer<T, Size, S>::push_back(const T item)
{
    if(Count == Size)
        return false;

    push_item(item);
    return true;
}
//------------------------------------------------------------------------------
template<typename T, word Size, typename S>
bool usr::ring_buffer<T, Size, S>::push_front(const T item)
{
    if(Count == Size)
        return false;

    push_item_front(item);
    return true;
}
//------------------------------------------------------------------------------
template<typename T, word Size, typename S>
T usr::ring_buffer<T, Size, S>::pop_front()
{
    if(Count)
        return pop_item();
    else
        return Buf[First];
}
//------------------------------------------------------------------------------
template<typename T, word Size, typename S>
T usr::ring_buffer<T, Size, S>::pop_back()
{
    if(Count)
        return pop_item_back();
    else
        return Buf[First];
}
//------------------------------------------------------------------------------
template<typename T, word Size, typename S>
void usr::ring_buffer<T, Size, S>::push_item(const T item)
{
    Buf[Last] = item;
    Last++;
    Count++;

    if(Last == Size)
        Last = 0;
}
//------------------------------------------------------------------------------
template<typename T, word Size, typename S>
void usr::ring_buffer<T, Size, S>::push_item_front(const T item)
{
    if(First == 0)
        First = Size - 1;
    else
        --First;
    Buf[First] = item;
    Count++;
}
//------------------------------------------------------------------------------
template<typename T, word Size, typename S>
T usr::ring_buffer<T, Size, S>::pop_item()
{
    T item = Buf[First];

    Count--;
    First++;
    if(First == Size)
        First = 0;

    return item;
}
//------------------------------------------------------------------------------
template<typename T, word Size, typename S>
T usr::ring_buffer<T, Size, S>::pop_item_back()
{

    if(Last == 0)
        Last = Size - 1;
    else
        --Last;

    Count--;
    return Buf[Last];;
}
//------------------------------------------------------------------------------


#endif // USRLIB_H

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲高清中文字幕| 中文字幕一区二区三区在线不卡 | 亚洲国产精品影院| 国产精品久久毛片| 一区二区三区在线不卡| 欧美大片拔萝卜| 国产日产欧美一区二区三区| 亚洲成人动漫在线免费观看| 国产91精品久久久久久久网曝门| 这里只有精品免费| 亚洲美腿欧美偷拍| 成人手机在线视频| 久久婷婷国产综合精品青草| 亚洲主播在线观看| 97精品电影院| 国产精品视频九色porn| 激情丁香综合五月| 精品欧美一区二区三区精品久久| 性做久久久久久免费观看欧美| 99久久国产综合精品色伊| 久久青草国产手机看片福利盒子 | 国产精品不卡视频| 国产精品综合一区二区三区| 日韩欧美国产wwwww| 青娱乐精品视频| 欧美一区二区精品| 日韩精品欧美成人高清一区二区| 在线观看日韩精品| 亚洲一区二区在线播放相泽| 99国产精品久久久久久久久久| 国产精品三级电影| voyeur盗摄精品| 中文字幕亚洲视频| 91免费观看视频在线| 亚洲欧美日韩久久精品| 91视视频在线观看入口直接观看www | 欧美视频一区二区三区在线观看| 国产精品久久久久婷婷二区次| 国产一本一道久久香蕉| 欧美精品一区在线观看| 极品少妇xxxx精品少妇| 亚洲精品一区二区在线观看| 久热成人在线视频| ww久久中文字幕| 国产不卡在线视频| 国产精品久久久久久户外露出 | 国产福利一区二区三区| 久久久99精品免费观看不卡| 风间由美一区二区av101| 国产亚洲欧美激情| a亚洲天堂av| 亚洲一区二区在线视频| 欧美一区二区三区精品| 国产成人综合在线播放| 亚洲欧洲av色图| 欧洲另类一二三四区| 日本美女视频一区二区| 久久网站最新地址| 91丨九色丨蝌蚪富婆spa| 亚洲成av人片www| www欧美成人18+| 91麻豆精品一区二区三区| 午夜av一区二区| 国产三级久久久| 欧洲激情一区二区| 精品影视av免费| ...xxx性欧美| 日韩欧美一区在线观看| 成人av在线观| 日韩国产欧美视频| 国产精品三级视频| 欧美一区二区视频观看视频| 成人国产精品免费网站| 婷婷丁香激情综合| 国产精品免费av| 欧美精品自拍偷拍| 成人av电影观看| 日韩高清在线电影| 亚洲天堂福利av| 欧美v国产在线一区二区三区| 从欧美一区二区三区| 亚洲自拍偷拍综合| 中文字幕av一区二区三区| 91精品国产91久久综合桃花 | 欧美精品色综合| av在线一区二区| 国产精一品亚洲二区在线视频| 亚洲国产另类av| 日韩美女视频一区二区| 国产亚洲欧美激情| 欧美mv和日韩mv国产网站| 欧美日韩在线不卡| av电影天堂一区二区在线| 精品中文字幕一区二区小辣椒| 亚洲激情自拍偷拍| 国产精品视频yy9299一区| 欧美电影免费观看完整版| 欧美三级在线看| 色欧美日韩亚洲| av男人天堂一区| 成人激情校园春色| 国产精品自在欧美一区| 另类欧美日韩国产在线| 亚洲成人激情社区| 一区二区三区中文字幕精品精品| 国产欧美日韩精品a在线观看| 欧美不卡一区二区三区四区| 7878成人国产在线观看| 欧美日韩一区二区三区免费看| 91天堂素人约啪| 色婷婷精品大在线视频| 91网站最新网址| 99精品久久久久久| 成人一区二区三区中文字幕| 国v精品久久久网| 大胆亚洲人体视频| av不卡在线观看| 97se亚洲国产综合自在线不卡| 不卡一二三区首页| 99在线视频精品| 欧美在线你懂的| 欧美日韩成人在线| 欧美精品在线观看播放| 欧美一区二区性放荡片| 日韩一区二区三区观看| 精品盗摄一区二区三区| 国产欧美日韩视频一区二区| 日本一区二区三区dvd视频在线| 欧美国产欧美亚州国产日韩mv天天看完整 | 欧美三级中文字幕| 3d成人h动漫网站入口| 精品成人一区二区| 中文字幕+乱码+中文字幕一区| 一区在线观看视频| 亚洲国产视频一区| 美美哒免费高清在线观看视频一区二区| 奇米精品一区二区三区四区| 激情偷乱视频一区二区三区| 国产成人小视频| 在线观看欧美精品| 日韩精品影音先锋| 亚洲国产精品二十页| 亚洲精品大片www| 蜜桃传媒麻豆第一区在线观看| 国产精品一卡二| 欧美图片一区二区三区| 精品福利二区三区| 亚洲精品免费电影| 精品在线亚洲视频| 99久久99久久久精品齐齐| 欧美人妇做爰xxxⅹ性高电影 | 一区二区中文字幕在线| 亚洲国产成人精品视频| 国产在线不卡视频| 欧美亚洲综合在线| 久久久精品国产免大香伊| 亚洲美女精品一区| 久久97超碰国产精品超碰| 97久久超碰精品国产| 日韩一区二区免费电影| 中文字幕一区二区三区在线不卡 | 亚洲欧美欧美一区二区三区| 毛片av中文字幕一区二区| 99精品视频在线观看免费| 91 com成人网| 亚洲另类春色国产| 国产**成人网毛片九色| 日韩一区二区三区电影 | 欧美亚洲一区三区| 国产午夜精品久久久久久免费视| 一区二区久久久久久| 福利电影一区二区| 精品免费99久久| 午夜影院久久久| 一本色道综合亚洲| 国产亚洲欧美激情| 久久精品国产亚洲高清剧情介绍 | 一区二区在线观看av| 国产一区高清在线| 日韩一区二区三| 午夜精品视频在线观看| 日本电影亚洲天堂一区| 国产精品美女久久久久aⅴ| 精彩视频一区二区| 欧美一区二区三区白人| 亚洲超碰97人人做人人爱| 99re6这里只有精品视频在线观看| 久久久久久麻豆| 国产乱码字幕精品高清av| 欧美一区二区三区视频在线观看 | 国产精品色一区二区三区| 极品美女销魂一区二区三区| 在线不卡中文字幕| 午夜影院在线观看欧美| 欧美性色综合网| 亚洲国产精品麻豆| 欧美私模裸体表演在线观看| 亚洲香肠在线观看| 欧美视频三区在线播放| 亚洲电影一级片|