以下内容以 i.MX RT1010 EVK 为例,使用 SDK_2_14_0_EVK-MIMXRT1010,开发环境为 MCUXpresso IDE。
一、PRINTF 测试
首先我们导入一个 hello_word 的例程,在里面增加整型正负数、浮点型正负数的 PRINTF 输出。
图 1. 测试 PRINTF 打印
我们会发现,默认情况下,负数和浮点全部都无法正常输出。
图 2. 默认输出结果
为了精简代码,SDK 默认是关闭负数和浮点数的 PRINTF 输出的,我们可以自己在代码中开启。
二、支持正负数
正负数这个比较简单,可以直接添加宏 PRINTF_ADVANCED_ENABLE=1 即可,如下图。
图 3. 使能正负数相关宏
重新编译下载,会发现负数已经能正常输出了。
图 4. 负数输出结果
三、支持浮点数
这里我们类似前面那样设置浮点数的宏,添加 PRINTF_ADVANCED_ENABLE=1,如果定义了宏 CR_INTEGER_PRINTF,需要删掉该宏。
图 5. 使能浮点相关宏
重新编译下载,会发现正数的浮点能正常输出,但负数的浮点会出现错误。
图 6. 浮点数输出结果
这里参考 MCUXpresso IDE 的 Help 文档,提到 SDK 默认使用的 Redlib 库默认只使能了 integer only,即是前面我们删掉的宏 CR_INTEGER_PRINTF。库 NewlibNano 可按照红框设置使能浮点打印。
图 7. 帮助文档
按照文档进行设置,如下图所示,记得勾选“Enable printf float”。
图 8. 更换 Library
重新编译下载,此时负数数的浮点也能正常输出了。
图 9. 浮点输出结果
由于 NewlibNano 是完整的 C 库,会比 Redlib 会大一些,所以编译出来的代码总大小也会更大,下面是两种 lib 占用空间的对比,大家可以根据需求衡量取舍。
图 10. 浮点输出结果
四、参考资料
(1) MCUXPresso IDE 帮助文档
(2) NXP Community《To complement solution how to printf float number in MCUXpresso IDE》,网址如下:
(3) NXP Community《Printf won't print floats》,网址如下:
https://community.nxp.com/t5/MCUXpresso-IDE/Printf-won-t-print-floats/m-p/1093043
评论