循环队列的实用代码
概念就不过多说明,直接上干货,不好的地方请多担待指正。
功能说明:用一个蓝牙模块,利用串口接收/发送中断,接收数据,发送数据的例子(注:如果要直接套用代码,那发送中断的模式必须设置为发送完成后中断。即发送一个字节完成后进入发送中断)。
此代码的简单应用方式:如上位机通过蓝牙发送数据到主机(我们的单片机)询问主机名称。我们通过入队接收,得到了上位机的询问语句,经过解析,知道了这段信息是要来问名字的,那我们就把名字的数据打包好,塞进发送缓存队列,发送回去。
一、首先需要定义一个结构体类型于.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