STM32F7使用链队列从串口接收数据出现漏掉字节的问题

2019-07-20 02:56发布


我是用原子的F7开发板,试了下使用链队列从串口接收数据,串口接收数据波特率为115200,一边收一边在main函数while(1)中检测队列是否为空,不空则将数据发送出来,但是当发送大量数据时时不时就会少几个字节,如果使用数组实现队列就不会出现这种问题,链队列中malloc使用C库函数和原子的内存管理都试过,都会出现漏字节的问题,想问下这种情况怎么回事呢?是malloc执行太耗时间了吗?如果在while(1)中再加一些其他的代码,漏字节的现象更严重了
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
ZHDX
1楼-- · 2019-07-20 23:15
 精彩回答 2  元偷偷看……
我是传奇1
2楼-- · 2019-07-21 01:01
 精彩回答 2  元偷偷看……
我是传奇1
3楼-- · 2019-07-21 06:39
本帖最后由 我是传奇1 于 2019-3-26 17:12 编辑
我是传奇1 发表于 2019-3-26 16:52
确实,你说的对,忘记了malloc是需要去寻找可用的内存来分配的了

我刚刚测了如果用的是原子内存管理的mallco,先分配了5K个节点的内存,再分配一个节点的内存,再去释放这一个节点的内存,这时候在内存管理表中寻找一个节点的可用内存去分配和释放肯定要很久了,但是分配这一个节点也只用了28us,释放的时间也不到1us,况且实际我用队列的时候队列中的数据肯定不会堆积到5K个节点这么多,这怎么解释呢?
我是传奇1
4楼-- · 2019-07-21 10:44
ZHDX 发表于 2019-3-26 16:44
你这样测试不反映复杂的实际运行情况.  

除非你的程序就只有1种场合分配内存, 其他场合不用malloc了

我刚刚测了如果用的是原子内存管理的mallco,先分配了5K个节点的内存,再分配一个节点的内存,再去释放这一个节点的内存,这时候在内存管理表中寻找一个节点的可用内存去分配和释放肯定要很久了,但是分配这一个节点也只用了28us,释放的时间也不到1us,况且实际我用队列的时候队列中的数据肯定不会堆积到5K个节点这么多,这怎么解释呢?
edmund1234
5楼-- · 2019-07-21 13:05
 精彩回答 2  元偷偷看……
我是传奇1
6楼-- · 2019-07-21 18:05
 精彩回答 2  元偷偷看……

一周热门 更多>