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 и вернуть либо его эквивалент ascii в случае 0-9, либо манипулировать небольшим глобальным массивом символов, на который можно ссылаться из вызывающего кода, следующего за функцией завершение.
Я задаю этот вопрос, потому что два компилятора от одного поставщика интерпретируют этот код по-разному.
Этот код был написан как способ разбить адресные байты, отправленные через RS485, в строки, которые можно легко передать в функцию send-lcd-string.
Этот код написан для архитектуры PIC18 (8-битный UC).
Проблема в том, что бесплатная / ознакомительная версия конкретного компилятора генерирует идеальный код сборки, который работает, хотя и страдает от снижения производительности, но платный и предположительно превосходный компилятор генерирует код более эффективно за счет возможности ссылаться на адреса всех мои байтовые массивы используются для управления графикой на моем ЖК-дисплее.
Я знаю, что я выливаю много грязи в воду, используя собственный компилятор для менее типичной архитектуры, но я надеюсь, что у кого-то есть некоторые предложения.
Спасибо.