问题描述
1. 项目工程在 arm-none-gcc-eabi 编译器环境下,定义 _write() 重定向 printf() ,经测试发现确实已被正确重定向但是出现未能及时输出的问题。
2.每次输出只有堆满 1024 个字节大小时才会同时输出。
解决问题
从上述问题中就可以知道在 printf() 函数中存在一个缓冲区且大小为 1024 个字节大小。那么这是问题就很好解决了。
建议使用如下方法:
方法一:在字符串中最后加上 '\n' 转义字符
printf("test\n");
方法二:使用 fflush() 刷新缓冲区
printf("test");
fflush(stdout); //每次刷新都要使用
方法三:使用 setbuf() 禁用输出缓冲区
setbuf(stdout, NULL); //只要设置一次
printf("test");
至此,问题就已经解决了,如果还没成功建议检查是否已经正确重定向 printf() 函数。