Jump to content

Чем отличаются команды вызова подпрограмм RCALL и CALL?


Alex Ferrum
 Share

Recommended Posts

Писал недавно программу на ассемблере для ATMEGA128 и столкнулся с неприятной особенностью. Обычно для ATTINY2313 или ATMEGA8, для небольших программ при вызове подпрограмм, хватает команды RCALL, но у неё ограничение по дальности вызова подпрограмм, поэтому применил команду CALL. Хотел узнать, между этими двумя командами есть ли разница, кроме дальности вызова подпрограмм, и если нет разницы, зачем две команды, почему нельзя обходится одной командой CALL? 

Link to comment
Share on other sites

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Кроме дальности вызова они отличаются скоростью выполнения и количеством занимаемых байт в памяти программ, rcall работает быстрее и занимает меньше памяти. Поэтому и две команды.

Если размер программы и скорость не важны, то можно использовать только call.

Link to comment
Share on other sites

Реле, разъемы, вентиляторы, корпуса, микросхемы, конденсаторы и много другое!

Скидки до 20% на сайте электронного дискаунтера ТМ Электроникс.

Бесплатная доставка в любую точку России + кэшбэк 15%.

Подробнее

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Материалы вебинара «Литиевые аккумуляторы EVE Energy и решения для управления перезаряжаемыми источниками тока»

Опубликованы материалы вебинара Компэл, посвященного литиевым аккумуляторам EVE Energy и решениям для управления перезаряжаемыми источниками тока.

На вебинаре мы представили информацию не только по линейкам аккумуляторной продукции EVE, но и по решениям для управления ею, что поможет рассмотреть эти ХИТ в качестве дополнительной альтернативы для уже выпускающихся изделий. Также рассмотрели нюансы работы с производителем и сервисы, предоставляемые Компэл по данной продукции. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Комплексные решения с литиевыми батареями EVE для интеллектуальных систем безопасности

Литиевые химические источники тока EVE по своим характеристикам являются идеальным выбором для современных интеллектуальных систем безопасности. EVE разрабатывает литиевые батареи, опираясь на многолетние исследования таких областей применения, как беспроводная связь стандартов Bluetooth, LoRa, Wi-Fi, NB-IoT и ZigBee. Рассмотрим решения для систем безопасности с использованием батарей EVE. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

буква "r" обозначает относительный адрес. и этот относительный адрес имеет ограничение по дальности.

без этой буквы - адрес абсолютный, без ограничения "расстояния".

Мудрость приходит вместе с импотенцией...

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

Link to comment
Share on other sites

  • 4 weeks later...

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

А как понять в процессе написания кода, что ыт уже накодил много, что rcall уже не достанет и пора использовать call?

Link to comment
Share on other sites

 По каждому "недопрыгу" будет такое сообщение  

1.png.5a88b4ee093b24cc1531941f981ad313.png

А если память у процессора большая , то можно сразу везде ставить call .

Или макросы применять .

Link to comment
Share on other sites

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

Link to comment
Share on other sites

42 минуты назад, Огонёк сказал:

А хочется-то высший пилотаж продемонстрировать

Это надо сразу hex писать . 

Link to comment
Share on other sites

В 02.06.2023 в 13:15, Огонёк сказал:

самостоятельно правильные команды переходов и вызовов вписать

Если быстродействие и минимум кода не критично, то можно везде использовать длинные команды без "r".

Если хочется быстрее и компактнее, то после того как

В 02.06.2023 в 13:15, Огонёк сказал:

Компилятор подскажет пост-фактум

вносить исправления.
Всё равно по командам условных переходов бывает приходится вносить правки в исходник пост-фактум после компиляции. Так для них "далёких" альтернатив не существует, приходится условия перехода исправлять, rjmp добавлять.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...