如何避免PIC16f877A项目中有浮点到字符串转换的堆栈溢出?

如何避免PIC16f877A项目中有浮点到字符串转换的堆栈溢出?,第1张

概述我目前正在研究一种交通监控系统,该系统需要通过GSM / GPRS模块作为文本消息发送字符串(即浮动).我使用以下代码将这些浮点值转换为字符串,但在编译中“警告:(1393)检测到可能的硬件堆栈溢出;估计堆栈深度:10”恰好d出. 我正在使用PIC 16f877A,除了更换MCU之外,我还能做些什么来避免这种情况? void reverse(char *str, int len){int i= 我目前正在研究一种交通监控系统,该系统需要通过GSM / GPRS模块作为文本消息发送字符串(即浮动).我使用以下代码将这些浮点值转换为字符串,但在编译中“警告:(1393)检测到可能的硬件堆栈溢出;估计堆栈深度:10”恰好d出.
我正在使用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] = '
char array[64];float myvalue=2.0f;sprintf(array,"%f",myvalue);
'; 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编译好,应该跟你的照片相同):

printf("my message to GSM transitter %f",myvalue);

查看XC8编译器的帮助文件,help-> XC8 Toolchain-> MPLAB XC8 Compiler->库函数 – > sprintf

您也可以使用printf直接打印到USART1:

总结

以上是内存溢出为你收集整理的如何避免PIC16f877A项目中有浮点到字符串转换的堆栈溢出?全部内容,希望文章能够帮你解决如何避免PIC16f877A项目中有浮点到字符串转换的堆栈溢出?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1228128.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存