我正在开发一个嵌入式系统(Cortex M3)。为了将一些数据从设备发送到串行端口(在PC屏幕上显示),我使用了一些自己的函数,使用putchar()方法。
当我想发送integer或float时,我使用sprintf()将它们转换为字符串并将其发送到串行端口。
现在,他们的问题是,我正在使用Keil uVision IDE,它是有限的版本,最大32 KB。每当我在不同的函数中调用sprintf()时,我不知道为什么编译后代码的大小增加了太多。我现在已经超过了32 KB,我想知道我必须改变我的一些函数,使用其他的东西而不是sprintf!
有线索吗
3条答案
按热度按时间dldeef671#
有两种可能的版本(我自己都没有用过--我的编译器供应商通常提供一个精简版的
printf
供嵌入式使用):http://eprintf.sourceforge.net/- [2017年9月:不幸的是,似乎已经消失了,但源代码仍然在这里:]
http://www.sparetimelabs.com/tinyprintf/index.html- 2个文件,约1.4KB代码。启用“longs”的选项(意味着更大的代码大小)。支持前导零和字段宽度。没有浮点支持。
oewdyzsn2#
如果你想让它更高效,最好的方法可能是自己编写代码,或者在网上找到一些已经写好的代码。Int到字符串的转换非常简单,每个程序员都可以在不到30分钟的时间内完成。浮点数到字符串的转换有点复杂,取决于所使用的浮点格式。
为了方便起见,这里有一个简单的int到string算法,用于微控制器应用:
字符串
iezvtpos3#
你可以尝试
itoa()
或ftoa()
,并根据你的需求实现它们,我的意思是,当它们将它们转换为定义本身内部的字符时,使用putchar()
直接打印。这应该是工作,我认为。