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 の unsigned char 値を取り、それが 0 ~ 9 の場合は同等の ascii を返すか、関数の完了後に呼び出し元のコードから参照できる小さなグローバル文字配列を操作することです。
この質問をするのは、同じベンダーの 2 つのコンパイラがこのコードを異なる方法で解釈するためです。
このコードは、RS485 経由で送信されたアドレス バイトを解析して、send-lcd-string 関数に簡単に渡すことができる文字列にする方法として書かれています。
このコードは、PIC18 アーキテクチャ (8 ビット uC) 用に書かれています。
問題は、特定のコンパイラの無料/評価版が、パフォーマンス ヒットを被りながら動作する完璧なアセンブリ コードを生成することですが、有料でおそらく優れていると思われるコンパイラは、すべてのバイト配列のアドレスを参照できるという犠牲を払って、より効率的にコードを生成することです。私のLCDディスプレイのグラフィックスを駆動するために使用されます。
典型的ではないアーキテクチャに独自のコンパイラを使用することで、多くの泥を水に入れていることは知っていますが、誰かがいくつかの提案をしてくれることを願っています.
ありがとう。