You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

131 lines
3.2 KiB

/*
*********************************************************************************************************
*
* 模块名称 : 消息处理模块
* 文件名称 : bsp_msg.c
* 版 本 : V1.0
* 说 明 : 消息处理机制。
*
* 修改记录 :
* 版本号 日期 作者 说明
* V1.0 2015-03-27 armfly 正式发布
*
* Copyright (C), 2014-2015, 安富莱电子 www.armfly.com
*
*********************************************************************************************************
*/
#include "bsp_msg.h"
MSG_FIFO_T g_tMsg;
/*
*********************************************************************************************************
* 函 数 名: bsp_InitMsg
* 功能说明: 初始化消息缓冲区
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
void bsp_InitMsg(void)
{
bsp_ClearMsg();
}
/*
*********************************************************************************************************
* 函 数 名: bsp_PutMsg
* 功能说明: 将1个消息压入消息FIFO缓冲区。
* 形 参: _MsgCode : 消息代码
* _pMsgParam : 消息参数,一般指向某个特定的结构体. 或者是0
* 返 回 值: 无
*********************************************************************************************************
*/
void bsp_PutMsg(uint16_t _MsgCode, uint32_t _MsgParam)
{
g_tMsg.Buf[g_tMsg.Write].MsgCode = _MsgCode;
g_tMsg.Buf[g_tMsg.Write].MsgParam = _MsgParam;
if (++g_tMsg.Write >= MSG_FIFO_SIZE)
{
g_tMsg.Write = 0;
}
}
/*
*********************************************************************************************************
* 函 数 名: bsp_GetMsg
* 功能说明: 从消息FIFO缓冲区读取一个键值。
* 形 参: 无
* 返 回 值: 0 表示无消息; 1表示有消息
*********************************************************************************************************
*/
uint8_t bsp_GetMsg(MSG_T *_pMsg)
{
MSG_T *p;
if (g_tMsg.Read == g_tMsg.Write)
{
return 0;
}
else
{
p = &g_tMsg.Buf[g_tMsg.Read];
if (++g_tMsg.Read >= MSG_FIFO_SIZE)
{
g_tMsg.Read = 0;
}
_pMsg->MsgCode = p->MsgCode;
_pMsg->MsgParam = p->MsgParam;
return 1;
}
}
/*
*********************************************************************************************************
* 函 数 名: bsp_GetMsg2
* 功能说明: 从消息FIFO缓冲区读取一个键值。使用第2个读指针。可以2个进程同时访问消息区。
* 形 参: 无
* 返 回 值: 0 表示无消息; 1表示有消息
*********************************************************************************************************
*/
uint8_t bsp_GetMsg2(MSG_T *_pMsg)
{
MSG_T *p;
if (g_tMsg.Read2 == g_tMsg.Write)
{
return 0;
}
else
{
p = &g_tMsg.Buf[g_tMsg.Read2];
if (++g_tMsg.Read2 >= MSG_FIFO_SIZE)
{
g_tMsg.Read2 = 0;
}
_pMsg->MsgCode = p->MsgCode;
_pMsg->MsgParam = p->MsgParam;
return 1;
}
}
/*
*********************************************************************************************************
* 函 数 名: bsp_ClearMsg
* 功能说明: 清空消息FIFO缓冲区
* 形 参:无
* 返 回 值: 无
*********************************************************************************************************
*/
void bsp_ClearMsg(void)
{
g_tMsg.Read = g_tMsg.Write;
}
/***************************** 安富莱电子 www.armfly.com (END OF FILE) *********************************/