发新帖我要提问
12
返回列表
打印
[应用相关]

环形队列

[复制链接]
楼主: operating
手机看帖
扫描二维码
随时随地手机跟帖
21
operating|  楼主 | 2020-7-23 20:44 | 只看该作者 回帖奖励 |倒序浏览
#ifndef LOOPLIST_H_#defineLOOPLIST_H_#ifndef LOOPLIST_C_//如果没有定义  AnnularArray_C_#defineLOOPLIST_C_ extern#else#defineLOOPLIST_C_#endif#include#definesize_t uint16_t#defineRB_MAX_LEN  1024//缓冲区最大长度#definemin(a, b) (a)<(b)?(a):(b)///< 获取最小值/** 环形缓冲区数据结构*/typedefstruct{

size_t rbCapacity;//空间大小uint8_t  *rbHead;//头uint8_t  *rbTail;//尾uint8_t  *rbBuff;//数组的首地址}rb_t;

LOOPLIST_C_  rb_t pRb;///< 环形缓冲区结构体变量LOOPLIST_C_  uint8_t rbBuf[RB_MAX_LEN];///< 环形缓冲区数据缓存区LOOPLIST_C_voidrbCreate(rb_t *rb,u8 *Buff,uint32_t BuffLen);//创建或者说初始化环形缓冲区LOOPLIST_C_voidrbDelete(rb_t*rb);

LOOPLIST_C_  int32_t rbCapacity(rb_t*rb);//得到环形大小LOOPLIST_C_  int32_t rbCanRead(rb_t *rb);//能读出数据的个数LOOPLIST_C_  int32_t rbCanWrite(rb_t *rb);//还剩余的空间LOOPLIST_C_  int32_t rbRead(rb_t *rb,void*data, size_t count);//读取数据LOOPLIST_C_  int32_t rbWrite(rb_t *rb,constvoid*data, size_t count);

LOOPLIST_C_  int32_t PutData(uint8_t*buf, uint32_t len);#endif

使用特权

评论回复
22
operating|  楼主 | 2020-7-23 20:45 | 只看该作者
使用就很方便了--直接往里面填数据就好啦

使用特权

评论回复
23
operating|  楼主 | 2020-7-23 20:46 | 只看该作者
#include"include.h"uint8_t aaa[50]={1,1,1,1,1,1,1,1,1,1};

uint8_t bbb[50]={3,3,3,3,3,3,3,3,3,3};intmain(void)

{

NVIC_Configuration();

Led_Gpio_Init();

Timer2_Config();

uart_init(115200);//串口初始化为115200rbCreate(&pRb,SendBuff,USART_REC_LEN);//创建环形队列while(1)

{

PutData(aaa,10);//发送数据PutData(bbb,10);//发送数据delay_ms(10);

}

}

使用特权

评论回复
24
operating|  楼主 | 2020-7-23 20:46 | 只看该作者
voidUSART1_IRQHandler(void)//串口1中断服务程序{

u8 Res;if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)//接收中断(接收到的数据必须是0x0d 0x0a结尾){

Res=USART_ReceiveData(USART1);//读取接收到的数据}if(USART_GetITStatus(USART1, USART_IT_TXE) !=RESET)

{if(rbCanRead(&pRb)>0)//如果里面的数据个数大于0{

rbRead(&pRb, &SendDat,1);//读取一个数据USART_SendData(USART1, SendDat);//发送}else{//发送字节结束USART_ClearITPendingBit(USART1,USART_IT_TXE);

USART_ITConfig(USART1, USART_IT_TXE, DISABLE);

USART_ITConfig(USART1, USART_IT_TC, ENABLE);

}

}//发送完成if(USART_GetITStatus(USART1, USART_IT_TC) !=RESET)

{

USART_ClearITPendingBit(USART1,USART_IT_TC);

USART_ITConfig(USART1, USART_IT_TC, DISABLE);

}

}

使用特权

评论回复
25
operating|  楼主 | 2020-7-23 20:47 | 只看该作者
其实再完美点就是加上DMA....后期我尽量用LPC的单片机做....不对是一定要用LPC的单片机做成dma的---

程序链接:http://pan.baidu.com/s/1pLlXDfP密码:6kci

使用特权

评论回复
26
operating|  楼主 | 2020-7-23 20:47 | 只看该作者
作者:杨奉武
链接:https://www.jianshu.com/p/d4010ef2140f
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则