搜索
bottom↓
回复: 10

printf不加换行符不输出怎么办?

[复制链接]

出0入0汤圆

发表于 2021-7-30 16:33:47 | 显示全部楼层 |阅读模式
先说现象:
printf带换行符“\n”时正常输出,不带“\n”时不输出,直到下一个有“\n”的语句时才一起输出
硬件是:stm32f103rct6(我觉得跟硬件没关系)
环境是:
不是用的keil,ARM-GCC 套件 + VScode,按照链接中的方法搭建的:
https://blog.csdn.net/cqy1028/article/details/113984775

printf重定向实现方式为:
  1. #ifdef __GNUC__
  2. #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
  3. #else
  4. #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
  5. #endif

  6. PUTCHAR_PROTOTYPE
  7. {
  8.     HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);
  9.     return ch;
  10. }
  11. int _write(int file, char *ptr, int len)

  12. {
  13.       int DataIdx;
  14.       for (DataIdx = 0; DataIdx < len;DataIdx++)
  15.      {
  16.            __io_putchar(*ptr++);
  17.      }
  18.       return len;
  19. }
复制代码

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

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

出0入42汤圆

发表于 2021-7-30 16:55:53 | 显示全部楼层
fflush(stdout);

出0入0汤圆

 楼主| 发表于 2021-7-30 17:05:05 | 显示全部楼层

谢谢!确实可以。

出0入0汤圆

 楼主| 发表于 2021-7-30 20:03:38 | 显示全部楼层

但是为什么呢?是微库本来就这样吗?

出300入477汤圆

发表于 2021-7-30 20:10:33 来自手机 | 显示全部楼层
DB_Cooper 发表于 2021-7-30 20:03
但是为什么呢?是微库本来就这样吗?

就是这样规定的。
你在电脑上试一下,会发现也一样

出0入362汤圆

发表于 2021-7-30 21:06:48 | 显示全部楼层
DB_Cooper 发表于 2021-7-30 20:03
但是为什么呢?是微库本来就这样吗?

标准库就这样, 不遇到换行符或者fflush, 就得攒够一批数据才输出一次.

出0入0汤圆

 楼主| 发表于 2021-7-30 21:33:45 | 显示全部楼层
tomzbj 发表于 2021-7-30 21:06
标准库就这样, 不遇到换行符或者fflush, 就得攒够一批数据才输出一次.

正点原子的串口例程好像不是呀

出0入4汤圆

发表于 2021-7-31 01:53:22 来自手机 | 显示全部楼层
HAL库,不能include后直接用printf,要按照一楼方法重定向。正点原子的就不是这样,相比前者就方便多了。

出100入312汤圆

发表于 2021-7-31 07:16:07 来自手机 | 显示全部楼层
kundi 发表于 2021-7-31 01:53
HAL库,不能include后直接用printf,要按照一楼方法重定向。正点原子的就不是这样,相比前者就方便多了。 ...

应该都要重定向

出0入0汤圆

 楼主| 发表于 2021-7-31 07:29:31 | 显示全部楼层
kundi 发表于 2021-7-31 01:53
HAL库,不能include后直接用printf,要按照一楼方法重定向。正点原子的就不是这样,相比前者就方便多了。 ...

正点原子重定向了,只是他用的标准C库,我用的这个方法是微库

出0入0汤圆

 楼主| 发表于 2021-8-2 16:07:28 | 显示全部楼层
除了楼上说的flush(感觉每次加flush有点麻烦),还有个办法是在初始化的时候就加上一句:
setvbuf(stdout, NULL, _IONBF, 0);
也就是把stdout的缓冲改成0.
只是不知道有没有什么负面影响
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-29 20:06

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

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