реклама на сайте
подробности

 
 
> Mega1281. Адресация памяти.
adc
сообщение Jun 8 2008, 06:10
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 409
Регистрация: 29-10-07
Пользователь №: 31 836



Ув. форумчане прошу помочь с вопросом: Почему в даташите на M1281 инициализация вачдоктаймера выглядит так:
Код
WDT_off:
; Turn off global interrupt
cli
; Reset Watchdog Timer
wdr
; Clear WDRF in MCUSR
in r16, MCUSR
andi r16, (0xff & (0<<WDRF))
out MCUSR, r16
; Write logical one to WDCE and WDE
; Keep old prescaler setting to prevent unintentional time-out
in r16, WDTCSR
ori r16, (1<<WDCE) | (1<<WDE)
out WDTCSR, r16
; Turn off WDT
ldi r16, (0<<WDE)
out WDTCSR, r16
; Turn on global interrupt
sei
ret

А студия ругается на операнды в команде "out"?
Код
(614): error: Operand 1 out of range: 0x60


--------------------
Умный программист пишет тупым кодом гениальные вещи, а не наоборот...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ae_
сообщение Jun 9 2008, 08:57
Сообщение #2


Участник
***

Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695



Цитата(vet @ Jun 9 2008, 13:47) *
Есть у хороших исходников такое свойство - самодокументируемость.

давайте разберём этот хороший исходник:
Код
; Clear WDRF in MCUSR
in r16, MCUSR
andi r16, (0xff & (0<<WDRF))
out MCUSR, r16

первой инструкцией ЧИТАЕМ регистр MCUSR
затем только что прочитанное значение затираем нулём
и выводим обратно в порт.

Мне одному кажется, что первая операция лишняя?
тогда вот не менее самодокументированный код:
Код
clr r16
out MCUSR, r16


Может быть изначально подразумевалось вот так:
Код
; Clear WDRF in MCUSR
in r16, MCUSR
andi r16, (0xff & ~(1<<WDRF))
out MCUSR, r16

я понимаю, когда для читаемости кода используют (1<<bit3)|(0<<bit2)|(1<<bit1)|(0<<bit0), но когда (0<<N) используется как единственный результат? в чём смысл?

Сообщение отредактировал ae_ - Jun 9 2008, 08:58
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 20:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01372 секунд с 7
ELECTRONIX ©2004-2016