ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
21 ноября
1322013 Топик полностью
vpv.vpv (20.06.2023 09:50, просмотров: 229) ответил il-2 на Тем не менее моя мысль имеет право на существование. Остается выяснить, каким образом это право реализуется.
Да, если Компилятор не знает, что там записано (функцию записи закомментировать), то всё становится как надо: 
311 // WriteTimer (1000); // зарядить обратный таймер на 1000 мс
313 // Бла-бла-бла ....
316 eeTestTime = 1000 - uiReadTimer();

\ 00000000 94F8 CLI
\ 00000002 0192 MOVW R19:R18, R5:R4
\ 00000004 9478 SEI
\ 00000006 EE08 LDI R16, 232
\ 00000008 E013 LDI R17, 3
\ 0000000A 1904 SUB R16, R4
\ 0000000C 0915 SBC R17, R5
\ 0000000E E141 LDI R20, 17
\ 00000010 .... RCALL __eeput16_8

Но между загрузкой таймера, и его чтением, проходит время. Почему компилятор считает, что значение регистровой пары не изменилось? и как ему об этом сказать?


Исходники не перекомпилировал.


Функция чтения таймера:


unsigned int uiReadTimer ()
  {
  unsigned int uitemp;
  __disable_interrupt();
  uitemp = uiCommonTimer;
  __enable_interrupt();
  return uitemp;
  }