Ассемблер (ASM) для AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение DX168B »

Что? Серьёзно? Тогда я пошёл переделывать свои программки. :)
Тогда так можно обращаться и к регистрам периферии.
Если всё в МК адресуется в одном регистровом файле, то тогда наверное можно.
I am DX168B and this is my favourite forum on internet!
Kvanto
Родился
Сообщения: 9
Зарегистрирован: Вт сен 21, 2010 09:42:46

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Kvanto »

возникла такая проблема, при старте отладки программы в AVR Studio не высвечивается желтая стрелка, указыающая на текущую команду, хотя счетчик циклов и всё остальное считается
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение avreal »

GP1 писал(а):Регистры могут адресоваться так же как RAM кто не верит к DiHalt-у :wink:
Ну, при всём уважении, такие вещи надо в документации производителя читать.
И у atXmega регистры вроде как такие же, но как RAM уже не адресуются.
Более того, они не адресуются как RAM и у новых тинек (Tiny4/5/9/10/20/40)

Ну и самое главное — ну адресуются они у многих AVR как память, а толку с того? В командах mov, add, ... всё равно это не использовать.
Я так понимаю, нужно именно это, чтобы в коде (в макросах) обращаться не к TMPL/TMPH, а к TMP, TMP+1
Тут нужно смотреть конкретный инстумент, что он умеет. Может и к имени регистра можно единичку прибавлять, это бло бы неплохо.

avr-as от avr-gcc так не умеет, но в командах понимает не только имена регистров, но и числа. Т.е. у него

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

    add    16, 18
означает то же самое, что и

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

    add    R16, R18
Поэтому можно

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

#define TMP 16
#define VAL 18

        add     TMP, VAL
        adc     TMP+1, VAL+1
        push    TMP
        push    TMP+1
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Аватара пользователя
Roman Venom
Сверлит текстолит когтями
Сообщения: 1135
Зарегистрирован: Сб июл 11, 2009 18:42:21
Откуда: Украина, г.Николаев

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Roman Venom »

юсарт победил :))(отправляя ответ в прерывании по РХС. другие прерывания не использую) , почти сразу возникла следующая проблема :)))
Регистров уже не хватает, поэтому надо использовать СРАМ. Благо, её ещё валом.
Собсно для чего мне это нужно. Хочу накапливать измерения АЦП(к примеру, 10 12-битных значений), чтобы потом, допустим, усреднять значение. Просмотрел пару примеров работы с такой памятью...
Итак. Последовательность действий.
1. Придумываем имячко:

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

.equ ram=0x1 ;0х1, 0х2
.equ ram1=0x3;

Тут уже вопрос. В аврах память программ и данных разделены. По умолчанию мы используем память программ и выбираем ячейку с адресом 0х2. Она 16-битная, т.е. писать в неё надо через регистровую пару У в формате старший-младший?

2. Запись в СРАМ.

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

ldi YH,2;пишем в СРАМ начиная с адреса 0х2000
clr work
ldi r28,ram;установка адресса массива А
st Y+,work;L
st Y+,work;H
st Y+,work;
st Y+,work;
st Y+,work
st Y,work

Где посмотреть куда оно пишется(ноль по адресу 0х1000, 0х1001-0х1005)? Открыл окно Memory - там по адресу 0х1000 ничего не поменялось...
Мне не понятно вот что:
2.1. Получается что массив ram у нас начинается с 0х2000 и тянется аж до... до куда?
2.2. Как записать последовательно в СРАМ РАЗНЫЕ значения (к примеру из регистров АЦП)? При запись каждого нового слова делать так: Y+номер значения? Или есть какие-то более удобные способы.


3. Чтение СРАМ

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

ldi YH,2;пишем в СРАМ начиная с адреса 0х2000
ldi r28,ram;установка адресса массива А
ld work_H,Y+
ld work_L,Y


C чтением вроде ясно.
Успех - императив!
Аватара пользователя
Meteor
Друг Кота
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Meteor »

Объявляйте область ОЗУ так
.org 0x0100
data_adc:.Byte 16 ; выделяем 16 регистров под данные АЦП
Далее туда записывать по косвенной адресации
Для наблюдения в студии, выбираем вкладку Memory, а в ней поля Data
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Ассемблер (ASM) для AVR в вопросах и ответах

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

avreal писал(а):Я так понимаю, нужно именно это, чтобы в коде (в макросах) обращаться не к TMPL/TMPH, а к TMP, TMP+1

Нужно это для того, чтобы устанавливать/обнулять пары регистров (r24-r25, ..., r30-r31), которые участвуют в командах ADIW, SBIW. Если, например, r24 у меня обозван 'tmp', то я пишу ADIW tmp, _число_. Вопрос в том, как мне потом не забыть, что вторая часть tmp это r25?... Обозвать r25 как 'tmpL'? :)
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3868
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Engineer_Keen »

Gudd-Head писал(а):Обозвать r25 как 'tmpL'? :)

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

Re: Ассемблер (ASM) для AVR в вопросах и ответах

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

Engineer_Keen писал(а):А почему нет? :dont_know:

А более изящного способа нет? Например, обозвать tmp как 16-ти битный регистр, размещённый в r24 и r25 можно как-нибудь?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Rimsky
Грызет канифоль
Сообщения: 299
Зарегистрирован: Вт июн 15, 2010 07:16:42
Откуда: Иркутск
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Rimsky »

Gudd-Head писал(а):
Engineer_Keen писал(а):А почему нет? :dont_know:

А более изящного способа нет? Например, обозвать tmp как 16-ти битный регистр, размещённый в r24 и r25 можно как-нибудь?

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

Re: Ассемблер (ASM) для AVR в вопросах и ответах

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

Rimsky писал(а):Я обычно пользуюсь регистровыми парами X, Y. Z

X, Y. Z - это регистровые пары начиная с r26, а команды ADIW, SBIW работают с регистрами от r24.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение GP1 »

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

Re: Ассемблер (ASM) для AVR в вопросах и ответах

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

GP1 писал(а):Давно бы взял да проверил, и нам рассказал что получилось, а что нет.

Это вы кому?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение GP1 »

Gudd-Head писал(а):Если у меня задефайнен, например, R16 как TMP, могу ли я обращаться к следующему регистру (R17) как-нибудь через "TMP+1"?

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

Re: Ассемблер (ASM) для AVR в вопросах и ответах

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

GP1 писал(а):попробуй обозвать r24 как-нибудь, и обратись как регистровой паре, если прокатит - значит все гуд, ну а если нет - то звиняйте...

Ёбт, естессно я сначала помучил компилятор. И только когда у меня закончились идеи, я решил потоптать клаву и подзасрать форум.
А вообще, всё это от лукавого. Я и без дефайнов могу оперировать "голыми" r24, r25, r26 и r27, держа в голове за что каждый регистр отвечает. Заодно и память потренирую :)
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение GP1 »

Gudd-Head писал(а):... Я и без дефайнов могу оперировать "голыми" r24, r25, r26 и r27, держа в голове за что каждый регистр отвечает. Заодно и память потренирую :)

"...Я тоже был молодой и горячий, сейчас немного поутих, хотя дым еще иногда идет..." ((с)Люди и манекены, А.Райкин)
это я к чему, настанет день и придет (ну прям притча :))) ) понимание того, что легче заменить один дефайн, чем шарахаться по всему исходнику исправляя назначение регистра, тем более что в разных местах один и тот же регистр может нести разную смысловую нагрузку, и придется вспоминать - где исправлять, а где так оставить...
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ARV »

GP1 писал(а):
Gudd-Head писал(а):... Я и без дефайнов могу оперировать "голыми" r24, r25, r26 и r27, держа в голове за что каждый регистр отвечает. Заодно и память потренирую :)

"...Я тоже был молодой и горячий, сейчас немного поутих, хотя дым еще иногда идет..." ((с)Люди и манекены, А.Райкин)
это я к чему, настанет день и придет (ну прям притча :))) ) понимание того, что легче заменить один дефайн, чем шарахаться по всему исходнику исправляя назначение регистра, тем более что в разных местах один и тот же регистр может нести разную смысловую нагрузку, и придется вспоминать - где исправлять, а где так оставить...

тогда следует и продолжить: "...наступит понимание того, что.... пора переходить на Си" :))) у меня такое понимание наступило довольно давно :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение GP1 »

ARV писал(а):.... пора переходить на Си" :))) у меня такое понимание наступило довольно давно :)))

Понимание то давно пришло... :)))
Вот только мозги ужо шибко ржавые, не воспринимают Си ну ни как... :dont_know:
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение avreal »

GP1 писал(а):попробуй обозвать r24 как-нибудь, и обратись как регистровой паре, если прокатит - значит все гуд, ну а если нет - то звиняйте...
А с чего бы это «не катить», если в описании ситемы команд для adiw/sbiw указано четыре пары?
В тех редчайших случаях, когда я пишу на ассемблере, R24, R25 у меня обозваы WL и WH соответственно.
Что не мешает давать осмысленные имена регистрам.
Хотя в чём проблема написать adiw R24,1 без обзывания — я не вижу.

GP1 писал(а):Понимание то давно пришло... :)))
Вот только мозги ужо шибко ржавые, не воспринимают Си ну ни как... :dont_know:
Ну так надо смазать и провернуть :-)
Тренировать запоминанием что где лежит по номерам регистров — это тоже неплохо, но не факт, что сильно поможет борьбе со ржавчиной.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ARV »

GP1 писал(а):Вот только мозги ужо шибко ржавые, не воспринимают Си ну ни как... :dont_know:
это преодолимо :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ibiza11 »

ARV писал(а):это преодолимо :)))
+1. Перешел на Си за 4-5 рабочих дней. из них 2 на освоение IAR AVR, остальное на вкуривание в синтаксис языка=). Сейчас вообще не жалею, очень нравится. Переписал свой проект часов ( :oops: , уж простите, я тоже падок на подобные проекты, только люблю делать сам, а не повторять чужое ) за часов 6, когда в асме писал его раза в 4 дольше :)
Ставим плюсы: )
Ответить

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