搜索
bottom↓
回复: 32

请教坛友,KEIL中PRINTF发送时间长如何修改?

[复制链接]

出75入8汤圆

发表于 2019-6-14 15:40:40 | 显示全部楼层 |阅读模式
一直用这个命令没问题,后来 用串口屏,有大量的数据,才发现这个命令发送数据时间长,请问有没有办法改一下?

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出10入120汤圆

发表于 2019-6-14 15:47:47 | 显示全部楼层
这本身就耗时长,没有办法的事情,除非你自己重写这函数。

这原装的函数考虑的场景太多所以过于臃肿,虽然我们使用的很少部分。

出0入362汤圆

发表于 2019-6-14 15:57:02 | 显示全部楼层
怎么发现时间长的?多半不是printf的问题吧,把串口波特率调高些?
再不行就先用sprintf输出到字符串,然后dma发送,不过程序得优化优化了。

出75入8汤圆

 楼主| 发表于 2019-6-14 16:00:38 | 显示全部楼层
makesoft 发表于 2019-6-14 15:47
这本身就耗时长,没有办法的事情,除非你自己重写这函数。

这原装的函数考虑的场景太多所以过于臃肿,虽然 ...

谢谢!时间太长,占用资源。

出75入8汤圆

 楼主| 发表于 2019-6-14 16:09:27 | 显示全部楼层
tomzbj 发表于 2019-6-14 15:57
怎么发现时间长的?多半不是printf的问题吧,把串口波特率调高些?
再不行就先用sprintf输出到字符串,然后 ...

我的是51单片机,没有DMA。

出0入362汤圆

发表于 2019-6-14 16:28:10 | 显示全部楼层
ZHAOBAO511 发表于 2019-6-14 16:09
我的是51单片机,没有DMA。

那得用发送完成中断,加上状态判断,在中断里启动发送下一个字符,稍微有点折腾,不过比卡着等发送完成的效率高多了。

出75入8汤圆

 楼主| 发表于 2019-6-14 17:20:22 | 显示全部楼层
PRINTF 是固定的函数,KEIL自带的。

出140入8汤圆

发表于 2019-6-14 22:04:22 | 显示全部楼层
DMA赶紧用上吧

出0入22汤圆

发表于 2019-6-14 22:33:22 来自手机 | 显示全部楼层
我将115200换成921600,速度提高了不少。

出0入0汤圆

发表于 2019-6-15 01:28:21 | 显示全部楼层
楼主赶紧换回stm32吧。
为了一个破51,问东问西,降低身价,不值。

出75入8汤圆

 楼主| 发表于 2019-6-15 10:10:29 | 显示全部楼层

谢谢!没用STM32。

出75入8汤圆

 楼主| 发表于 2019-6-15 10:10:58 | 显示全部楼层
zxq6 发表于 2019-6-14 22:33
我将115200换成921600,速度提高了不少。

几个串口设备,要换都要换。

出75入8汤圆

 楼主| 发表于 2019-6-15 10:11:22 | 显示全部楼层
su33691 发表于 2019-6-15 01:28
楼主赶紧换回stm32吧。
为了一个破51,问东问西,降低身价,不值。

不是便宜的51,是100元的51.

出0入42汤圆

发表于 2019-6-15 11:05:54 | 显示全部楼层
提高编程水平和对芯片的深入理解。
就是用51,也可以不用printf直接输出而是用sprintf转字符串再在串口中断内发送,串口中断发送采用环形缓冲区,待发送的数据打入缓冲区。

出0入0汤圆

发表于 2019-6-15 11:33:04 来自手机 | 显示全部楼层
makesoft 发表于 2019-6-14 15:47
这本身就耗时长,没有办法的事情,除非你自己重写这函数。

这原装的函数考虑的场景太多所以过于臃肿,虽然 ...

最大可能是同步发送造成的  把串口发送搞成异步才行   最简单sprintf再发送

出0入75汤圆

发表于 2019-6-15 11:49:44 来自手机 | 显示全部楼层
putc ()的问题吧,用中断发送,没发完不允许执行下一个printf。

出0入475汤圆

发表于 2019-6-15 12:14:39 来自手机 | 显示全部楼层
大家建议楼主先sprintf,估计一会楼主又会发现说,我内存不够啊,之前printf出去一次差不多2k个字符,我的51内存才256+1024个字节,

出0入0汤圆

发表于 2019-6-15 12:31:21 | 显示全部楼层
我就尽量不在mcu中用printf,太慢了,又慢又大的函数
输出通常是有限的,自行实现即可

出0入0汤圆

发表于 2019-6-15 12:51:33 来自手机 | 显示全部楼层
用51还敢用printf,谁给你的勇气?梁静茹吗?^_^

出0入0汤圆

发表于 2019-6-15 13:21:57 来自手机 | 显示全部楼层
1a2b3c 发表于 2019-6-15 12:14
大家建议楼主先sprintf,估计一会楼主又会发现说,我内存不够啊,之前printf出去一次差不多2k个字符,我的5 ...

100块的呢

出0入0汤圆

发表于 2019-6-15 13:24:53 来自手机 | 显示全部楼层
1a2b3c 发表于 2019-6-15 12:14
大家建议楼主先sprintf,估计一会楼主又会发现说,我内存不够啊,之前printf出去一次差不多2k个字符,我的5 ...

起码比c8051和68013那种牛逼  速度和容量都不差的  只是通用外设简陋  靠主频和内存扛可以

出75入8汤圆

 楼主| 发表于 2019-6-15 15:49:57 | 显示全部楼层
cocom 发表于 2019-6-15 11:05
提高编程水平和对芯片的深入理解。
就是用51,也可以不用printf直接输出而是用sprintf转字符串再在串口中断 ...

谢谢!后边试试!

出75入8汤圆

 楼主| 发表于 2019-6-15 15:50:55 | 显示全部楼层
Doding 发表于 2019-6-15 11:49
putc ()的问题吧,用中断发送,没发完不允许执行下一个printf。

上次看过一篇文章,有个人改过,后来找不到那篇文章了。

出75入8汤圆

 楼主| 发表于 2019-6-15 15:51:33 | 显示全部楼层
1a2b3c 发表于 2019-6-15 12:14
大家建议楼主先sprintf,估计一会楼主又会发现说,我内存不够啊,之前printf出去一次差不多2k个字符,我的5 ...

真心不懂你说的。

出75入8汤圆

 楼主| 发表于 2019-6-15 15:51:58 | 显示全部楼层
Earthman 发表于 2019-6-15 12:31
我就尽量不在mcu中用printf,太慢了,又慢又大的函数
输出通常是有限的,自行实现即可 ...

没办法的时候用一下。

出75入8汤圆

 楼主| 发表于 2019-6-15 15:52:24 | 显示全部楼层
hexenzhou 发表于 2019-6-15 12:51
用51还敢用printf,谁给你的勇气?梁静茹吗?^_^

这是为什么?51有那么差?

出75入8汤圆

 楼主| 发表于 2019-6-15 15:52:49 | 显示全部楼层

对哦,100的CPU。

出0入475汤圆

发表于 2019-6-15 16:09:47 | 显示全部楼层
我觉得楼主描述上更是有问题,或者是误导了大家,
第一就是你说的慢,到底是说因为要传输的内容太多了,所以慢,还是说因为printf函数计算判断本身消耗的mcu周期太长导致太慢,我敢肯定你自己都没有去搞清楚,因为要搞清楚很简单,示波器看一下串口输出的字节间是不是有很长的间隔?而那个就是处理时间,如果是的话,那么可以换个方式,比如前面一些人说的用自己的函数代替库函数,这样精简,以缩短处理时间;
如果不是上面说的那样,那么根本是无解的命题,这个你自己算一下就知道传输你的内容需要多长时间,如果消耗的时间和大致计算出来通信本身消耗的时间比较一致,那唯一解决的办法就是提高通信带宽,也就是提高波特率,这是唯一的解决之道。

举个例子,你用115200的波特率传输1k字节内容,为了方便估算,我们按一个字节100us来简单估算,那么1k字节内容就是100ms左右,10k个字符就需要1秒钟才能传完,如果你波特率更低,那么传输时间就成倍的加大了,我认为这个时间比起你的printf里面的一些计算、判断来说,后者完全可以忽略吧? 即使你换个自己写的函数或者DMA什么的,用于都摆脱不了串口本身的传输时间,因为即使不使用DMA,也可以改成上一个字节正在传输的这个100us内计算处理下一个字节的内容,这样整体下来实际上可以等效为处理本身完全不消耗时间了,时间都在串口移位本身上面,

出75入8汤圆

 楼主| 发表于 2019-6-17 08:36:42 | 显示全部楼层
1a2b3c 发表于 2019-6-15 16:09
我觉得楼主描述上更是有问题,或者是误导了大家,
第一就是你说的慢,到底是说因为要传输的内容太多了,所 ...

首先你要搞清楚,波特率一定的情况下,发送字节时间固定,怎么可能有长有短?唯一的可能性就是发完的中间延时。

出0入475汤圆

发表于 2019-6-17 09:30:37 | 显示全部楼层
你都说了中间延时,那么你自己测过么?延时多少,这个时间是不是与串口占用的时间相比到了可以相当的程度或者必须要计较的程度?如果是,前面也说了解决或者降低这个影响的方法,

出0入0汤圆

发表于 2019-6-17 10:24:22 | 显示全部楼层
楼主有个虚心的态度好不?楼上给你分析的够清楚明白了吧。看你签名,就这水平还教别人呢?

出0入475汤圆

发表于 2019-6-17 10:29:08 | 显示全部楼层
didadida 发表于 2019-6-17 10:24
楼主有个虚心的态度好不?楼上给你分析的够清楚明白了吧。看你签名,就这水平还教别人呢? ...

哎,我倒是没有想这些,本着讨论与交流的态度,大家共同进步而已,
你这么一说我到是真的觉得就此打住吧,不再跟这个贴了

出75入8汤圆

 楼主| 发表于 2019-6-17 10:48:35 | 显示全部楼层
didadida 发表于 2019-6-17 10:24
楼主有个虚心的态度好不?楼上给你分析的够清楚明白了吧。看你签名,就这水平还教别人呢? ...

楼上分析的是清楚的,看了他几个留言就知道了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 05:25

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表