单片机下使用printf的问题及替代方法
2016-09-12 10:29
330 查看
之前也写过如何在IAR+STM32组合下实现printf的方法,虽然可以用,但是重写的串口发送函数有一个极大的问题就是必须是阻塞函数,假设是DMA方式的发送,输出的问题就比较大了,printf的具体实现不想深究,我看到的现象就是printf不断的调用重写的串口发送函数,而采用DMA方式会导致缓冲区被改写而传送错误的字符、字符组合。
解决方案就是比较简单了,采用sprintf函数,把格式化数据以字符的形式记录到缓冲区(千万是static或者全局的),并且返回写入的字符长度,再把地址及长度送给DMA控制器。等到DMA传输中断再传输信号量通知可以继续发送下一帧数据,不然在发送完前一帧之前调用DMA发送函数还是会破坏缓冲区的数据。
解决方案就是比较简单了,采用sprintf函数,把格式化数据以字符的形式记录到缓冲区(千万是static或者全局的),并且返回写入的字符长度,再把地址及长度送给DMA控制器。等到DMA传输中断再传输信号量通知可以继续发送下一帧数据,不然在发送完前一帧之前调用DMA发送函数还是会破坏缓冲区的数据。
相关文章推荐
- WIN7下使用sublime text3替代arduino IDE(安装方法和所遇到的问题)
- 单片机中使用printf打印浮点数问题
- 51单片机的Printf使用方法
- 关于在arm裸板编程时使用printf问题的解决方法
- 使用printf修改变量的值 —— VS2008中使用%n输出遇到的问题及解决方法
- 关于在arm裸板编程时使用printf问题的解决方法
- 【单片机笔记】51串口printf的使用和变量循环问题
- 解决变参数问题:va_list、va_start、vsnprintf、va_end的使用方法和实例
- 关于在arm裸板编程时使用printf问题的解决方法
- 使用printf修改变量的值 —— VS2008中使用%n输出遇到的问题及解决方法
- 在JBossPortal中使用MySQL5出现数据截断问题的解决方法
- 使用Axis部署Web服务时的常见问题及其解决方法(转)
- 使用webservice解决多系统登陆问题(方法一)
- 使用ld的“-Ttext”选项时可能产生的一个问题的解决方法
- 使用Apache Axis部署 Web服务时的常见问题及其解决方法
- 关于使用asp.net调试器出现的问题及相关解决方法
- 算法导论中间关于递归问题的master method的替代方法
- 关于使用VS.Net2003调试器出现的问题及相关解决方法
- 安装完vs.2005之后,重新安装iis后无法使用http方式访问asp.net工程的页面的问题的解决方法
- 使用VS2005 CTP July调试WinForm的一个问题,解决方法与各位分享。