中断方式下使用Printf

本文探讨了在Keil环境下,如何将printf函数改造成中断方式以提高效率。原本printf函数由于每次调用fputc都会等待发送完成,导致发送大量数据时耗时较长。通过中断方式,发送第一个字符后立即开启串口发送,并将后续字符放入队列,由中断服务程序处理发送,从而减少延迟。实测在矿浆项目中已成功应用。
摘要由CSDN通过智能技术生成

Keil下使用printf函数,很方便,大家可以参考网上的其他文章。

 

Printf函数是系统自定义函数,其中内部重复调用了fputc函数,每次发送1个字节ch。

参考下述代码中#if 0的部分。

 

当发送字节数较多时,printf消耗的时间非常长,因为每次都要等待发送完成。

时间计算:串口设置115200,n,8,1,对于大包发送,一般用较快的bps。

如果发送100字节,大概1100位(算上起始位和停止位)。

消耗的时间为:1100/115200 = 9ms,实际运行时间估计要2~3倍,也就是30ms左右。

如果字节数更多或波特率更低,消耗的时间会更长。

 

考虑将printf做成中断方式,基本的流程就是:

  1. 在发送第一个字符时,立即打开串口发送;
  2. 当发送后续字符时,直接压入队列,不再等待串口发送完成;
  3. 中断函数中,如果发送队列中还有数据没有发送完成
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值