因为printf默认使用的是查询方式,会一直等待串口,直到发送最后一个字符,<br />白白浪费MCU时间,试想我们现在用的最高的波特率也就是115200bps,很多时候用的是9600bps,然而晶振都是24MHz,甚至用1T的MCU,使用printf,9600bps发送10个字符需要10.4mS的时间,相当于250000个时钟周期,即使用115200bps也需要0.868mS,20833个时钟周期。所以我宁可在内存里面开辟出16个字节的串口缓冲区,然后用中断的方式来处理。<br />当然了,如果你不停得往串口发数据,或者一次发送了16个字节以上的数据,串口缓冲区满了,那你还是会停下来等待缓冲区,不过即使这样,你也能在两次发送之间获得很多时钟周期的好处。<br />我现在凡是涉及串口输出的程序都使用自己的串口缓冲程序,<br />具体性能没有测试,基本上在串口跑到90%流量的时候,其他程序还能得到90%的MCU时间。<br />
|