OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6758|回复: 5

关于数据处理的求助,万分感激

[复制链接]

54

主题

347

帖子

0

精华

高级会员

Rank: 4

积分
948
金钱
948
注册时间
2022-4-20
在线时间
356 小时
发表于 2023-1-4 16:23:53 | 显示全部楼层 |阅读模式
50金钱
有一堆数据从串口中收到,其代表着不同目标的状态,整堆数据类似于[1,x,x,x,2,x,x,x,3,x,x,x,4,x,x,x],其中1、2、3、4是目标的名字,x代表对应目标的信息,要的效果是能分别显示不同目标的状态以及历史状态,比如:目前显示1位于C点,但他曾经经过A点和B点。我现在是这样做的,从串口接收数组中截取完整的名字及状态,比如串口只收到了[1,x,x,x,2,x],我就把他拆成新数组[1,x,x,x]和串口接收数组[2,x],当串口继续收到数据时,将从[2,x]之后接着存储,而我的新数组就送去显示部分使用,我在显示部分判断目标的名字并显示对应目标的状态,然后另创建了一个数组来作为对应目标的历史状态数组,每收到一次状态的更新,就接着已写入的位置写入数据,存满后清空对应目标的显示。
问:判断名字以及使用对应目标的历史状态数组有什么好方法?目前我想的是老老实实的把名字放在一个名字数组中,使用switch来判断这次的目标名字(如果没在代表已有名字的数组中找到本次被判断的名字,则在此数组中创建一个名字,下一次进入名字判断时这个名字也会被case,比如数组中已有1、2、3、4,switch有4个分支,现在来了一个5,那么下一次switch时将有5个分支),然后在对应的case中更新历史状态以及当前状态。
整了一下午了,感觉太绕了,不知有没有大佬提供个思路?


最佳答案

查看完整内容[请看2#楼]

我最终使用的方法是创建两个数组,一个一维数组name[100],用于存储名字,另一个是二维数组BUF[100][1000],当接收到消息,先将名字与数组name中进行比对,如果接收到的名字不存在于数组name中,则在数组的最后一个有效成员的后方将名字写入其中,并返回这个名字的索引值n;如果接收到的名字存在,则只返回这个名字的索引值n。然后就对BUF[n][0]的值自加1,此值表示当前写入过的位置信息有多少个,接着对BUF[n][0]]处写入接收到的 ...
又菜又爱指点
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

54

主题

347

帖子

0

精华

高级会员

Rank: 4

积分
948
金钱
948
注册时间
2022-4-20
在线时间
356 小时
 楼主| 发表于 2023-1-4 16:23:54 | 显示全部楼层
我最终使用的方法是创建两个数组,一个一维数组name[100],用于存储名字,另一个是二维数组BUF[100][1000],当接收到消息,先将名字与数组name中进行比对,如果接收到的名字不存在于数组name中,则在数组的最后一个有效成员的后方将名字写入其中,并返回这个名字的索引值n;如果接收到的名字存在,则只返回这个名字的索引值n。然后就对BUF[n][0]的值自加1,此值表示当前写入过的位置信息有多少个,接着对BUF[n][BUF[n][0]]处写入接收到的位置信息,若存满了,则删除name[n]的名字,并对BUF[n][0]赋值为0;等到要显示的时候,就可以根据两个数组来确定不同目标的各个历史位置了
又菜又爱指点
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8206
金钱
8206
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-1-4 16:59:17 | 显示全部楼层
本帖最后由 LcwSwust 于 2023-1-4 17:00 编辑

"存满后清空"这感觉不好啊,我喜欢环形队列,也就是只存储最新的N个状态。
哪里“绕了”没看出来,代码都没有。
switch能判断动态的目标吗?咋实现的,看看代码?
专治疑难杂症
回复

使用道具 举报

54

主题

347

帖子

0

精华

高级会员

Rank: 4

积分
948
金钱
948
注册时间
2022-4-20
在线时间
356 小时
 楼主| 发表于 2023-1-4 17:30:38 | 显示全部楼层
LcwSwust 发表于 2023-1-4 16:59
"存满后清空"这感觉不好啊,我喜欢环形队列,也就是只存储最新的N个状态。
哪里“绕了”没看出来,代码都 ...

出题人要求我做的只显示一段时间,所以就没用环形
所谓的绕其实是觉得整个思路不简洁,而且目标增多的情况下怕时间有影响
switch这个是一开始的想法雏形,但是我忽略了不能使用变量做case,目前只能用if else if,这看着着实难受,现在处于一边写一边上网找思路的状态
又菜又爱指点
回复

使用道具 举报

2

主题

582

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2690
金钱
2690
注册时间
2014-5-23
在线时间
188 小时
发表于 2023-1-5 09:04:25 | 显示全部楼层
环形队列
回复

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2020-11-22
在线时间
11 小时
发表于 2023-1-5 21:10:12 | 显示全部楼层
简单说就是要维护一个(名字->状态数据在内存中的地址)这样的索引呗,如果名字很多的话可以考虑组成一个树,这样索引起来比较快
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 18:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表