格式化输出
应用程序以及Zephyr本身都需要基础设施来格式化值以供用户使用。标准的C99库*printf()
功能满足了对流输出设备或内存缓冲区的需求,但在嵌入式系统中,设备可能不接受流数据,而内存可能无法存储格式化的输出。
内部ZephyrAPI传统上为printk()
和Zephyr的内部最小libc提供了这个功能,但有单独的内部接口,日志记录、跟踪、shell和使用这些api或标准libc例程构建的其他应用程序。
cbprintf()
公共api转换C99格式的字符串和参数,通过回调机制一次提供一个字符的输出,替换原来的内部函数,并为几乎所有的C99格式规范提供支持。在Zephyr中现有使用的s*printf()
C库可以转换为snprintfcb(),以避免使用libc。
几个Kconfig选项控制启用的特性集,允许控制特性和内存使用:
CONFIG_CBPRINTF_FULL_INTEGRAL
或CONFIG_CBPRINTF_REDUCED_INTEGRAL
CONFIG_CBPRINTF_FP_SUPPORT
- `CONFIG_CBPRINTF_FP_A_SUPPORT
`
- `CONFIG_CBPRINTF_FP_ALWAYS_A
`
CONF