单位开发的温湿度监测仪项目,用的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)》许可协议授权。版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!
试一试