STM32/HK32实现消息列队

2 篇文章 0 订阅
1 篇文章 0 订阅

最近在摆弄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

这个代码肯定有可以优化的地方,只是按照我这初学的水平,实在是不知道怎么优化了。自我感觉能写出来也就不赖了。

还望各路大神不吝赐教。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值