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

📄 databuffer.c

📁 汽车测功机源肛码.单片机用的是LPC2104. 实现测速,对涡流机的控制,马达的控制.
💻 C
字号:
#include "CGJ.H"
#include "DataBuffer.h"

/***************************************************************************************************************
* 定义缓冲区数据结构
***************************************************************************************************************/
typedef struct{
    FP32    *SpeedRingBufferIn;
    FP32    SpeedRingBuffer[SPEED_BUFFER_SIZE];
}SPEED_RING_BUF;

typedef struct{
    FP32    *ForceRingBufferIn;
    FP32    ForceRingBuffer[FORCE_BUFFER_SIZE];
}FORCE_RING_BUF;

typedef struct {
    INT32U  *AdRingBufferIn;
    INT32U  AdRingBuffer[AD_BUFFER_SIZE];
}AD_RING_BUF;

SPEED_RING_BUF      SpeedRingBuf;
FORCE_RING_BUF      ForceRingBuf;
AD_RING_BUF         AdRingBuf;

/***************************************************************************************************************
* 函数名称: BufferInit()
* 功    能: 初始化
* 入口参数: 无
* 出口参数: 无
* 调用模块:
* 全局变量: 
* 设计者:   饶阳胜
* 日    期: 05-8-6
***************************************************************************************************************/
void BufferInit()
{
    INT8U   i;
    SPEED_RING_BUF  *ps;
    FORCE_RING_BUF  *pf;
    AD_RING_BUF     *pa;
 
    
    ps  = &SpeedRingBuf;
    pf  = &ForceRingBuf;
    pa  = &AdRingBuf;
     
    ps->SpeedRingBufferIn   = &ps->SpeedRingBuffer[0];
    pf->ForceRingBufferIn   = &pf->ForceRingBuffer[0];
    pa->AdRingBufferIn      = &pa->AdRingBuffer[0];
 
    for(i = 0; i < SPEED_BUFFER_SIZE; i++){
        ps->SpeedRingBuffer[i] = 0;
    }

    for(i = 0; i < FORCE_BUFFER_SIZE; i++){
        pf->ForceRingBuffer[i] = 0;
    }

    for(i = 0; i < AD_BUFFER_SIZE; i++) {
        pa->AdRingBuffer[i] = 0;
    }
} 

/****************************************************************************************************************
*
****************************************************************************************************************/
void FillStandForceValue(FP32 value)
{
    INT8U   i;
    FORCE_RING_BUF  *pf;

    pf  = &ForceRingBuf;
    for(i = 0; i < FORCE_BUFFER_SIZE; i++){
        pf->ForceRingBuffer[i] = value;
    }
}

/****************************************************************************************************************
* 函数名称:InsertSpeedPoint()
* 功    能: 向速度缓冲区插入一个新的值
* 入口参数: value  ->  要插入的速度值
* 出口参数: 无
* 调用模块: 无
* 全局变量: SpeedRingBuf -> 速度缓冲区数据结构
* 设计者:   饶阳胜
* 日    期: 05-8-6 
****************************************************************************************************************/
void InsertSpeedPoint(FP32 value)
{
    SPEED_RING_BUF  *ps;
    
    ps = &SpeedRingBuf;
    *ps->SpeedRingBufferIn++ = value;
    if(ps->SpeedRingBufferIn == &ps->SpeedRingBuffer[SPEED_BUFFER_SIZE]){
        ps->SpeedRingBufferIn = &ps->SpeedRingBuffer[0];
    }
}    

/****************************************************************************************************************
* 函数名称:InsertForcePoint()
* 功    能: 向力缓冲区插入一个新的值
* 入口参数: value  ->  要插入的力值
* 出口参数: 无
* 调用模块: 无
* 全局变量: ForceRingBuf -> 力缓冲区数据结构
* 设计者:   饶阳胜
* 日    期: 05-8-6 
****************************************************************************************************************/
void InsertForcePoint(FP32 value)
{
    FORCE_RING_BUF  *pf;
    
    pf = &ForceRingBuf;
    *pf->ForceRingBufferIn++ = value;
    if(pf->ForceRingBufferIn == &pf->ForceRingBuffer[FORCE_BUFFER_SIZE]){
        pf->ForceRingBufferIn = &pf->ForceRingBuffer[0];
    }
} 

/*********************************************************************************************************
** 函数名称: 
** 功能描述: 
**           
** 输 入  : 无
** 输 出  : 无
** 全局变量: 无
** 调用模块: 无
** 
** 作 者: 
** 日 期: 
**-------------------------------------------------------------------------------------------------------
** 修 改: 
** 日 期: 
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void InsertAdPoint(INT32U value)
{
    AD_RING_BUF     *pa;

    pa = &AdRingBuf;
    *pa->AdRingBufferIn++ = value;
    if(pa->AdRingBufferIn == &pa->AdRingBuffer[AD_BUFFER_SIZE]) {
        pa->AdRingBufferIn = &pa->AdRingBuffer[0];
    }
}
/***************************************************************************************************************
* 函数名称: GetAdverOfSpeed
* 功    能: 得到速度缓冲区的平均值
* 入口参数: 无
* 出口参数: 速度的平均值
* 调用模块: 无
* 全局变量: SpeedRingBuf  ->  速度缓冲区数据结构
* 设计者:   饶阳胜
* 日    期: 05-8-6
***************************************************************************************************************/
FP32 GetAdverOfSpeed()
{
    SPEED_RING_BUF *ps;
    FP32  sum, adverage;
    INT8U i;
    
    ps = &SpeedRingBuf;
    sum = 0;
    for(i = 0; i < SPEED_BUFFER_SIZE; i++){
        sum += ps->SpeedRingBuffer[i];
    }
    adverage = sum / SPEED_BUFFER_SIZE;
    return  (adverage);
}

/**************************************************************************************************************
* 函数名称: GetAdverOfForce
* 功    能: 得到力缓冲区的平均值
* 入口参数: 无
* 出口参数: 力的平均值
* 调用模块: 无
* 全局变量: ForceRingBuf  ->  力缓冲区数据结构
* 设计者:   饶阳胜
* 日    期: 05-8-6
**************************************************************************************************************/
FP32 GetAdverOfForce()
{
    FORCE_RING_BUF *pf;
    FP32 sum, adverage;
    INT8U i;
    
    pf = &ForceRingBuf;
    sum = 0;
    for(i = 0; i < FORCE_BUFFER_SIZE; i++){
        sum += pf->ForceRingBuffer[i];
    }
    adverage = sum / FORCE_BUFFER_SIZE;
    return (adverage);
}

/*********************************************************************************************************
** 函数名称: 
** 功能描述: 
**           
** 输 入  : 无
** 输 出  : 无
** 全局变量: 无
** 调用模块: 无
** 
** 作 者: 
** 日 期: 
**-------------------------------------------------------------------------------------------------------
** 修 改: 
** 日 期: 
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
INT32U GetAverAD(void)
{
    AD_RING_BUF     *pa;
    INT32U          sum, aver;
    INT32U          i;

    pa = &AdRingBuf;

    sum = 0;
    for(i = 0; i < AD_BUFFER_SIZE; i++) {
        sum += pa->AdRingBuffer[i];
    }

    aver = sum / AD_BUFFER_SIZE;

    return aver;
}

⌨️ 快捷键说明

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