armink / EasyLogger

An ultra-lightweight(ROM<1.6K, RAM<0.3k), high-performance C/C++ log library. | 一款超轻量级(ROM<1.6K, RAM<0.3k)、高性能的 C/C++ 日志库
MIT License
3.77k stars 1.17k forks source link

RTOS中连续打印,出现异常 #135

Closed fyyxxm closed 1 year ago

fyyxxm commented 1 year ago

如图代码,连续打印,会出现第一个打印丢失,最后一个打印出现两次。 异常

现象如下 异常2

把log_i更换成printf,及其他printf都是正常的。

使用log_i 单独打印一个信息也是正常的。

连续打印时,每个打印中间延迟10MS也是正常的。

开不开启异步打印,都是这种情况

fyyxxm commented 1 year ago

已解决: 原因是,这个log_i里面的数据都存在一个buff(数组)里。 而我的串口发送是DMA发送。 因为DMA不占用CPU资源,而在DMA发送上一个LOG数据时,下一个log会吧这个buff重新填入下个打印信息。 因此DMA发送的数据就变成了下一个打印信息了。

修改方法就是,在DMA发送之前,吧这个log的数据,放入一个新的buff里,用这个新的buff使用DMA发送就行了、