我是用原子的F7开发板,试了下使用链队列从串口接收数据,串口接收数据波特率为115200,一边收一边在main函数while(1)中检测队列是否为空,不空则将数据发送出来,但是当发送大量数据时时不时就会少几个字节,如果使用数组实现队列就不会出现这种问题,链队列中malloc使用C库函数和原子的内存管理都试过,都会出现漏字节的问题,想问下这种情况怎么回事呢?是malloc执行太耗时间了吗?如果在while(1)中再加一些其他的代码,漏字节的现象更严重了
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
单凭你一楼提供的一点点信息, 只能猜了, 我猜你的问题在发送那里, 是用库函数发的吧?
寄存器啊, 其实问题不在库函数, 而在库函数的工作方式, 发送后就在哪儿死停, 等到发送完成才退出, 发一个字节的时间就等于收一个字节的时间啊, 你再来个SYSTICK中断, 那来足够的时间给你处理接收?
当然, 你说的问题能有n个可能性, 我只是根据仅有的信息猜的
我也只能靠最可能的方向去找原因.
IRQ的要求很高, 除了时限问题, 还有一个问题是 "线程安全"
也就是说你的关键代码也很容易因为被中断而产生各种诡异的问题.
所以像FreeRTOS这种操作系统才会做出任务间通信机制, 包括IRQ
又或者什么原因都不是呢? 只是代码有BUG
一周热门 更多>