AVR studio в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение vitalik_1984 »

Можно не только в студии на асме.
.macro LED1_off cbi PORTX, N. или как там правильно макрос оформить
Реклама
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: AVR studio 4 в вопросах и ответах

Сообщение ibiza11 »

Код: Выделить всё

.macro LED1_OFF
cbi PORTA, 7
.endmacro
или

Код: Выделить всё

.equ ON = 1
.equ OFF = 0
.macro LED1
.if @0
sbi PORTA, 7
.else
cbi PORTA, 7
.endif
.endmacro
применение

Код: Выделить всё

LED1 ON
LED1 OFF
документики для подсмотра
http://www.atmel.com/Images/doc1022.pdf
и вот http://www.atmel.com/Images/doc2550.pdf
Ставим плюсы: )
Реклама
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: AVR studio 4 в вопросах и ответах

Сообщение Gudd-Head »

Круть 8)
Спасибо!

ibiza11, о великий знаток макросов!
Может, сварганите макрос вида

Код: Выделить всё

ldiw Rn, 0xabcd; n=16...30

Для загрузки двухбайтной константы в регистровую пару?

Или это просто заменяется

Код: Выделить всё

ldi Rn, LOW(0xabcd);
ldi R(n+1), HIGH(0xabcd)

?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

Re: AVR studio 4 в вопросах и ответах

Сообщение a_skr »

Код: Выделить всё

.MACRO     LdiW
                ldi     @0,low(@1)
                ldi     @0+1,high(@1)
.ENDMACRO

LdiW r16,0xABCD
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: AVR studio 4 в вопросах и ответах

Сообщение ibiza11 »

так попробуйте

Код: Выделить всё

    .def RW1L = r16
    .def RW1H = r17
    .def RW2L = r18
    .def RW2H = r19
    .def RW3L = r20
    .def RW3H = r21
    .def RW4L = r22
    .def RW4H = r23
    .def RW5L = r24
    .def RW5H = r25
    .def RW6L = r26
    .def RW6H = r27
    .def RW7L = r28
    .def RW7H = r29
    .def RW8L = r30
    .def RW8H = r31

    .macro ldiw
        ldi @0L,low(@1)
        ldi @0H,high(@1)
    .emdmacro
Применять так:

Код: Выделить всё

    ldiw RW1, 0xFFAB
Ставим плюсы: )
Реклама
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: AVR studio 4 в вопросах и ответах

Сообщение Gudd-Head »

a_skr писал(а):ldi @0+1,high(@1)

Ругается на эту строчку, пишет инвалид регистр.
ibiza11 писал(а):так попробуйте

Ууу... а без введения новых регистров и привязки к регистровым парам никак? :(
Как-нибудь

Код: Выделить всё

.MACRO ldiw
   ldi @0, low(@1)
   if @0 == r22
   ldi r23, high(@1)
   ...
.ENDMACRO
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Реклама
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: AVR studio 4 в вопросах и ответах

Сообщение ibiza11 »

к сожалению не знаю как это осуществить, поскольку команде ldi в качестве операнда передается не номер регистра и не адрес в памяти (к которому можно было бы прибавить единицу и получить следующее значение), а именно название регистра (r16...r31), к которому нельзя ничего прибавить, ведь это не число, а выражение. в Си это делается проще, с помощью операции "склейки" параметров (обозначается так: ##), а в ассмеблере нет аналогичной команды препроцессора.

а что Вас напрягает в варианте, который я предложил?
Ставим плюсы: )
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: AVR studio 4 в вопросах и ответах

Сообщение Gudd-Head »

А нельзя ли как-то перебрать все регистры R16...R30, передаваемые в макрос в качестве аргумента, и подгружать в соответствующие R17...R31?
ibiza11 писал(а):а что Вас напрягает в варианте, который я предложил?

Вводятся новые имена и младший байт только в чётном регистре.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: AVR studio 4 в вопросах и ответах

Сообщение ibiza11 »

не уверен, что будет работать.
попробуйте сами, мне негде сейчас проверить.

Код: Выделить всё

        .macro ldiw
            ldi @0,low(@1)
            .if @0 == r16
                ldi r17,high(@1)
            .elif @0 == r17
                ldi r18,high(@1)
            .elif @0 == r18
                ldi r19,high(@1)
            .elif @0 == r19
                ldi r20,high(@1)
            .elif @0 == r20
                ldi r21,high(@1)
            .elif @0 == r21
                ldi r22,high(@1)
            .elif @0 == r22
                ldi r23,high(@1)
            .elif @0 == r23
                ldi r24,high(@1)
            .elif @0 == r24
                ldi r25,high(@1)
            .elif @0 == r25
                ldi r26,high(@1)
            .elif @0 == r26
                ldi r27,high(@1)
            .elif @0 == r27
                ldi r28,high(@1)
            .elif @0 == r28
                ldi r29,high(@1)
            .elif @0 == r29
                ldi r30,high(@1)
            .elif @0 == r30
                ldi r31,high(@1)
            .endif
        .endmacro
Ставим плюсы: )
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: AVR studio 4 в вопросах и ответах

Сообщение Gudd-Head »

Не-а, то же самое.

Код: Выделить всё

Синтаксическая ошибка, нежданный регистр.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

Re: AVR studio 4 в вопросах и ответах

Сообщение a_skr »

а так неудобно (лишний регистр передать)?

Код: Выделить всё

.MACRO     LdiW
                ldi     @0,low(@2)
                ldi     @1,high(@2)
.ENDMACRO

LdiW r16, r17, 0x1234
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: AVR studio 4 в вопросах и ответах

Сообщение Gudd-Head »

Видимо, остаётся только так :)))
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: AVR studio 4 в вопросах и ответах

Сообщение ibiza11 »

Может так устроит? Имя не сильно меняется: вместо r16 надо писать r16_ Применять так:

Код: Выделить всё

    ldiw r16_, 0xABCD ; результат в r16 и r17
    ldiw r17_, 0xABCD ; результат в r17 и r18

Макрос:

Код: Выделить всё

    .def r16_L = r16
    .def r16_H = r17

    .def r17_L = r17
    .def r17_H = r18

    .macro ldiw
        ldi @0L,low(@1)
        ldi @0H,high(@1)
    .emdmacro
Ставим плюсы: )
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: AVR studio 4 в вопросах и ответах

Сообщение Gudd-Head »

ibiza11 писал(а):Может так устроит?

Не, менять названия регистров категорически не хочется.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: AVR studio 4 в вопросах и ответах

Сообщение ibiza11 »

Ну тогда только указывать каждый регистр отдельно, как Вам a_skr предложил.
Ставим плюсы: )
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение vitalik_1984 »

ibiza11 писал(а):

Код: Выделить всё

 .def r16_L = r16
    .def r16_H = r17

    .def r17_L = r17
    .def r17_H = r18

В чем принципиальное отличие от
.def r17L = r17?
Вообще этот этот вариант приведет к куче предупреждений о смене имени регистра насколько я знаю.
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: AVR studio 4 в вопросах и ответах

Сообщение ibiza11 »

:) принципиального различия нет. только что проверил в студии 4.16.
Более того, Ваш вариант дает возможность не менять имя регистра при использовании его в макросе.
Так что, Gudd-Head, пляшите, Вам письмо!))

Код: Выделить всё

.def r16L = r16
.def r16H = r17

.def r17L = r17
.def r17H = r18        ;остальные регистры по аналогии можно расписать

.macro ldiw
        ldi @0L,low(@1)
        ldi @0H,high(@1)
.endmacro

Применение

Код: Выделить всё

   ldiw r16, 0x6729   ;результат: r16 = $29, r17 = $67
   ldiw r17, 0xFFAA   ;результат: r17 = $AA, r18 = $FF

А Warning`и конечно будут, но не о смене имени регистра, а о том, что имя для этого регистра уже определено (например выше r17 это одновременно r17L и r16H). Ну и соответственно, если в проекте эти регистры еще как-то обозвали, то и там выйдет Warning.
Ставим плюсы: )
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: AVR studio 4 в вопросах и ответах

Сообщение Gudd-Head »

Код: Выделить всё

.def r17L = r17
.def r17H = r18        ;остальные регистры по аналогии можно расписать

Ой... Что-то тааак лееень все регистры расписывать... Я лучше при вызове буду 2 регистра писать. К тому же, это даёт гибкость: можно изменить порядок, или вообще запихнуть число не в соседние регистры (не знаю, правда, где такое может понадобиться).
А Warning`и конечно будут... Ну и соответственно, если в проекте эти регистры еще как-то обозвали, то и там выйдет Warning.

Кстати, как посмотреть варнинги?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение vitalik_1984 »

Gudd-Head , вы что вчера за студию сели? Такие вопросы задаете :))
Предупреждения можно почитать в окошке внизу.
Если это четвертая студия, то отдельно вроде они не показываются, смотрим в результате компиляции если есть ошибки или предупреждения, то просто вверх перемещаемся по журналу и там они будут все видны, точно так же можно двойным кликом к месту в тексте перейти.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: AVR studio 4 в вопросах и ответах

Сообщение Gudd-Head »

vitalik_1984 писал(а):Gudd-Head , вы что вчера за студию сели?

В том-то и дело что нет. :facepalm:
На вкладке Build пишет "... 2 warnings", не щёлкается. На вкладке Message про варнинги ни слова. Или журнал это что-то другое?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Ответить

Вернуться в «AVR»