单位开发的温湿度监测仪项目,用的STM32F030C8T6,64kb的flash空间,bootloader占用了2KB,配置信息和升级信息用了2kb,历史数据用了4KB,还得放两个APP,所以一个APP只有28kb的空间了,写的过程中,突然报空间不足了,只能优化代码了,想起来调用了的atof,感觉他应该很大,屏蔽调用后,直接节省出来1kb,所以还是自己写一个转换吧
因为程序还可能调用在模组驱动上,用的AT指令,空格比较多,所以一开始先过滤下空格信息,最多过滤5个,过滤结束后,开始转换,整数比较好转换,直接`val = val*10+*port-'0';`就好了,小数部分轮到哪位小数了存在变量temp中,每次转换完小数,让temp*0.1
//字符串转小数
double app_atof(const char* port)
{
double val;
double temp;
bool int_part; //转换整数部分
int i;
//过滤一下空格
for(i = 0; i < 5; i++)
{
if(*port == ' ')
port++;
else
break;
}
val = 0;
int_part = true;
while ((*port >= '0' && *port <= '9') || *port == '.')
{
if(*port == '.')
{
if(int_part == false) //如果遇到第二个小数点,直接返回
return val;
//遇到小数点,开始转换小数部分
int_part = false;
temp = 0.1;
port++;
}
else
{
if(int_part)
{
val = val*10+*port-'0';
}
else
{
val = val + temp * (*port - '0');
temp *= 0.1;
}
port++;
}
}
return val;
}
下面截图是调用atof的代码大小和调用自己写的app_atof后的代码大小,节省出来1156个字节
收藏
扫描二维码,在手机上阅读
版权说明
文章采用: 《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权。版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!

试一试