C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何避免PIC16f877A项目中有浮点到字符串转换的堆栈溢出?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前正在研究一种交通监控系统,该系统需要通过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] = '\0';
    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编译器的帮助@L_618_3@,Help-> XC8 Toolchain-> MPLAB XC8 Compiler->库函数 – > sprintf

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

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

大佬总结

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

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。