简单好用的C语言队列实现

注意:函数名是项目中的,未修改

#define TX_MSG_LIST_MAX 128       // 发送队列缓存最大数量


typedef struct{
	int a;
}T;


/*********************************** 队列 START ****************************************/

/* FB MODBUS DATA FIFO定义 */
typedef struct {
	T t_msg[TX_MSG_LIST_MAX];    //消息数组
	U32_T u32_read_index;                    //读索引
	U32_T u32_write_index;                   //写索引
}TX_MSG_LIST_T;

static TX_MSG_LIST_T protocol_tx_msg;             //modbus发送FIFO

/*************************************************************
函数名称: inc_rect_msg_queue_init
函数功能: 整流模块通信消息队列初始化
输入参数: pt_msg   -- 指向返回的消息
输出参数: 无
返回值  :无
**************************************************************/
void inc_rect_msg_queue_init(void)
{
	protocol_tx_msg.u32_read_index = protocol_tx_msg.u32_write_index = 0;
	memset(protocol_tx_msg.t_msg, 0, sizeof(protocol_tx_msg.t_msg));
}


/*************************************************************
函数名称: inc_rect_msg_queue_empty
函数功能: 判断整流模块通信消息队列是否为空
输入参数: 无
输出参数: 无
返回值  :0:非空
        1:空
**************************************************************/
BOOL_T inc_rect_msg_queue_empty(void)
{
	if(protocol_tx_msg.u32_read_index == protocol_tx_msg.u32_write_index)
	{
		return 1;
	}
	return 0;
}



/*************************************************************
函数名称: inc_rect_msg_queue_init
函数功能: 写入整流模块通信消息队列数据
输入参数: pt_msg   -- 指向要写入到队列的消息
输出参数: 无
返回值  :0:成功;1:失败,缓冲区没有空间了,应用程序可以稍后重试
**************************************************************/
U32_T inc_rect_msg_queue_write(const T *pt_msg)
{
	U32_T u32_ret = 0;


	if (((protocol_tx_msg.u32_write_index+1)%TX_MSG_LIST_MAX) == protocol_tx_msg.u32_read_index)
	{
		u32_ret = 1;
	}
	else
	{
		u32_ret = 0;
		protocol_tx_msg.t_msg[protocol_tx_msg.u32_write_index] = *pt_msg;
		protocol_tx_msg.u32_write_index = ((protocol_tx_msg.u32_write_index+1)%TX_MSG_LIST_MAX);
	}
	

	return u32_ret;
}

/*************************************************************
函数名称: inc_rect_msg_queue_init
函数功能: 读取整流模块通信消息队列数据
输入参数: 无
输出参数: pt_msg   -- 指向读取的消息
返回值  :0:成功,pt_msg指向返回的消息;1:失败,无消息可读
**************************************************************/
U32_T inc_rect_msg_queue_read(T *pt_msg)
{
	U32_T u32_ret = 0;

	
	if (protocol_tx_msg.u32_write_index == protocol_tx_msg.u32_read_index)
	{
		u32_ret = 1;
	}
	else
	{
		u32_ret = 0;
		*pt_msg = protocol_tx_msg.t_msg[protocol_tx_msg.u32_read_index];
		protocol_tx_msg.u32_read_index = ((protocol_tx_msg.u32_read_index+1)%TX_MSG_LIST_MAX);
	}
	

	return u32_ret;
}

/*********************************** 队列 END ****************************************/
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值