pico-stdio
支持从 UART、USB、半主机等进行输入和输出的自定义 stdio 支持。
详细描述
注意:添加额外输入输出设备的 API 尚未被认为是稳定的。
模块
pico_stdio_semihosting
使用 RAM 半主机进行 stdout 的实验性支持。
pico_stdio_uart
使用 UART 进行 stdin/stdout 的支持。
pico_stdio_rtt
使用 SEGGER RTT 进行 stdin/stdout 的支持。
pico_stdio_usb
通过 USB 串行(CDC)进行 stdin/stdout 的支持。
函数
bool stdio_init_all (void): 初始化链接到二进制文件中的所有标准 stdio 类型。bool stdio_deinit_all (void): 反初始化链接到二进制文件中的所有标准 stdio 类型。void stdio_flush (void): 刷新所有缓冲输出。int stdio_getchar_timeout_us (uint32_t timeout_us): 在超时时间内从 stdin 返回一个可用字符。static int getchar_timeout_us (uint32_t timeout_us):stdio_getchar_timeout_us的别名,用于向后兼容。void stdio_set_driver_enabled (stdio_driver_t *driver, bool enabled)
向活动驱动程序列表中添加或移除驱动程序。
void stdio_filter_driver (stdio_driver_t *driver)
控制将输出限制到单个驱动程序。
void stdio_set_translate_crlf (stdio_driver_t *driver, bool translate)
控制传输时换行符到回车符的转换。
int stdio_putchar_raw (int c): 如果启用了 CR/LF 转换,则跳过转换的 putchar 变体。static int putchar_raw (int c):stdio_putchar_raw的别名,用于向后兼容。int stdio_puts_raw (const char *s)
如果启用了 CR/LF 转换,则跳过转换的 puts 变体。
static int puts_raw (const char *s)
stdio_puts_raw 的别名,用于向后兼容。
void stdio_set_chars_available_callback (void(**fn)(void **), void *param)
当有可用输入字符时获得通知。
int stdio_get_until (char *buf, int len, absolute_time_t until)
等待超时时间以将至少一个字符读入缓冲区。
int stdio_put_string (const char *s, int len, bool newline, bool cr_translation)
将缓冲区打印到 stdout,可选择追加换行符。
int stdio_getchar (void): getchar 的别名,即使在 PICO_STDIO_SHORT_CIRCUIT_CLIB_FUNCS == 0 时也肯定不会经过标准 C 库的实现。int stdio_putchar (int): putchar 的别名,即使在 PICO_STDIO_SHORT_CIRCUIT_CLIB_FUNCS == 0 时也肯定不会经过标准 C 库的实现。int stdio_puts (const char *s)
puts 的别名,即使在 PICO_STDIO_SHORT_CIRCUIT_CLIB_FUNCS == 0 时也肯定不会经过标准 C 库的实现。
int stdio_vprintf (const char *format, va_list va)
vprintf 的别名,即使在 PICO_STDIO_SHORT_CIRCUIT_CLIB_FUNCS == 0 时也肯定不会经过标准 C 库的实现。
int __printflike (1, 0) stdio_printf(const char *format
printf 的别名,即使在 PICO_STDIO_SHORT_CIRCUIT_CLIB_FUNCS == 0 时也肯定不会经过标准 C 库的实现。
函数文档
__printflike
int __printflike (1, 0)
printf 的别名,即使在 PICO_STDIO_SHORT_CIRCUIT_CLIB_FUNCS == 0 时也肯定不会经过标准 C 库的实现。
getchar_timeout_us
static int getchar_timeout_us (uint32_t timeout_us) [inline], [static]
stdio_getchar_timeout_us 的别名,用于向后兼容。
putchar_raw
static int putchar_raw (int c) [inline], [static]
stdio_putchar_raw 的别名,用于向后兼容。
puts_raw
static int puts_raw (const char * s) [inline], [static]
stdio_puts_raw 的别名,用于向后兼容。
stdio_deinit_all
bool stdio_deinit_all (void)
反初始化链接到二进制文件中的所有标准 stdio 类型。
此方法目前仅支持 stdio_uart 和 stdio_semihosting。
返回
若所有输出均成功反初始化则返回 true,否则返回 false。
参见
stdio_uart, stdio_usb, stdio_semihosting, stdio_rtt
stdio_filter_driver
void stdio_filter_driver (stdio_driver_t * driver)
控制将输出限制到单个驱动程序。
此方法应始终在已初始化的驱动程序上调用。
参数
- driver: 若非 null,则仅使用该驱动程序进行输入/输出(假设它在已启用驱动程序列表中);若为 NULL 则使用所有已启用的驱动程序。
stdio_flush
void stdio_flush (void)
刷新所有缓冲输出。
stdio_get_until
int stdio_get_until (char * buf, int len, absolute_time_t until)
等待超时时间以将至少一个字符读入缓冲区。
此方法在输入可用时立即返回,但可能返回多个字符,直至缓冲区末尾。
参数
- buf: 要读入的缓冲区
- len: 缓冲区长度
返回
读取的字符数,或 PICO_ERROR_TIMEOUT。
参数
- until: 若在此时间之后仍无可用字符则返回 PICO_ERROR_TIMEOUT。
stdio_getchar
int stdio_getchar (void)
getchar 的别名,即使在 PICO_STDIO_SHORT_CIRCUIT_CLIB_FUNCS == 0 时也肯定不会经过标准 C 库的实现。
stdio_getchar_timeout_us
int stdio_getchar_timeout_us (uint32_t timeout_us)
在超时时间内从 stdin 返回一个可用字符。
参数
- timeout_us: 超时时间(微秒),或 0 表示若无可用字符则不等待。
返回
0-255 之间的字符,或超时时返回 PICO_ERROR_TIMEOUT。
stdio_init_all
bool stdio_init_all (void)
初始化链接到二进制文件中的所有标准 stdio 类型。
在设置好时钟后调用此方法,以根据二进制文件中各自库的存在情况启用 UART、USB、半主机和 RTT 的 stdio 支持。
当配置了 stdio_usb 时,此方法可选择性地阻塞等待连接,通过 stdio_usb_init 中指定的变量(即 PICO_STDIO_USB_CONNECT_WAIT_TIMEOUT_MS)控制。
返回
若至少一个输出成功初始化则返回 true,否则返回 false。
参见
stdio_uart, stdio_usb, stdio_semihosting, stdio_rtt
stdio_put_string
int stdio_put_string (const char * s, int len, bool newline, bool cr_translation)
将缓冲区打印到 stdout,可选择追加换行符。
将 s 写入每个已注册的 stdio 驱动程序。调用在每个驱动程序接受字节后返回。
参数
- s: 要打印的字符
- len: s 的长度,或 -1 表示用 strlen 计算
- newline: 若为 true 则在字符串后追加换行符
- cr_translation: 若为 true 则执行换行符到回车符的转换
返回
从 s 写入的字符数(不包括任何追加的换行符);若并发 stdout 写入正在进行且设置了 PICO_STDIO_IGNORE_NESTED_STDOUT 则返回 0。
stdio_putchar
int stdio_putchar (int c)
putchar 的别名,即使在 PICO_STDIO_SHORT_CIRCUIT_CLIB_FUNCS == 0 时也肯定不会经过标准 C 库的实现。
stdio_putchar_raw
int stdio_putchar_raw (int c)
如果启用了 CR/LF 转换,则跳过转换的 putchar 变体。
stdio_puts
int stdio_puts (const char * s)
puts 的别名,即使在 PICO_STDIO_SHORT_CIRCUIT_CLIB_FUNCS == 0 时也肯定不会经过标准 C 库的实现。
stdio_puts_raw
int stdio_puts_raw (const char * s)
如果启用了 CR/LF 转换,则跳过转换的 puts 变体。
stdio_set_chars_available_callback
void stdio_set_chars_available_callback (void(**)(void **) fn, void * param)
当有可用输入字符时获得通知。
参数
- fn: 当有可用字符时调用的回调函数。传入 NULL 以取消任何现有回调。
- param: 传递给回调的指针。
stdio_set_driver_enabled
void stdio_set_driver_enabled (stdio_driver_t * driver, bool enabled)
向活动驱动程序列表中添加或移除用于输入/输出的驱动程序。
此方法应始终在已初始化的驱动程序上调用,且不可重入。
参数
- driver: 驱动程序
- enabled: true 表示添加,false 表示移除。
stdio_set_translate_crlf
void stdio_set_translate_crlf (stdio_driver_t * driver, bool translate)
控制传输时换行符到回车符的转换。
此方法应始终在已初始化的驱动程序上调用。
参数
- driver: 驱动程序
- translate: 若为 true,则在传输时将换行符转换为回车符。