循环队列的实用代码

                                                                                  循环队列的实用代码

概念就不过多说明,直接上干货,不好的地方请多担待指正。

功能说明:用一个蓝牙模块,利用串口接收/发送中断,接收数据,发送数据的例子(注:如果要直接套用代码,那发送中断的模式必须设置为发送完成后中断。即发送一个字节完成后进入发送中断)。

此代码的简单应用方式:如上位机通过蓝牙发送数据到主机(我们的单片机)询问主机名称。我们通过入队接收,得到了上位机的询问语句,经过解析,知道了这段信息是要来问名字的,那我们就把名字的数据打包好,塞进发送缓存队列,发送回去。

一、首先需要定义一个结构体类型于.h文件中:

 

二、在.c文件中定义两个结构体:

三、然后要定义一个队列初始化函数,将接收和读取队列初始化:

并在程序执行前将接收和发送两个队列初始化:(Ble_Queue.Ble_Interrupt_Buf:是接收队列存放数据的缓存数组的首地址,可根据自己实际情况修改;Ble_Queue.TxBuf:是发送队列存放发送数据的首地址,可根据自己实际情况修改;BLEMAX_DATA_BUF_SIZE:队列最大允许长度,既接收或者发送数据的缓存大小,根据自己实际情况修改)

四、接下来是入队函数的书写:(将串口得到的数据,一个个按顺序放到接收队列的缓存数组中)

为了方便并整齐的操作,我们将上面的入队操作函数稍微加工处理一下(此函数放于串口接收中断之中,*pdata为串口接收到的数据):

放于串口接收中断(绿框部分是我的串口中断的其他处理,直接忽略即可):

到这里,我们的入队操作就完成了,这样串口得到的数据就会按顺序存储到缓存数组Ble_Queue.Ble_Interrupt_Buf[ ]中了。

五、下面是数据出队函数(就是把数据从发送缓存区取出来):

将出队函数稍作加工,变成中断发送函数,放于串口发送中断中(特别注意:我的串口发送中断是发送完成后中断,即必须是串口发送第一个字节完成后才会进入发送中断。所以才在中断里将发送缓存区的数据出队,继续发送)。

六、下面这个函数中心作用就是将你要发送的数据入队到发送缓存数组。(特别注意:我的串口发送中断是发送完成后中断,即必须是串口发送第一个字节完成后才会进入发送中断。所以才会有“发送第一个数”这个操作,根据自己实际情况,只要是启动了发送中断即可)。

七:附简单的代码供下载参考。

//download.csdn.net/download/eatonlybones/12205681

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值