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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3868
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

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

Сообщение Engineer_Keen »

Да хоть 100 флагов, главное чтобы регистров хватило...
Спойлер

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

.def FLR1=R16 ;регистры под флаги, 2 шт.
.def FLR2=R17

.equ FLAG0=0 ;сами флаги, обзывайте как хотите
.equ FLAG1=1 ;желательно учитывая функциональность
.equ FLAG2=2
.equ FLAG3=3
.equ FLAG4=4
.equ FLAG5=5
.equ FLAG6=6
.equ FLAG7=7
.equ FLAG8=0
.equ FLAG9=1
.equ FLAG10=2
.equ FLAG11=3
.equ FLAG12=4
.equ FLAG13=5
.equ FLAG14=6
.equ FLAG15=7


.cseg
...
...
SBR FLR1,(1<<FLAG2) ;пример установки флагов
SBR FLR2,(1<<FLAG14)

SBRC FLR1,FLAG3 ;пример проверки флага
RCALL FLAG3_FUNCTION


А чтобы не путать какие флаги в каком регистре, имена флагов можно писать с префиксами: FL1_FLAG0, FL1_FLAG1,...,FL2_FLAG8,FL2_FLAG9.
Последний раз редактировалось Engineer_Keen Вт апр 22, 2014 10:26:13, всего редактировалось 2 раза.
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Аватара пользователя
Мikа
Потрогал лапой паяльник
Сообщения: 343
Зарегистрирован: Пн апр 01, 2013 15:13:40
Откуда: Москва

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

Сообщение Мikа »

Ааа, разные имена для одинаковых цифр. Всё гениальное просто :) Спасибо!
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

#define в ассемблере тоже работает. Привязать имя бита к регистру? да нет проблем... указывайте регистр вместе с номером бита.

например #define zero_cross R25, 0
через EQU и SET сделать это невозможно да... #define мощнее этих директив, но и ответственность выше.(наворотить можно ууууу)
Что-то вроде такого:
Tbs7pmIdzW4.jpg
(44.2 КБ) 292 скачивания


Еще есть макросы... определяешь один раз макрос и используешь каждый раз его имя вместо набора команд, а внутри макроса один раз указывается что делать с каким регистром и битом. #define по сути это тот же макрос только однострочный и без параметров. Уж использовать его для команд установки очистки битов - самое то.
Аватара пользователя
ИС-пытатель
Вымогатель припоя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

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

Сообщение ИС-пытатель »

Это в каком компиляторе так дефайн на асме работает?
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

Стандартный AtmelStudio, всегда использую. Только надо иметь в виду - препроцессор регистрочувствительный, #DEFINE не сработает, будет писать "неизвестная директива" использовать нужно только #define. Я по началу путался, и не понимал почему не прокатывает, а оно вона как.
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3868
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

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

Сообщение Engineer_Keen »

В 4.19 тоже работает, впрочем дело тут не в версии студии, а в версии ассемблера, например директивы с '#' это фишки avrasm2.
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Аватара пользователя
ИС-пытатель
Вымогатель припоя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

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

Сообщение ИС-пытатель »

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

#define zero_cross R25, 0


А как тогда это в коде использовать, если мы тут и регистр обозначаем, и бит сразу?
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

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

#define WORK_DONE OCR0A, 1
#define zero_cross R25, 0
#define strobe PORTA, 4

SBRC zero_cross
SET
BST zero_cross
CBI WORK_DONE
CBI strobe
SBI strobe

Разве не удобно? Никакой путаницы какой бит какому регистру принадлежит - ты сам придумываешь имена и способ группировки этих флагов. Префиксами, например.
Так может быть группа из 12 бит распределенная по разным частям 2-3-5 регистров, а не только по 8.

Для работы с битами в регистрах правда, приходится использовать уже макросы т.к. нужно минимум 2 команды чтобы установить/сбросить бит в регистре.
Аватара пользователя
ИС-пытатель
Вымогатель припоя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

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

Сообщение ИС-пытатель »

А.. Ну, это получается только для команд работы с битами такое определение.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

Для чего еще надо?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

а какие возможности макросов в avr-as! :) я об ассемблере GNU, который в комплекте avr-gcc присутствует.
в свое время сделал и использовал макросы для написания такого вида кода:

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

   pushreg r1, r2, r16, r17 ; особый макрос сохранения в стеке списка регистров
... тут юзаем эти регистры
   popreg ; а этот макрос сам восстанавливает из стека ранее сохраненные регистры в нужном порядке
   ; и не надо запоминать, в каком порядке их в стек сохраняли!
   ret
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
ИС-пытатель
Вымогатель припоя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

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

Сообщение ИС-пытатель »

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

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

Сообщение ARV »

ИС-пытатель писал(а):А количество аргументов в макросе стандартно (допустим, равно исключительно 4)?

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

Мой уютный бложик... заходите!
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

Alexeyslav писал(а):

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

#define WORK_DONE OCR0A, 1
CBI WORK_DONE
Извините, это что?
Аватара пользователя
ИС-пытатель
Вымогатель припоя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

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

Сообщение ИС-пытатель »

ARV писал(а):количество аргументов в макросе может быть любым (за стопицот не поручусь, конечно :))) )


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

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

Сообщение ARV »

ИС-пытатель писал(а):А можете привести текст макроса? Вы набиваете в него миллион аргументов (32, как максимум), которые могут использоваться или нет? Или как-то по красивому это организуете?


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

Мой уютный бложик... заходите!
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3868
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

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

Сообщение Engineer_Keen »

ИС-пытатель писал(а):А количество аргументов в макросе стандартно (допустим, равно исключительно 4)? или же оно плавает (может быть любым, но не меньше 1)? ;)

В родном атмелевском ассемблере кстати всего максимум 10 (минимум 0)...
AVR Assembler help писал(а):A Macro can take up to 10 parameters. These parameters are referred to as @0-@9 within the Macro definition.


ARV писал(а):вот моя статья, которую написал в припадке эйфории от возможностей этого ассемблера

Блииииннннн...... Ну где вы раньше были :facepalm: Все, срочно перехожу на AVR-AS :)
Вот так живешь себе, горя не знаешь, а оказывается все можно делать еще проще, удобнее и быстрее...
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Аватара пользователя
ИС-пытатель
Вымогатель припоя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

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

Сообщение ИС-пытатель »

МЛЯЯЯЯЯЯЯЯуууууу... :facepalm: Перехожу обратно с Сей на Асм!! ))))) :kill: :kill: :kill:

P.S. раньше пользовался макросами в асме (репит тоже был, помнится), но ТАКОГО, как свободное количество аргументов и т.п.... Еще не было.. КРУТЬ!
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

Engineer_Keen писал(а):Блииииннннн...... Ну где вы раньше были :facepalm: Все, срочно перехожу на AVR-AS :)
Вот так живешь себе, горя не знаешь, а оказывается все можно делать еще проще, удобнее и быстрее...
а бывает и наоборот: знаешь, что есть проще, удобнее, быстрее, а корячишься с тем, что есть... так вот со мной и было: помня tasm для x86-ых, и даже asm51 оn Intel для MCS51 я долго не мог понять, почему ассемблер для AVR такой убогий... пока не познакомился с avr-as :)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

Да, настоящий макроязык, язык для программирования компилятора. Почему для ассемблера нет такого?
Ответить

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