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

 
 
> Пара вопросов (ATmega8.C, WinAVR)
AlexKLm
сообщение Mar 25 2008, 19:32
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 160
Регистрация: 17-03-08
Из: Мурманская
Пользователь №: 35 989



Есть в ATmega8.pdf табличка под названием
Register Summary
и в ней строчка:
0x3F (0x5F) SREG I T H S V N Z C 7

Что значит 0x3F (0x5F)?
SREG имеет вроде как один адрес в I/O пространстве, или еше какой-нибудь?

Другой вопрос. Убиение сторожевой собаки, сделанное inline макросом
из заголовочного файла, в дизасебле выглядит так:
67a: 81 bd out 0x21, r24 ; 33
67c: 11 bc out 0x21, r1 ; 33
67e: 0f be out 0x3f, r0 ; 63

А то же самое, но сделаное следующим кодом (в main())

WDTCR |= (1<<WDCE) | (1<<WDE);//и тут же меняем WDE на 1 и в следующие 4 клока меняем WDE
WDTCR &= ~(1<<WDE);// -т.е. WDE устанавливаем в 0 , запрещаем дог

производит такой код:
716: a1 e4 ldi r26, 0x41 ; 65
718: b0 e0 ldi r27, 0x00 ; 0
71a: e1 e4 ldi r30, 0x41 ; 65
71c: f0 e0 ldi r31, 0x00 ; 0
71e: 80 81 ld r24, Z
720: 88 61 ori r24, 0x18 ; 24
722: 8c 93 st X, r24
724: a1 e4 ldi r26, 0x41 ; 65
726: b0 e0 ldi r27, 0x00 ; 0
728: e1 e4 ldi r30, 0x41 ; 65
72a: f0 e0 ldi r31, 0x00 ; 0
72c: 80 81 ld r24, Z
72e: 87 7f andi r24, 0xF7 ; 247
730: 8c 93 st X, r24

Как видно, длина кода слегка не одинаковая. Но непонятно другое, почему тут используется
0x41 вместо 0x21? Из таблицы известно что 0x21 (0x41) это WDTCR. Так всеже 0x21 или 0x41?


--------------------
Демократия - это когда считается, что два дурака лучше одного умного
Суверенная демократия - это когда считается, что один дурак лучше двух дураков
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AlexKLm
сообщение Mar 25 2008, 21:09
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 160
Регистрация: 17-03-08
Из: Мурманская
Пользователь №: 35 989



vet, спасибо за ответ, жалко что я не смог это сразу понять.
Оптимизация была выключена. Только что попробовал включить, - сработало, выдало:
410: 81 b1 in r24, 0x21 ; 1
412: 88 61 ori r24, 0x18 ; 24
414: 81 b9 out 0x21, r24 ; 1
416: 0b 98 cbi 0x21, 3 ; 1

Но, у меня не шло все это в не оптипизированном виде, я не мог придушить watchdog, как ни бился, не работают ld st почему-то. Попробую теперь, с оптимизацией. Размер кода-то существенно уменьшается. Я включал опцию -O 3, он тогда только выбросил ld и st где смог. Кажется разобрался, а то неделю не мог Watchdog заглушить. И получается - только из-за того что оптимизацию не включил. Если я ошибаюсь, то еще напишу результат.

Так все же правильно, русским же языком написано:
"Within the next four clock cycles, write a logic 0 to WDE."
А какие же там "four clock cycles" если между записями в WDTCR аж 6 инструкций.


--------------------
Демократия - это когда считается, что два дурака лучше одного умного
Суверенная демократия - это когда считается, что один дурак лучше двух дураков
Go to the top of the page
 
+Quote Post



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

 


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


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