如何避免PIC16f877A项目中有浮点到字符串转换的堆栈溢出?
发布时间:2020-12-16 07:15:58 所属栏目:百科 来源:网络整理
导读:我目前正在研究一种交通监控系统,该系统需要通过GSM / GPRS模块作为文本消息发送字符串(即浮动).我使用以下代码将这些浮点值转换为字符串,但在编译中“警告:(1393)检测到可能的硬件堆栈溢出;估计堆栈深度:10”恰好弹出. 我正在使用PIC 16f877A,除了更换MCU
我目前正在研究一种交通监控系统,该系统需要通过GSM / GPRS模块作为文本消息发送字符串(即浮动).我使用以下代码将这些浮点值转换为字符串,但在编译中“警告:(1393)检测到可能的硬件堆栈溢出;估计堆栈深度:10”恰好弹出.
我正在使用PIC 16f877A,除了更换MCU之外,我还能做些什么来避免这种情况? void reverse(char *str,int len) { int i=0,j=len-1,temp; while (i<j) { temp = str[i]; str[i] = str[j]; str[j] = temp; i++; j--; } } int intToStr(int x,char str[],int d) { int i = 0; while (x) { str[i++] = (x%10) + '0'; x = x/10; } while (i < d) str[i++] = '0'; reverse(str,i); str[i] = ' '; return i; } void ftoa(float n,char *res,int afterpoint) { int ipart = (int)n; float fpart = n - (float)ipart; int i = intToStr(ipart,res,0); if (afterpoint != 0) { res[i] = '.'; fpart = fpart * pow(10,afterpoint); intToStr((int)fpart,res + i + 1,afterpoint); } } 解决方法
你可以使用内置的“sprintf”函数,这样的东西(用pic16f1705编译好,应该跟你的照片相同):
char array[64]; float myvalue=2.0f; sprintf(array,"%f",myvalue); 查看XC8编译器的帮助文件,help-> XC8 Toolchain-> MPLAB XC8 Compiler->库函数 – > sprintf 您也可以使用printf直接打印到USART1: printf("my message to GSM transitter %f",myvalue); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |