Перейти к содержанию
    

Пара вопросов (ATmega8.C, WinAVR)

Есть в 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?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1)

0x3F - адрес регистра в адресном пространстве портов (IN, OUT)

0x5F - то же самое, в адресном пространстве ОЗУ (LDS, STS)

 

Любой регистр, адресуемый через а.п. портов, доступен также и в а.п. ОЗУ; адреса отличаются на 0x20. Результат одинаков, без учета длины и времени выполнения команд.

 

2)

Оптимизация кода включена? если да - результат на совести разработчиков avr-gcc. IAR или CodeVisionAVR в данном случае сгенерируют оптимальный код.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 инструкций.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я включал опцию -O 3, он тогда только выбросил ld и st где смог.

Почитайте описание библиотеки avr-lib и компилятора. -O3 не всегда лучний вариант оптимизации, сам использую -O2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почитайте описание библиотеки avr-lib и компилятора. -O3 не всегда лучний вариант оптимизации, сам использую -O2

 

Всегда (или почти всегда) пользую уровень Os (проблем не замечено)... Если необходимо отдельный модуль компильнуть с другим уровнем или вообще без оптимизации - решается в makefile.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всегда (или почти всегда) пользую уровень Os (проблем не замечено)..

Это оптимизация по объему кода, а -O2 -O3 по скорости выполнения

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...