我目前正在研究一种交通监控系统,该系统需要通过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编译器的帮助文件,help-> XC8 Toolchain-> MPLAB XC8 Compiler->库函数 – > sprintf
您也可以使用printf直接打印到USART1:
printf("my message to GSM transitter %f", myvalue);