解决GD32VF103编译printf无法打印 float
在GD32VF103编译后,采用printf打印float变量时,总是无法显示,是因为编译时采用用newlib-nano库,但是这个库对printf做了优化,在eclipse的build配置use-newlib-nano
的选项取消勾选,就可以了
但是这样的话,编译文件就会变大,程序太大的话,就下不进去了。所以,只能用于调试,调完后,还是改回去吧。或者自己做小数显示。
什么是newlib
Newlib是一个面向嵌入式系统的C运行库,由Cygnus Solutions收集组装的一个源代码集合,取名为newlib,现在由Red Hat维护,最新的版本是2.1.0。对于与GNU兼容的嵌入式C运行库,Newlib并不是唯一的选择,但是从成熟度来讲,newlib是最优秀的。
Newlib的特点包括以下几个方面:
轻量级:Newlib是一种轻量级的C语言标准库,大小只有几百KB,非常适合嵌入式系统使用。
移植性:Newlib可以运行在各种处理器平台和操作系统上,方便用户进行代码移植。
支持嵌入式系统:Newlib适合嵌入式系统中使用,提供了对底层硬件的支持,如中断、定时器等。
标准兼容:Newlib符合ANSI C和POSIX标准,提供了标准C库所需的所有基本函数和数据类型。
总的来说,Newlib具有轻量级、移植性强、支持嵌入式系统、标准兼容等特点,非常适合在嵌入式系统中使用。
什么是newlib-nano
newlib-nano是一个针对嵌入式系统优化的开源C库,特别适用于小型内存的MCU。它是newlib库的一个变种,专门进行了代码和数据大小缩减以及MCU特性优化。与使用标准版本的newlib相比,对于C和C++项目,使用newlib-nano可以极大地减少应用程序的大小。
newlib-nano在保持newlib所有功能的基础上,重新实现了printf和scanf等函数,以进一步减小代码大小。同时,它支持C89标准的转换说明符,移除了一些不必要的功能。但需要注意的是,newlib-nano并不支持C99中引入的新格式说明符,例如%hhX和%llX。总的来说,newlib-nano在提供丰富功能的同时,注重代码大小和运行效率的优化,使其尤其适合于资源有限的嵌入式系统。