循环队列的实用代码

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

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

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

一、首先需要定义一个结构体类型于.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

 

 

 

 

 

相关文章: