Еще нашел проблему у ХС8. Теперь компилятор С как-то не правильно
считает константные выражения. Если записать вот так
void foo()
{
PORTA=((unsigned char)(1u*15))/2;
}
то все правильно получается
367 ;test.c: 5: PORTA=((unsigned char)(1u*15))/2;
368
369 ;incstack = 0
370 ; Regs used in _foo: [wreg]
371 07FD 3007 movlw 7
372 07FE 008C movwf 12 ;volatile
373 07FF 0008 return
А если немного изменить
void foo()
{
PORTA=((unsigned char)(1u*15))/2u;
}
То получаем
367 ;test.c: 5: PORTA=((unsigned char)(1u*15))/2u;
368
369 ;incstack = 0
370 ; Regs used in _foo: [status,2]
371 07FE 018C clrf 12 ;volatile
372 07FF 0008 return
Вот так опять правильно получается
void foo()
{
PORTA=((1u*15))/2u;
}
Т.е. преобразование типов в выражениях проходит не всегда корректно.