I’m new on AVR. I have an «Relative branch out of reach» error for the «brne round_loop» line while debugging. Is anyone to help me? Thank you so much for your helps.
; Test if round counter has reached 14
mov t4, rc
subi t4, 14
brne round_loop
round_loop:
round_loop:
; XOR state and key
eor s0, k0
eor s1, k1
eor s2, k2
eor s3, k3
asked Jun 17, 2016 at 15:55
1
The AVR BRNE
instruction is a 16 bit op-code, 7 bits of which are the branch offset. This 7 bit signed operand can have a value k in the range -64 ≤ k ≤ +63. The PC is modified by k +1 (i.e. -63 to +64). If the jump is further then that, a relative branch is unsuitable.
You either need to locate the target closer to the branch, or use an unconditional branch to an unconditional jump (JMP) with a 22bit range, or a relative jump (RJMP) with a 12 bit range.
mov t4, rc
subi t4, 14
brne round_loop_longjmp
rjmp no_round_jmp
round_loop_longjmp:
rjmp round_loop
no_round_jmp:
...
answered Jun 17, 2016 at 20:33
CliffordClifford
86k12 gold badges85 silver badges160 bronze badges
A relative branch means that the jump occurs by changing the position of the program counter(which instruction is being executed right now) by either adding or subtracting a value from it. That means round_loop in brne is not translated into an absolute address, but a distance from the current instruction. The limit for brne is 7bits, so I believe it should be within +-64 words(each instruction is 1 word so 64 instructions). So the round_loop label should be within 64 instructions of the brne instruction, either before or after it.
If you can’t move round_loop within that range then you’ll have to do a branch to a label that will do a JMP to round_loop.
answered Jun 17, 2016 at 17:35
Artur KinkArtur Kink
4981 gold badge12 silver badges15 bronze badges
2
Форум РадиоКот • Просмотр темы — Ошибка команды относительного перехода brcs.
Сообщения без ответов | Активные темы
ПРЯМО СЕЙЧАС: |
Автор | Сообщение |
---|---|
|
Заголовок сообщения: Ошибка команды относительного перехода brcs.
|
Вымогатель припоя
Карма: -6 Рейтинг сообщения: 0
|
Программа из книжки, я ни одной строчки не дописывал в ней, в чем дело? Код: … Так понимаю, относительный переход вне досягаемости. Вот полный фрагмент: Код: … ldi temp, 0x0F ; ldi temp, 0x00 ; |
Вернуться наверх |
Профиль
|
Реклама | |
|
|
DX168B |
Заголовок сообщения: Re: Ошибка команды относительного перехода brcs.
|
||
Карма: 25 Рейтинг сообщения: 0
|
Либо Вы пытаетесь перейти по условию к несуществующей метке, либо она далековато находится. |
||
Вернуться наверх | |||
Реклама | |
|
|
Vova777 |
Заголовок сообщения: Re: Ошибка команды относительного перехода brcs.
|
Карма: -6 Рейтинг сообщения: 0
|
Дело в том, что это программа из книжки, по которой я учусь программировать. Там написано, что эта команда может перейти через не более чем 64 команды. А там их примерно 100. Сократить не могу, потому что: во-первых, не соображаю как это сделать, а во-вторых, если это пример, то он должен быть рабочим. Может эту команду заменить на rjmp, но мне нужно чтобы флаг С обрабатывался тоже. Как можно сделать, скажите пожалуйста? Код: … |
Вернуться наверх | |
ILYAUL |
Заголовок сообщения: Re: Ошибка команды относительного перехода brcs.
|
||
Карма: 15 Рейтинг сообщения: 0
|
Что за книга? можно Последний раз редактировалось ILYAUL Пт июн 15, 2012 20:48:08, всего редактировалось 1 раз. |
||
Вернуться наверх | |||
Реклама | |
|
Выгодные LED-драйверы для решения любых задач КОМПЭЛ представляет со склада и под заказ широкий выбор LED-драйверов производства MEAN WELL, MOSO, Snappy, Inventronics, EagleRise. Линейки LED-драйверов этих компаний, выполненные по технологии Tunable White и имеющие возможность непосредственного встраивания в систему умного дома (димминг по шине KNX), перекрывают практически полный спектр применений: от простых световых указателей и декоративной подсветки до диммируемых по различным протоколам светильников внутреннего и наружного освещения. Подобрать LED-драйвер>> |
Vova777 |
Заголовок сообщения: Re: Ошибка команды относительного перехода brcs.
|
Карма: -6 Рейтинг сообщения: 0
|
ILYAUL писал(а): Что за книга? Джон Мортон Микроконтроллеры AVR |
Вернуться наверх | |
Реклама | |
|
|
Реклама | |
|
LIMF – источники питания High-End от MORNSUN со стандартным функционалом на DIN-рейку На склад Компэл поступили ИП MORNSUN (крепление на DIN-рейку) с выходной мощностью 240 и 480 Вт. Данные источники питания обладают 150% перегрузочной способностью, активной схемой коррекции коэффициента мощности (ККМ; PFC), наличием сухого контакта реле для контроля работоспособности (DC OK) и возможностью подстройки выходного напряжения. Источники питания выполнены в металлическом корпусе, ПП с компонентами покрыта лаком с двух сторон, что делает ее устойчивой к соляному туману и пыли. Изделия соответствуют требованиям ANSI/ISA 71.04-2013 G3 на устойчивость к коррозии, а также нормам ATEX для взрывоопасных зон. Подробнее>> |
DX168B |
Заголовок сообщения: Re: Ошибка команды относительного перехода brcs.
|
||
Карма: 25 Рейтинг сообщения: 0
|
Возможно, компилятор не понимает, что такое PC+2 (думает, что это метка) Код: … По сути, PC+2 это прыжок через rjmp Start |
||
Вернуться наверх | |||
ILYAUL |
Заголовок сообщения: Re: Ошибка команды относительного перехода brcs.
|
||
Карма: 15 Рейтинг сообщения: 0
|
Код: brcs Start ; если да, переходим к метке Там комментарии разнятся с действием |
||
Вернуться наверх | |||
Vova777 |
Заголовок сообщения: Re: Ошибка команды относительного перехода brcs.
|
Карма: -6 Рейтинг сообщения: 0
|
ILYAUL писал(а): Код: brcs Start ; если да, переходим к метке Там комментарии разнятся с действием Описание команды: Цитата: brcs label — проверяет флаг переноса (С) и переходит если он установлен. Я переписал команду «brcs» сейчас сам на это: Цитата: brcc PC + 2 ; Компилятор это принял, но в Протеусе работает не так. |
Вернуться наверх | |
DX168B |
Заголовок сообщения: Re: Ошибка команды относительного перехода brcs.
|
||
Карма: 25 Рейтинг сообщения: 0
|
Млин. Чет я тупанул маленько. Последний раз редактировалось DX168B Пт июн 15, 2012 21:20:52, всего редактировалось 1 раз. |
||
Вернуться наверх | |||
ILYAUL |
Заголовок сообщения: Re: Ошибка команды относительного перехода brcs.
|
||
Карма: 15 Рейтинг сообщения: 0
|
Всё , что мы тут обсуждали — написано в самой книге при описании программы |
||
Вернуться наверх | |||
Vova777 |
Заголовок сообщения: Re: Ошибка команды относительного перехода brcs.
|
Карма: -6 Рейтинг сообщения: 0
|
DX168B писал(а): Млин. Чет я тупанул маленько. Да, компилятор принимает. Но в Протеусе полная каша получается. Я думаю, это уже по моей вине. Где-то есть мелочи, которые нужно исправлять, схему переделывать. С другой стороны, так даже лучше, чем просто тупо перепечатывать код из книги, надо и мозг напрячь, поискать ошибки. |
Вернуться наверх | |
DX168B |
Заголовок сообщения: Re: Ошибка команды относительного перехода brcs.
|
||
Карма: 25 Рейтинг сообщения: 0
|
AVR Studio 4 понимает. |
||
Вернуться наверх | |||
Кто сейчас на форуме |
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10 |
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения |
0 / 0 / 0 Регистрация: 15.03.2010 Сообщений: 287 |
|
1 |
|
Дальний вызов16.12.2010, 22:41. Показов 8010. Ответов 12
Есть функции: viod main(viod) начинается по адресу 0x1c00 Компилятор ругается : Relative branch out of reach Все извраты, которые знал — попробывал. Успеха нет. Что делать ?
__________________
0 |
0 / 0 / 0 Регистрация: 07.03.2010 Сообщений: 233 |
|
16.12.2010, 22:47 |
2 |
http://www.rodyokot.ru/forum/viewtopys.php?t=9156 7. Вопрос:
0 |
0 / 0 / 0 Регистрация: 23.01.2010 Сообщений: 966 |
|
16.12.2010, 22:49 |
3 |
Что делать ? Ну я бы перестал пользоваться этим компилятором
0 |
0 / 0 / 0 Регистрация: 29.03.2010 Сообщений: 2,017 |
|
16.12.2010, 23:15 |
4 |
а что за компилятор хоть?
0 |
0 / 0 / 0 Регистрация: 24.01.2010 Сообщений: 727 |
|
16.12.2010, 23:51 |
5 |
спорим cvavr? Надо знать больше извратов
0 |
0 / 0 / 0 Регистрация: 16.08.2010 Сообщений: 1,326 |
|
16.12.2010, 23:56 |
6 |
Нахер он тогда вообще нужен (cvavr), если требует извратских подходов для элементарного кода?
0 |
0 / 0 / 0 Регистрация: 24.01.2010 Сообщений: 727 |
|
17.12.2010, 00:07 |
7 |
Он требует извратских подходов к извратскому коду. Поищи по форуму зачем это надо pmdr_soft
0 |
0 / 0 / 0 Регистрация: 15.03.2010 Сообщений: 287 |
|
19.12.2010, 21:42 |
8 |
Например #asm(«call _f2») Это как научите.
0 |
0 / 0 / 0 Регистрация: 15.03.2010 Сообщений: 287 |
|
19.12.2010, 21:43 |
9 |
У меня разница в адресах более 2047 слов.
0 |
0 / 0 / 0 Регистрация: 24.01.2010 Сообщений: 727 |
|
19.12.2010, 22:56 |
10 |
Это как научите. Всмысле как? Он при ассемблировании к именам добавляет «_». По-этому call _<имя>
0 |
0 / 0 / 0 Регистрация: 15.03.2010 Сообщений: 287 |
|
19.12.2010, 23:30 |
11 |
Это как научите. Всмысле как? Он при ассемблировании к именам добавляет «_». По-этому call _<имя> упс. Думал пробела нету. У меня более 2047 слов разница в адресах. Нужен какой то более извратистый изврат.
0 |
0 / 0 / 0 Регистрация: 24.01.2010 Сообщений: 727 |
|
19.12.2010, 23:36 |
12 |
call прыгает 64К или 4М слов, в зависимости от мк
0 |
0 / 0 / 0 Регистрация: 24.01.2010 Сообщений: 727 |
|
20.12.2010, 16:39 |
13 |
Кстате, еще одно извращение. Лучше предыдущего — не пишет unreferenced function и можно нормально передавать параметры. Код void func(void); void (*funcPtr)(void)=func; void main(void) { funcPtr(); while(1) { } } #asm(".org 0x1C00") void func(void) { }
0 |