1)у некоторых сред есть возможность выбора : знаковый/беззнаковый char Такое приведение типов как у вас вообще не имеет смысла.
С типами лучше поступить так:
#define u8_t unsigned char
#define s8_t signed char
Если вам трудно сравнивать разные типы - пользуйтесь union
typedef union
{
s8_t s;
u8_t u;
}s8_u8_t;
s8_u8_t abc;
if(abc.u>254)
if(abc.s>-43)
А ваш пример компиляции, ПМСМ, вообще ошибочный. Дело даже не в выбрасывании условия (temp2 > -127), которое может происходить из-за его безсмысленности в случае безнаковости char.
Больще смущает компиляция условия цикла. Нпа момент сравнения в r24 уже дано нет переменной temp2. Она затёрта предыдыщими действиями. но почему-то не восстановлена из памяти. У меня что-то похожее было при попытке установить некоторые уровни оптимизации. Почему - не разбирался - просто выбрал другой уровень.