Цитата(singlskv @ Jun 20 2009, 01:20)

ВСЕ показанные варианты не применимы.... тк принципиально зависят от уровня оптимизации компилятора...
Ну нельзя пользовать |= в ситуации наличии 4 тактов для операции и все тут... ну повторим это в 125раз...
Вот, пожалуйста, результат компиляции на IAR EWAVR:
Код
WDTCR |= (1<<WDCE) | (1<<WDE);
00000000 B501 IN R16, 0x21
00000002 6108 ORI R16, 0x18
00000004 BD01 OUT 0x21, R16
WDTCR = 0;
00000006 E000 LDI R16, 0
00000008 BD01 OUT 0x21, R16
- между записями в регистр WDTCR только одна лишняя команда. Итого всего 2 такта между операциями записи.
А про оптимизацию вы не совсем правы, когда речь идет о записи в
регистры, то компилятор (IAR) никогда не опускает присваивание, даже если оно повторное. И это при любом типе оптимизации - как по размеру, так и по скорости.
Однако не забывайте название темы - сказано, что WatchDog запустить удалось. А, значит, компиляция велась в условиях, когда требование 4-х тактов соблюдалось. Поэтому это условие я не стала особо оговаривать.
Сообщение отредактировал Xenia - Jun 19 2009, 22:17