我已经在Raspberry pi 4上为Raspberry PI Pico安装了C/C++ SDK。然后我通过USB成功编译并执行了hello world示例。我使用 minicom 监视输出,到目前为止一切正常。
但是,当我在while循环之前加一个printf时,它没有任何效果。
这是我添加了 1 行的 SDK 示例:
#include <stdio.h>
#include "pico/stdlib.h"
int main() {
stdio_init_all();
printf( "Let's start\n" ); // <-- This is my addition
while (true) {
printf("Hello, world!\n");
sleep_ms(1000);
}
return 0;
}
我确实按照需要在 minicom 中每秒看到一次
Hello World!
,但没有看到Let's start
。可能是什么原因,我该如何克服?
更新:评论中一些问题的答案:
fflush(stdout);
。它没有帮助sleep_ms(1000)
。这也没有帮助最可能的原因是
stdio_init_all()
返回时USB初始化没有完成。第一份打印件将丢失。
定义
PICO_STDIO_USB_CONNECT_WAIT_TIMEOUT_MS
让它等待一定的时间。您必须在包含 pico
标题之前定义它,否则,pico/stdio_usb.h
会将其定义为 0
.
// this must be done before indirectly including "pico/stdio_usb.h":
#ifndef PICO_STDIO_USB_CONNECT_WAIT_TIMEOUT_MS
#define PICO_STDIO_USB_CONNECT_WAIT_TIMEOUT_MS (5000)
#endif
#include <stdio.h>
#include "pico/stdlib.h"
int main(void) {
_Bool result = stdio_init_all(); // should now wait for up to 5 seconds
printf( "Let's start.\n" );
for(unsigned co = 0;; ++co) {
printf("Hello, world! %u\n", co); // Aconcagua's suggestion. Do you see "0"?
sleep_ms(1000);
}
return 0;
}
如果 5 秒不够,请尝试无限期地等待,而是使用
stdio_usb_init()
显式初始化 USB,根据文档,如果您不希望在建立连接之前丢弃任何初始标准输出输出,“很有用“.
#ifndef PICO_STDIO_USB_CONNECT_WAIT_TIMEOUT_MS
#define PICO_STDIO_USB_CONNECT_WAIT_TIMEOUT_MS (-1)
#endif
#include <stdio.h>
#include "pico/stdlib.h"
int main(void) {
_Bool result = stdio_usb_init(); // init USB explicitly
printf( "Let's start.\n" );
for(unsigned co = 0;; ++co) {
printf("Hello, world! Init: %d id: %u\n", (int)result, co);
sleep_ms(1000);
}
return 0;
}