Страница 223 из 400

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

Добавлено: Вт апр 22, 2014 10:19:56
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.

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

Добавлено: Вт апр 22, 2014 10:22:21
Мikа
Ааа, разные имена для одинаковых цифр. Всё гениальное просто :) Спасибо!

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

Добавлено: Вт апр 22, 2014 12:19:34
Alexeyslav
#define в ассемблере тоже работает. Привязать имя бита к регистру? да нет проблем... указывайте регистр вместе с номером бита.

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

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

Добавлено: Вт апр 22, 2014 12:29:18
ИС-пытатель
Это в каком компиляторе так дефайн на асме работает?

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

Добавлено: Вт апр 22, 2014 13:39:27
Alexeyslav
Стандартный AtmelStudio, всегда использую. Только надо иметь в виду - препроцессор регистрочувствительный, #DEFINE не сработает, будет писать "неизвестная директива" использовать нужно только #define. Я по началу путался, и не понимал почему не прокатывает, а оно вона как.

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

Добавлено: Вт апр 22, 2014 13:46:02
Engineer_Keen
В 4.19 тоже работает, впрочем дело тут не в версии студии, а в версии ассемблера, например директивы с '#' это фишки avrasm2.

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

Добавлено: Вт апр 22, 2014 14:24:04
ИС-пытатель

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

#define zero_cross R25, 0
А как тогда это в коде использовать, если мы тут и регистр обозначаем, и бит сразу?

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

Добавлено: Вт апр 22, 2014 14:53:58
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 команды чтобы установить/сбросить бит в регистре.

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

Добавлено: Вт апр 22, 2014 15:20:01
ИС-пытатель
А.. Ну, это получается только для команд работы с битами такое определение.

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

Добавлено: Вт апр 22, 2014 15:24:27
Alexeyslav
Для чего еще надо?

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

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

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

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

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

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

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

Добавлено: Вт апр 22, 2014 16:09:03
ARV
ИС-пытатель писал(а):А количество аргументов в макросе стандартно (допустим, равно исключительно 4)?
если этот вопрос по поводу моего сообщения, то отвечаю: может быть любым (за стопицот не поручусь, конечно :))) )

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

Добавлено: Вт апр 22, 2014 16:18:15
akl
Alexeyslav писал(а):

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

#define WORK_DONE OCR0A, 1
CBI WORK_DONE
Извините, это что?

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

Добавлено: Вт апр 22, 2014 16:23:15
ИС-пытатель
ARV писал(а):количество аргументов в макросе может быть любым (за стопицот не поручусь, конечно :))) )
А можете привести текст макроса? Вы набиваете в него миллион аргументов (32, как максимум), которые могут использоваться или нет? Или как-то по красивому это организуете?

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

Добавлено: Вт апр 22, 2014 16:28:33
ARV
ИС-пытатель писал(а):А можете привести текст макроса? Вы набиваете в него миллион аргументов (32, как максимум), которые могут использоваться или нет? Или как-то по красивому это организуете?
вот моя статья, которую написал в припадке эйфории от возможностей этого ассемблера, там есть упоминаемые макросы (и не только), сами скажите, красиво все это или нет :) главное - весьма полезно.

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

Добавлено: Вт апр 22, 2014 16:29:25
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 :)
Вот так живешь себе, горя не знаешь, а оказывается все можно делать еще проще, удобнее и быстрее...

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

Добавлено: Вт апр 22, 2014 16:55:39
ИС-пытатель
МЛЯЯЯЯЯЯЯЯуууууу... :facepalm: Перехожу обратно с Сей на Асм!! ))))) :kill: :kill: :kill:

P.S. раньше пользовался макросами в асме (репит тоже был, помнится), но ТАКОГО, как свободное количество аргументов и т.п.... Еще не было.. КРУТЬ!

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

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

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

Добавлено: Ср апр 23, 2014 01:56:07
Alexeyslav
Да, настоящий макроязык, язык для программирования компилятора. Почему для ассемблера нет такого?