Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AVRASM2
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
zombi
Нужно в сегменте кода создать 212 одинаковых фрагментов.
Сделал через макросы.
Объявил макрос M1 содержащий один фрагмент.
Потом макрос M10 состоящий из десяти M1.
Затем M100 из десяти M10.

В тексте программы записал:
M100
M100
M10
M1
M1

Все получилось как надо, но сама запись не нравится.

Может есть другая возможность сделать такое?
Что типа цикла макросов или loop или for какой или rep-endrep или еще как?
adc
Порочный путь. Нереальный жор памяти, если это не обусловлено скоростью выполнения. Повторяющийся код, лучше вызывать, нежели вставлять по 200раз.
zombi
Цитата(adc @ Apr 3 2017, 08:17) *
Повторяющийся код, лучше вызывать, нежели вставлять по 200раз.

спасибо, кэп
adc
Цитата(zombi @ Apr 3 2017, 13:15) *
спасибо, кэп

Если Вам так все очевидно, на кой ляд Вы занимаетесь такой ересью? В каком случае может понадобится бесконечно много копировать один и тот же код? Попахивает быдлокодингом. Или вы нопы множите)))
zombi
Цитата(adc @ Apr 12 2017, 14:28) *
В каком случае может понадобится бесконечно много копировать один и тот же код?

Попытайтесь внимательно прочитать своё первое сообщение в этой теме и попробуйте найти в нём ответ на свой вопрос.
adc
Если код имеет сотни повторов, и это дает прирост в скорости которой нельзя заменить на вызовы пп, это означает только то, что Вы неправильно выбрали платформу, либо алгоритм хромает. Вы довольно грубо ведете диалог, без явной на то причины. Возможно, Вам имеет смысл подтянуть культуру общения. С такими комментариями, Вам,уважающие себя люди, помогать не будут.
zombi
Цитата(adc @ Apr 14 2017, 23:24) *
Если код имеет сотни повторов, и это дает прирост в скорости которой нельзя заменить на вызовы пп, это означает только то, что Вы неправильно выбрали платформу, либо алгоритм хромает. Вы довольно грубо ведете диалог, без явной на то причины. Возможно, Вам имеет смысл подтянуть культуру общения. С такими комментариями, Вам,уважающие себя люди, помогать не будут.

Люди которые на конкретно поставленный вопрос вместо ответа начинают писать всякую ... не вызывают у меня уважения и уж тем более помощи от таких людей я не жду.
А о культуре общения Вам лучше промолчать.
adc
Цитата(zombi @ Apr 15 2017, 00:41) *
А о культуре общения Вам лучше промолчать.

Спасибо за совет)) я вас прощаю)
demiurg1978
Цитата(zombi @ Apr 15 2017, 02:41) *
А о культуре общения Вам лучше промолчать.

Вообще-то вам ответили на вопрос. Мало того, вы сами ответили. 10 макросов - 10 раз вызываем. 100 макросов - 100 раз. Это и есть циклы.
Ваши макросы не развернуты. Остается только телепатировать.
Вам намекнули на культуру общения. А вы в бутылку полезли. Прежде чем ответить, подумайте 10 раз. Здесь не пацанские встречи. Разговаривайте вежливо. Ваш собеседник может быть владельцем фирмы, занимать серьезную должность, серьезным специалистом. Любой специалист по электронике закончил как минимум 1 высшее учебное заведение. А это уже другой уровень общения.
Ругаться может никто и не будет, но отвечать вам больше не будут. Время и нервы дороже.
zombi
Цитата(demiurg1978 @ Apr 15 2017, 17:19) *
Вообще-то вам ответили на вопрос.

Прочтите мой вопрос и процитируйте ответ на него.
demiurg1978
Цитата(zombi @ Apr 15 2017, 20:30) *
Прочтите мой вопрос и процитируйте ответ на него.

Эээ, мнэээ, кхе-кхе, кхм... Тело макроса вставляется в код как есть, только каждый макрос спрятан за определенное ему название. Вставили один раз, будет один раз вставлен весь код макроса, вставили 10 раз, будет 10 раз вставлено тело макроса.
Код
.macro    OUT_SRAM
    ldi        XH,HIGH(@0)
    ldi        XL,LOW(@0)
    ldi        Data_H,HIGH(@1)
    ldi        Data_L,LOW(@1)
    rcall    _OUT_SRAM
.endmacro

.macro    OUTI_SRAM
    ldi        XH,HIGH(@0)
    ldi        XL,LOW(@0)
    ldi        r17,@1
    ldi        r16,@2
    rcall    _OUT_SRAM
.endmacro

_OUT_SRAM:
    st        X+,r16
    dec        r17
    brne    _OUT_SRAM
    ret


Написали 1 раз OUT_SRAM. Будет вставлено 1 раз. Написали 10 раз, будет вставлено 10 раз. Это жрет flash память МК.

Значит делаем циклы.

Все просто...
zombi
Цитата(demiurg1978 @ Apr 15 2017, 17:50) *
Эээ, мнэээ, кхе-кхе, кхм... Тело макроса вставляется в код как есть...

В огороде бузина, а в Киеве — дядька. biggrin.gif
Вопрос читали?
demiurg1978
Макросы в студию. Что делают эти макросы. После этого посмотрим, стоит ли продолжать.
zombi
Цитата(demiurg1978 @ Apr 15 2017, 18:15) *
Макросы в студию. Что делают эти макросы. После этого посмотрим, стоит ли продолжать.

Ну, прочитайте же вопрос в конце концов !!!!
Владивольт
Может, как-то встроить в технологическую цепочку пред-обработчик вроде
GNU M4
Смутно помню, что в ассемблере PDP-11 был макрос .REPT\.ENDR
zombi
Цитата(Владивольт @ Apr 15 2017, 18:24) *
Смутно помню, что в ассемблере PDP-11 был макрос .REPT\.ENDR

Похоже Вы единственный, ответивший в теме, кто понял суть вопроса.
aiwa
Сам не пробовал, но видел нечто подобное у сослуживца:
Код
.macro Recursive_M1
.if cnt_repeat > 0
         M1
    .set cnt_repeat = cnt_repeat - 1
    Recursive_M1 cnt_repeat
.endif
.endmacro

Recursive_M1 212


Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.