标签:0ms 知识点 完整 main void 发送数据 使用说明 manage lin
在上一节只是稍微说了下数据缓存
https://www.cnblogs.com/yangfengwu/p/11769059.html
这节为了可以让大家直接应用起来,我封装了下.
咱们平时发送数据的时候最希望的是可以有个缓存,每次把要发送的数据存到缓存里面
需要发送的时候咱就去缓存里面去取
而且咱希望咱的缓存可以存储多条数据
发送的时候按照先进先出的原则把数据提取出来发出去
一,注意,这一节是对上一节的封装,请先看上一节
不过LoopList做了下改动
然后增加了 BufferManage 文件
具体为什么改动会在最后的注意事项说明
二,定义一个管理变量
buff_manage_struct buff_manage_struct1;
三,定义两个数组
一个用于交给环形队列用于缓存数据
另一个交给环形队列用于记录每次缓存数据的个数
注意: u32 Managebuff[10];
数组个数是10个,说明最多可以管理10条数据
u32 类型,说明每条数据个数最大长度是 2^32 个
四, 调用 BufferManageCreate函数
五,定义一个数组,用于提取缓存的数据
注意:提取先前存储的数据,然后缓存到一个数组里面
最后操作这个数组
一,每隔3S插入17字节的数据
主循环只要判断插入了数据就取出来用串口发送出去
#include "include.h" #include "BufferManage.h" buff_manage_struct buff_manage_struct1; u8 buff[1024];//缓存数据的数组 u32 Managebuff[10];//记录每次缓存多少数据的数组 u8 SendBuff[1024];//提取数据以后存储的数组 int32_t Len; char temp[17]="111111111111111\r\n"; int main(void) { NVIC_Configuration(); uart_init(115200); //串口初始化为115200 GpioInit(); DelayInit(); BufferManageCreate(&buff_manage_struct1,buff,1024,Managebuff,10); while(1) { if(SysTickCntMs>=3000) { BufferManageWrite(&buff_manage_struct1,temp,17);//插入数据 SysTickCntMs=0; } Len = BufferManageRead(&buff_manage_struct1,SendBuff);//提取数据到SendBuff数组 if(Len>0) { UsartOutStr(SendBuff,Len);//串口发送缓存的数据 } if(Usart1ReadFlage)//串口接收完一条完整的数据 { Usart1ReadFlage=0; memset(Usart1ReadBuff,NULL, sizeof(Usart1ReadBuff));//清零 } } }
每隔3S插入两份数据:用来模拟不定期插入多份数据
注:延时50ms是控制每隔50ms从里面提取一条数据
每条数据按照先进先出的原则
#include "include.h" #include "BufferManage.h" buff_manage_struct buff_manage_struct1; u8 buff[1024];//缓存数据的数组 u32 Managebuff[10];//记录每次缓存多少数据的数组 u8 SendBuff[1024];//提取数据以后存储的数组 int32_t Len; char temp[17]="111111111111111\r\n"; char temp1[40]="22222222222222222222222222222222222222\r\n"; int main(void) { NVIC_Configuration(); uart_init(115200); //串口初始化为115200 GpioInit(); DelayInit(); BufferManageCreate(&buff_manage_struct1,buff,1024,Managebuff,10); while(1) { if(SysTickCntMs>=3000) { BufferManageWrite(&buff_manage_struct1,temp,17);//插入数据 BufferManageWrite(&buff_manage_struct1,temp1,40);//插入数据 SysTickCntMs=0; } Len = BufferManageRead(&buff_manage_struct1,SendBuff);//提取数据到SendBuff数组 if(Len>0) { UsartOutStr(SendBuff,Len);//串口发送缓存的数据 delay_ms(50);//延时50Ms,让每条数据之间有时间间隔 } if(Usart1ReadFlage)//串口接收完一条完整的数据 { Usart1ReadFlage=0; memset(Usart1ReadBuff,NULL, sizeof(Usart1ReadBuff));//清零 } } }
其实简而言之
在需要发送数据的地方
只需要调用
BufferManageWrite(&buff_manage_struct1,temp,17);//插入数据
BufferManageWrite(&buff_manage_struct1,temp1,40);//插入数据
函数,把数据写入用于缓存数据的数组,内部函数同时会用另一个数组记录缓存的数据个数
在需要提取发送的地方调用一下函数
Len = BufferManageRead(&buff_manage_struct1,SendBuff);//提取数据到SendBuff数组
if(Len>0)
{
操作发送的数据:SendBuff 数据长度:Len
}
这样便会一条数据一条数据的提取出来,然后最终如何操作如何应用自行发挥.
一,首先先说明处理思路
如果缓存区没有数据,则每隔1ms查询一次
如果查询到了有数据,则提取出来,然后交由中断处理
然后查询间隔变为10ms (该间隔可调节)
10ms便是发送每一条数据之间的时间间隔
因为是一条数据一条数据的发送,咱需要让每条数据之间有间隔
这样才让另一头的接收端认为是两条数据,方便处理
二,
标签:0ms 知识点 完整 main void 发送数据 使用说明 manage lin
原文地址:https://www.cnblogs.com/yangfengwu/p/12228402.html