最近在摆弄SIM7670实现上传定位信息。
在开发的过程中需要发送大量的AT命令,有时候硬件没到位,但是软件却到位了,发送的数据无效,但是又需要发送,而再次发送的话又需要等待,肯定能耽误了别的运行。
想到了消息列队,但是搜了一圈好像都是在讲什么是OS的,这个没接触过,就自己写挖。
这个是我板子分解开的状态,别问我为啥不做个整板,之前都是在做整板,有些时候改动个硬件需要把主要芯片重新焊接,有几次把主要芯片直接焊报废,虽然不算贵,那也得几十块。经不起报废的次数太多。也算是一个经验教训给大家提个醒。
直接上代码吧。
/*
消息列队
MSG_MAX_LEN:定义在头文件中,用于设置消息列队的长度
MSG_List:消息列队的结构体
size:表示字符串的长度,用于判断消息体是否为空
MSG_Body:消息体的内容
消息列队是按照升序排列,最新加入的消息在最后,当消息数量超过MSG_MAX_LEN的限制时,将会把最早的消息,
也就是第一条消息清除。
街边仔
1983554
2021/11/05
*/
#include "msglist.h"
#include <stdio.h>
#include <string.h>
struct{
uint16_t size;
uint8_t MSG_Body[200];
}MSG_List[MSG_MAX_LEN] = {0};
/*
MSG_Get_List()
用于显示所有消息列表,测试用的,使用中无需调用。
*/
void MSG_Get_List(void){
for(uint8_t i = 0; i < MSG_MAX_LEN; i++){
printf("size:%d,body:%s\r\n",MSG_List[i].size,(char*)MSG_List[i].MSG_Body);
}
printf("\r\n");
}
/*
void MSG_Put(uint8_t *Body)
插入新消息。
在插入的同时判断是否超过MSG_MAX_LEN设置,
超过的话,就调用MSG_Move_First()清除最早的一条消息。
*/
void MSG_Put(uint8_t *Body){
uint8_t i = 0;
for(i = 0; i < MSG_MAX_LEN; i++){
if (MSG_List[i].size == 0){
break;
}
}
printf("MSG_Put i=%d\r\n",i);
if (i > MSG_MAX_LEN - 1){
MSG_Move_First();
MSG_List[MSG_MAX_LEN - 1].size = strlen((char*)Body);
strcat((char*)MSG_List[MSG_MAX_LEN - 1].MSG_Body,(char*)Body);
}else{
MSG_List[i].size = strlen((char*)Body);
strcat((char*)MSG_List[i].MSG_Body,(char*)Body);
}
}
/*
void MSG_Move_First(void)
清除最早的一条消息。
*/
void MSG_Move_First(void){
for(uint8_t i = 1; i < MSG_MAX_LEN; i++){
MSG_List[i - 1] = MSG_List[i];
}
MSG_List[MSG_MAX_LEN - 1].size = 0;
memset((char*)MSG_List[MSG_MAX_LEN - 1].MSG_Body,0,strlen((char*)MSG_List[MSG_MAX_LEN - 1].MSG_Body));
}
在需要发送消息的地方调用MSG_Put()函数。
在main的while里加一条读取列队消息的语句就行,只需要判断列队第一条是不是空就行。
发送完成后用MSG_Move_First清除就行。
H文件我没加,里面的东西很少,就定义了一个MSG_MAX_LEN,用来控制列队的大小。我设置的是10.
下面是循环添加消息15次的测试结果
[2021-11-05_14:23:59:826]******0********
[2021-11-05_14:23:59:826]MSG_Put i=0
[2021-11-05_14:23:59:826]size:1,body:0
[2021-11-05_14:23:59:826]size:0,body:
[2021-11-05_14:23:59:826]size:0,body:
[2021-11-05_14:23:59:826]size:0,body:
[2021-11-05_14:23:59:826]size:0,body:
[2021-11-05_14:23:59:826]size:0,body:
[2021-11-05_14:23:59:849]size:0,body:
[2021-11-05_14:23:59:849]size:0,body:
[2021-11-05_14:23:59:849]size:0,body:
[2021-11-05_14:23:59:849]size:0,body:
[2021-11-05_14:23:59:849]******1********
[2021-11-05_14:23:59:849]MSG_Put i=1
[2021-11-05_14:23:59:849]size:1,body:0
[2021-11-05_14:23:59:849]size:1,body:1
[2021-11-05_14:23:59:849]size:0,body:
[2021-11-05_14:23:59:849]size:0,body:
[2021-11-05_14:23:59:849]size:0,body:
[2021-11-05_14:23:59:849]size:0,body:
[2021-11-05_14:23:59:849]size:0,body:
[2021-11-05_14:23:59:849]size:0,body:
[2021-11-05_14:23:59:849]size:0,body:
[2021-11-05_14:23:59:849]size:0,body:
[2021-11-05_14:23:59:849]******2********
[2021-11-05_14:23:59:887]MSG_Put i=2
[2021-11-05_14:23:59:887]size:1,body:0
[2021-11-05_14:23:59:887]size:1,body:1
[2021-11-05_14:23:59:887]size:1,body:2
[2021-11-05_14:23:59:887]size:0,body:
[2021-11-05_14:23:59:887]size:0,body:
[2021-11-05_14:23:59:887]size:0,body:
[2021-11-05_14:23:59:887]size:0,body:
[2021-11-05_14:23:59:887]size:0,body:
[2021-11-05_14:23:59:887]size:0,body:
[2021-11-05_14:23:59:887]size:0,body:
[2021-11-05_14:23:59:887]******3********
[2021-11-05_14:23:59:887]MSG_Put i=3
[2021-11-05_14:23:59:887]size:1,body:0
[2021-11-05_14:23:59:887]size:1,body:1
[2021-11-05_14:23:59:887]size:1,body:2
[2021-11-05_14:23:59:887]size:1,body:3
[2021-11-05_14:23:59:887]size:0,body:
[2021-11-05_14:23:59:914]size:0,body:
[2021-11-05_14:23:59:914]size:0,body:
[2021-11-05_14:23:59:914]size:0,body:
[2021-11-05_14:23:59:914]size:0,body:
[2021-11-05_14:23:59:914]size:0,body:
[2021-11-05_14:23:59:914]******4********
[2021-11-05_14:23:59:914]MSG_Put i=4
[2021-11-05_14:23:59:914]size:1,body:0
[2021-11-05_14:23:59:914]size:1,body:1
[2021-11-05_14:23:59:914]size:1,body:2
[2021-11-05_14:23:59:914]size:1,body:3
[2021-11-05_14:23:59:914]size:1,body:4
[2021-11-05_14:23:59:914]size:0,body:
[2021-11-05_14:23:59:914]size:0,body:
[2021-11-05_14:23:59:914]size:0,body:
[2021-11-05_14:23:59:914]size:0,body:
[2021-11-05_14:23:59:914]size:0,body:
[2021-11-05_14:23:59:914]******5********
[2021-11-05_14:23:59:946]MSG_Put i=5
[2021-11-05_14:23:59:946]size:1,body:0
[2021-11-05_14:23:59:946]size:1,body:1
[2021-11-05_14:23:59:946]size:1,body:2
[2021-11-05_14:23:59:946]size:1,body:3
[2021-11-05_14:23:59:946]size:1,body:4
[2021-11-05_14:23:59:946]size:1,body:5
[2021-11-05_14:23:59:946]size:0,body:
[2021-11-05_14:23:59:946]size:0,body:
[2021-11-05_14:23:59:946]size:0,body:
[2021-11-05_14:23:59:946]size:0,body:
[2021-11-05_14:23:59:946]******6********
[2021-11-05_14:23:59:946]MSG_Put i=6
[2021-11-05_14:23:59:946]size:1,body:0
[2021-11-05_14:23:59:946]size:1,body:1
[2021-11-05_14:23:59:946]size:1,body:2
[2021-11-05_14:23:59:946]size:1,body:3
[2021-11-05_14:23:59:980]size:1,body:4
[2021-11-05_14:23:59:980]size:1,body:5
[2021-11-05_14:23:59:980]size:1,body:6
[2021-11-05_14:23:59:980]size:0,body:
[2021-11-05_14:23:59:980]size:0,body:
[2021-11-05_14:23:59:980]size:0,body:
[2021-11-05_14:23:59:980]******7********
[2021-11-05_14:23:59:980]MSG_Put i=7
[2021-11-05_14:23:59:980]size:1,body:0
[2021-11-05_14:23:59:980]size:1,body:1
[2021-11-05_14:23:59:980]size:1,body:2
[2021-11-05_14:23:59:980]size:1,body:3
[2021-11-05_14:23:59:980]size:1,body:4
[2021-11-05_14:23:59:980]size:1,body:5
[2021-11-05_14:23:59:980]size:1,body:6
[2021-11-05_14:23:59:980]size:1,body:7
[2021-11-05_14:23:59:980]size:0,body:
[2021-11-05_14:24:00:000]size:0,body:
[2021-11-05_14:24:00:000]******8********
[2021-11-05_14:24:00:000]MSG_Put i=8
[2021-11-05_14:24:00:000]size:1,body:0
[2021-11-05_14:24:00:000]size:1,body:1
[2021-11-05_14:24:00:000]size:1,body:2
[2021-11-05_14:24:00:000]size:1,body:3
[2021-11-05_14:24:00:000]size:1,body:4
[2021-11-05_14:24:00:000]size:1,body:5
[2021-11-05_14:24:00:000]size:1,body:6
[2021-11-05_14:24:00:000]size:1,body:7
[2021-11-05_14:24:00:000]size:1,body:8
[2021-11-05_14:24:00:000]size:0,body:
[2021-11-05_14:24:00:000]******9********
[2021-11-05_14:24:00:000]MSG_Put i=9
[2021-11-05_14:24:00:000]size:1,body:0
[2021-11-05_14:24:00:000]size:1,body:1
[2021-11-05_14:24:00:047]size:1,body:2
[2021-11-05_14:24:00:047]size:1,body:3
[2021-11-05_14:24:00:047]size:1,body:4
[2021-11-05_14:24:00:047]size:1,body:5
[2021-11-05_14:24:00:047]size:1,body:6
[2021-11-05_14:24:00:047]size:1,body:7
[2021-11-05_14:24:00:047]size:1,body:8
[2021-11-05_14:24:00:047]size:1,body:9
[2021-11-05_14:24:00:047]******10********
[2021-11-05_14:24:00:047]MSG_Put i=10
[2021-11-05_14:24:00:047]size:1,body:1
[2021-11-05_14:24:00:047]size:1,body:2
[2021-11-05_14:24:00:047]size:1,body:3
[2021-11-05_14:24:00:047]size:1,body:4
[2021-11-05_14:24:00:047]size:1,body:5
[2021-11-05_14:24:00:047]size:1,body:6
[2021-11-05_14:24:00:047]size:1,body:7
[2021-11-05_14:24:00:077]size:1,body:8
[2021-11-05_14:24:00:077]size:1,body:9
[2021-11-05_14:24:00:077]size:2,body:10
[2021-11-05_14:24:00:077]******11********
[2021-11-05_14:24:00:077]MSG_Put i=10
[2021-11-05_14:24:00:077]size:1,body:2
[2021-11-05_14:24:00:077]size:1,body:3
[2021-11-05_14:24:00:077]size:1,body:4
[2021-11-05_14:24:00:077]size:1,body:5
[2021-11-05_14:24:00:077]size:1,body:6
[2021-11-05_14:24:00:077]size:1,body:7
[2021-11-05_14:24:00:077]size:1,body:8
[2021-11-05_14:24:00:077]size:1,body:9
[2021-11-05_14:24:00:077]size:2,body:10
[2021-11-05_14:24:00:077]size:2,body:11
[2021-11-05_14:24:00:077]******12********
[2021-11-05_14:24:00:102]MSG_Put i=10
[2021-11-05_14:24:00:102]size:1,body:3
[2021-11-05_14:24:00:102]size:1,body:4
[2021-11-05_14:24:00:102]size:1,body:5
[2021-11-05_14:24:00:102]size:1,body:6
[2021-11-05_14:24:00:102]size:1,body:7
[2021-11-05_14:24:00:102]size:1,body:8
[2021-11-05_14:24:00:102]size:1,body:9
[2021-11-05_14:24:00:102]size:2,body:10
[2021-11-05_14:24:00:102]size:2,body:11
[2021-11-05_14:24:00:102]size:2,body:12
[2021-11-05_14:24:00:102]******13********
[2021-11-05_14:24:00:102]MSG_Put i=10
[2021-11-05_14:24:00:102]size:1,body:4
[2021-11-05_14:24:00:102]size:1,body:5
[2021-11-05_14:24:00:102]size:1,body:6
[2021-11-05_14:24:00:102]size:1,body:7
[2021-11-05_14:24:00:134]size:1,body:8
[2021-11-05_14:24:00:134]size:1,body:9
[2021-11-05_14:24:00:134]size:2,body:10
[2021-11-05_14:24:00:134]size:2,body:11
[2021-11-05_14:24:00:134]size:2,body:12
[2021-11-05_14:24:00:134]size:2,body:13
[2021-11-05_14:24:00:134]******14********
[2021-11-05_14:24:00:134]MSG_Put i=10
[2021-11-05_14:24:00:134]size:1,body:5
[2021-11-05_14:24:00:134]size:1,body:6
[2021-11-05_14:24:00:134]size:1,body:7
[2021-11-05_14:24:00:134]size:1,body:8
[2021-11-05_14:24:00:134]size:1,body:9
[2021-11-05_14:24:00:134]size:2,body:10
[2021-11-05_14:24:00:134]size:2,body:11
[2021-11-05_14:24:00:134]size:2,body:12
[2021-11-05_14:24:00:158]size:2,body:13
[2021-11-05_14:24:00:158]size:2,body:14
这个代码肯定有可以优化的地方,只是按照我这初学的水平,实在是不知道怎么优化了。自我感觉能写出来也就不赖了。
还望各路大神不吝赐教。。。