char byte_to_ascii(char value_to_convert, volatile char *converted_value) {
if (value_to_convert < 10) {
return (value_to_convert + 48);
} else {
char a = value_to_convert / 10;
double x = fmod((double)value_to_convert, 10.0);
char b = (char)x;
a = a + 48;
b = b + 48;
*converted_value = a;
*(converted_value+1) = b;
return 0;
}
}
此函数的目的是获取一个 0 到 99 的无符号字符值,并在它为 0-9 的情况下返回它的 ascii 等效值,或者操作一个小的全局字符数组,该数组可以在函数完成后从调用代码中引用。
我问这个问题是因为来自同一供应商的两个编译器以不同的方式解释此代码。
编写此代码是为了将通过 RS485 发送的地址字节解析为可以轻松传递给 send-lcd-string 函数的字符串。
此代码是为 PIC18 架构(8 位 uC)编写的。
问题是特定编译器的免费/评估版本会生成完美的汇编代码,虽然会受到性能影响,但付费且据称更出色的编译器会更有效地生成代码,但代价是能够引用我所有字节数组的地址用于驱动我的液晶显示器上的图形。
我知道通过使用专有编译器来构建不那么典型的架构,我在水中投入了大量的泥浆,但我希望有人能提出一些建议。
谢谢。