puts() 能工作,但在TI的 Code Composer Studio中,使用MSPM0L1306 LaunchPad时 printf() 一直没有输出
我在TI MSPM0L 1306 Launchpad开发板上运行一段简单的代码,使用Code Composer Studio。
#include <stdio.h>
int main(void) {
// ...
puts("Yea, we are running now.");
// ...
}
它工作正常,在Studio的“CIO”窗口中输出消息。把 puts() 换成 printf() 后就不再工作,没有输出。我已经在链接选项中定义了堆栈和堆的大小。
我已经浏览了TI的文档“Tips for using printf”(https://software-dl.ti.com/ccs/esd/documents/sdto_cgt_tips_for_using_printf.html)但仍然没有头绪。
我是不是漏掉了什么很简单的地方?我在网上找到的所有参考资料都已经是多年前的,与当前Code Composer Studio不太相关。
解决方案
I/O通常是带缓冲的。
它会在缓冲区满或遇到换行符时自动刷新(更多信息请看这里:What is it with printf() sending output to buffer?)。
正如你在 puts 文档 中看到的,它会添加一个换行符:
将以null结尾的字符串str的每个字符,以及一个额外的换行符 '\n' 写入输出流stdout
(强调为我所加)
另一方面 printf 不会添加换行符,这解释了为什么你看不到输出(因为仍然在缓冲区中)。
要解决它,要么在调用后添加一个换行符:
//------------------------------vv---
printf("Yea, we are running now.\n");
或者在对 printf 调用之后,使用 fflush 手动刷新流:
fflush(stdout);
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。