我正在读取通过RS485发送的值,这是编码器的值我首先检查它是否返回了E字符(编码器报告错误),如果没有则执行以下操作
*position = atoi( buffer );
// Also tried *position = (s32) strtol(buffer,NULL,10);
缓冲区中的值是4033536,位置设置为33536这不会每次都发生在这个函数中,可能是1000次中的1次,虽然我不算数。如果失败则重新设置程序计数器并再次执行该行会返回相同的结果,但再次启动调试器会导致值正确转换。
我正在使用keil uvision 4,它是一个定制板,使用stm32f103vet6和stm32f10库V2.0.1这个真的让我难过,在任何帮助之前都不会遇到这样的事情。
谢谢
答案 0 :(得分:0)
由于没有人知道我会发布我最终做的事情,即编写我自己的转换函数并不理想,但它有效。
bool cdec2s32(char* text, s32 *destination)
{
s32 tempResult = 0;
char currentChar;
u8 numDigits = 0;
bool negative = FALSE;
bool warning = FALSE;
if(*text == '-')
{
negative = TRUE;
text++;
}
while(*text != 0x00 && *text != '\r') //while current character not null or carridge return
{
numDigits++;
if(*text >= '0' && *text <= '9')
{
currentChar = *text;
currentChar -= '0';
if((warning && ((currentChar > 7 && !negative) || currentChar > 8 && negative )) || numDigits > 10) // Check number not too large
{
tempResult = 2147483647;
if(negative)
tempResult *= -1;
*destination = tempResult;
return FALSE;
}
tempResult *= 10;
tempResult += currentChar;
text++;
if(numDigits >= 9)
{
if(tempResult >= 214748364)
{
warning = TRUE; //Need to check next digit as close to limit
}
}
}
else if(*text == '.' || *text == ',')
{
break;
}
else
return FALSE;
}
if(negative)
tempResult *= -1;
*destination = tempResult;
return TRUE;
}