⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cbuf.c

📁 PIC Kit serial source code.
💻 C
字号:
//===================================================================== 
//--- COPYRIGHT
//===================================================================== 
// Copyright 2006 Microchip Technology Inc.
// 
// Microchip Technology Inc. ("Microchip") licenses this software to
// you solely for use with Microchip products. The software is owned
// by Microchip and is protected under applicable copyright laws. All
// rights reserved.
// 
// SOFTWARE IS PROVIDED IN AN "AS IS." MICROCHIP EXPRESSLY DISCLAIMS ANY
// WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
// PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL MICROCHIP
// BE LIABLE FOR ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL
// DAMAGES, LOST PROFITS OR LOST DATA, HARM TO YOUR EQUIPMENT, COST OF
// PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR SERVICES, ANY CLAIMS
// BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF),
// ANY CLAIMS FOR INDEMNITY OR CONTRIBUTION, OR OTHER SIMILAR COSTS.
// 
//===================================================================== 
//--- TITLE
//===================================================================== 
//    Filename:            cbuf.c
//    Microcontroller:     PIC18F2550
//    Compiled using:      C18 V3.00
//
//    Author:              Mark Enochson
//    Company:             Microchip Technology Inc.
//
//===================================================================== 
//--- DESCRIPTION
//===================================================================== 
//
//--- CIRCULAR BUFFER
//    
//    get & put byte from a circular buffer
//    maximum buffer size = 255 (0xFF)
//    buffer definition structure (CBUF) defines:
//       read     read pointer
//       write    write pointer
//       used     # bytes used
//       unused   # bytes unused
//    caller must check data/buffer availability
//    prior to calling "get"/"put"
//
//    multiple buffers can be defined by
//    duplicating "CBUF1" sections in cbuf.c & cbuf.h
//       change duplicate: "cbuf1" -> "cbuf2"
//       change duplicate: "CBUF1" -> "CBUF2"
//
//===================================================================== 
//--- HISTORY
//===================================================================== 
//
//    0001 - 08-01-06 - ME
//    - initial release
//
//===================================================================== 
#include "project.h"
#include "cbuf.h"

//--------------------------------------
//--------------------------------------
//--- CBUF1: START
//--------------------------------------
//--------------------------------------
#pragma udata cbuf1_def
struct CBUF cbuf1;

#pragma udata cbuf1_buf
TD_BYTE cbuf1_data[CBUF1_LEN];

#pragma code cbuf1_code
//----------------------------
//--- cbuf1_init()
//----------------------------
void cbuf1_init()
{
   cbuf1.write = 0;
   cbuf1.read = 0;
   cbuf1.used = 0;
   cbuf1.unused = CBUF1_LEN;
}

//----------------------------
//--- cbuf1_get()
//----------------------------
TD_BYTE cbuf1_get()
{
   if(cbuf1.used)
   {
      cbuf1.read += 1;
      if(cbuf1.read == CBUF1_LEN)
         cbuf1.read = 0;
      cbuf1.used--;
      cbuf1.unused++;
   }
   return cbuf1_data[cbuf1.read];
}

//----------------------------
//--- cbuf1_put()
//----------------------------
void cbuf1_put(TD_BYTE data)
{
   if(cbuf1.unused)
   {
      cbuf1.write++;
      if(cbuf1.write == CBUF1_LEN)
         cbuf1.write = 0;
      cbuf1_data[cbuf1.write] = data;
      cbuf1.used++;
      cbuf1.unused--;
   }
   return ;
}
//--------------------------------------
//--------------------------------------
//--- CBUF1: END
//--------------------------------------
//--------------------------------------

//--------------------------------------
//--------------------------------------
//--- CBUF2: START
//--------------------------------------
//--------------------------------------
#pragma udata cbuf2_def
struct CBUF cbuf2;

#pragma udata cbuf2_buf
TD_BYTE cbuf2_data[CBUF2_LEN];

#pragma code cbuf2_code
//----------------------------
//--- cbuf2_init()
//----------------------------
void cbuf2_init()
{
   cbuf2.write = 0;
   cbuf2.read = 0;
   cbuf2.used = 0;
   cbuf2.unused = CBUF2_LEN;
}

//----------------------------
//--- cbuf2_get()
//----------------------------
TD_BYTE cbuf2_get()
{
   if(cbuf2.used)
   {
      cbuf2.read += 1;
      if(cbuf2.read == CBUF2_LEN)
         cbuf2.read = 0;
      cbuf2.used--;
      cbuf2.unused++;
   }
   return cbuf2_data[cbuf2.read];
}

//----------------------------
//--- cbuf2_put()
//----------------------------
void cbuf2_put(TD_BYTE data)
{
   if(cbuf2.unused)
   {
      cbuf2.write++;
      if(cbuf2.write == CBUF2_LEN)
         cbuf2.write = 0;
      cbuf2_data[cbuf2.write] = data;
      cbuf2.used++;
      cbuf2.unused--;
   }
   return ;
}
//--------------------------------------
//--------------------------------------
//--- CBUF2: END
//--------------------------------------
//--------------------------------------

//--------------------------------------
//--------------------------------------
//--- CBUF3: START
//--------------------------------------
//--------------------------------------
#pragma udata cbuf3_def
struct CBUF cbuf3;

#pragma udata cbuf3_buf
TD_BYTE cbuf3_data[CBUF3_LEN];

#pragma code cbuf3_code
//----------------------------
//--- cbuf3_init()
//----------------------------
void cbuf3_init()
{
   cbuf3.write = 0;
   cbuf3.read = 0;
   cbuf3.used = 0;
   cbuf3.unused = CBUF3_LEN;
}

//----------------------------
//--- cbuf3_get()
//----------------------------
TD_BYTE cbuf3_get()
{
   if(cbuf3.used)
   {
      cbuf3.read += 1;
      if(cbuf3.read == CBUF3_LEN)
         cbuf3.read = 0;
      cbuf3.used--;
      cbuf3.unused++;
   }
   return cbuf3_data[cbuf3.read];
}

//----------------------------
//--- cbuf3_put()
//----------------------------
void cbuf3_put(TD_BYTE data)
{
   if(cbuf3.unused)
   {
      cbuf3.write++;
      if(cbuf3.write == CBUF3_LEN)
         cbuf3.write = 0;
      cbuf3_data[cbuf3.write] = data;
      cbuf3.used++;
      cbuf3.unused--;
   }
   return ;
}
//--------------------------------------
//--------------------------------------
//--- CBUF3: END
//--------------------------------------
//--------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -