ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
19 апреля
992281
AlexBi (06.04.2020 15:59, просмотров: 6016)
Еще нашел проблему у ХС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;
}

Т.е. преобразование типов в выражениях проходит не всегда корректно.