我是用原子的F7开发板,试了下使用链队列从串口接收数据,串口接收数据波特率为115200,一边收一边在main函数while(1)中检测队列是否为空,不空则将数据发送出来,但是当发送大量数据时时不时就会少几个字节,如果使用数组实现队列就不会出现这种问题,链队列中malloc使用C库函数和原子的内存管理都试过,都会出现漏字节的问题,想问下这种情况怎么回事呢?是malloc执行太耗时间了吗?如果在while(1)中再加一些其他的代码,漏字节的现象更严重了
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
这样你的代码每次读uart的间隔越长, 漏字符的可能性就越大.
最佳的方法还是中断加ringbuff , 然后在非中断的代码里读取ringbuff数据.
ringbuff的大小决定了你在外面能有多长时间的处理间隔.
但是你说的 "链队列" 是用 malloc 的啊..
一般 ringbuff 是预先分配好的, 不会临时分配.
用数组实现队列才需要预先分配内存,用链表实现队列的目的就是想的是用的时候才分配,每个队列都可以分配不同大小的内存
“malloc的执行时间是不稳定的”这句话怎么说?我刚刚用systick测试了一下C库函数的malloc,分配一个链表节点的时间大约是100个tick,F7跑216M,每个tick是1/216us,100个tick就大约是0.5us,而原子的内存管理malloc分配一个节点大约是500个tick,也就大约是2.5us,115200bps每次中断的时间是69us,怎么会处理不完呢?
一周热门 更多>