Dja*_*ngo 8 c embedded printf cortex-m3 keil
我正在开发一个嵌入式系统(Cortex M3).为了将一些数据从设备发送到串口(在PC屏幕上显示),我使用putchar()方法使用一些自己的函数.
当我想发送整数或浮点数时,我使用sprintf()将它们转换为字符串并将它们发送到串行端口.
现在,他们的问题是我使用Keil uVision IDE,它是限量版本,最大32 KB.每当我在不同函数中调用sprintf()时,我不知道为什么编译后代码的大小增加太多.我现在已超过32 KB,我想我必须改变我的一些功能并使用其他东西而不是sprintf!
任何线索?
两个潜在的产品(我自己都没有使用过 - 我的编译器供应商通常会printf为嵌入式应用提供一个简化的产品):
http://eprintf.sourceforge.net/ - [2017年9月:不幸的是,似乎已经消失了,但源代码仍在这里:https://sourceforge.net/projects/eprintf/files/ ]
http://www.sparetimelabs.com/tinyprintf/index.html - 2个文件,大约1.4KB的代码.启用'longs'的选项(意味着更多的代码大小).支持前导零和字段宽度.没有浮点支持.
如果您希望它有效,最好的方法可能是自己编写代码,或者在网上找到一些已编写的代码.然而,Int到字符串的转换非常简单,每个程序员都可以在不到30分钟的时间内完成.浮点到字符串转换有点复杂,取决于使用的浮点格式.
为方便起见,这里有一个简单的int-to-string算法,用于微控制器应用:
void get_dec_str (uint8_t* str, size_t len, uint32_t val)
{
uint8_t i;
for(i=1; i<=len; i++)
{
str[len-i] = (uint8_t) ((val % 10UL) + '0');
val/=10;
}
str[i-1] = '\0';
}
Run Code Online (Sandbox Code Playgroud)
您可以尝试itoa()或ftoa()根据您的要求实现这些。我的意思是,它们将这些字符转换为定义本身内部的字符,用于putchar()直接打印。
我认为这应该可行。