Страница 1 из 1

Что за ошибка в программе?

Добавлено: Чт дек 21, 2006 12:20:25
Tohey
Немогу понять почему появляется ошибка: "Relative branch out of reach". Компилятор начал ругаться когда я добавил в программе несколько подпрограмм(даже если они пустые) на brne, breq?

Добавлено: Чт дек 21, 2006 13:05:26
Tohey
Немного понял, если brne находится далеко от своей подрограммы то тогда появляется эта ошибка

Добавлено: Чт дек 21, 2006 18:08:45
romeuz
Странно, у меня обычно ругается на Call, если вызываемая подпрограмма далеко..ну это в прочем объяснимо, а тут...
тоже ограничение в 63 строки, наверно
Тоже жду ответа от ассов :)

Добавлено: Чт дек 21, 2006 20:50:55
Nanobyte
Команды условных переходов имеют "дальность стрельбы" от -64 до +63. У Вас расстояние до метки больше, поэтому ассемблер и ругается. В таких случаях я командой условного перехода обхожу команду RJMP, нацеленную на дальнюю метку. В случаях жёсткой экономии времени процессора приходится перегруппировывать подпрограммы, чтобы условный переход мог дотянуться до нужного места.

Добавлено: Чт дек 21, 2006 20:57:43
romeuz
А тогда call, может вызвать что-то не ниже чем 64 строки и не выше себя?

Re: Что за ошибка в программе?

Добавлено: Пт дек 22, 2006 08:30:04
123avr
Tohey писал(а):Немогу понять почему появляется ошибка: "Relative branch out of reach". Компилятор начал ругаться когда я добавил в программе несколько подпрограмм(даже если они пустые) на brne, breq?
зачем в компилятор добавлять АСМ инструкции ?

Re: Что за ошибка в программе?

Добавлено: Пт дек 22, 2006 10:21:37
romeuz
123avr писал(а): зачем в компилятор добавлять АСМ инструкции ?
Потому, что вся программа пишется на асме :)))

Добавлено: Пт дек 22, 2006 19:14:46
Nanobyte
romeuz писал(а):А тогда call, может вызвать что-то не ниже чем 64 строки и не выше себя?
Нет, у RCALL и RJMP дальность действия составляет от -2047 до +2047.
И не строк, а команд (слов по 2 байта).

Re: Что за ошибка в программе?

Добавлено: Сб дек 23, 2006 13:14:36
Tohey
123avr писал(а): зачем в компилятор добавлять АСМ инструкции ?
???

Добавлено: Сб дек 23, 2006 14:09:58
Мышонок
Действительно зачем? Ребята, уважайте друг друга, читайте внимательней:
Tohey писал(а):Компилятор начал ругаться когда я добавил в программе несколько подпрограмм(даже если они пустые) на brne, breq?

Добавлено: Вс дек 24, 2006 21:04:46
romeuz
Nanobyte писал(а):Нет, у RCALL и RJMP дальность действия составляет от -2047 до +2047.
И не строк, а команд (слов по 2 байта).
Аааа,!! Все, понял!!Спасибо!

Добавлено: Пн фев 12, 2007 12:41:40
Tohey
А вот ещё проблемка, написал 2х канальный терморегулятор и не могу въехать почему проц сам отключается? Бывает сразу после включения, бывает через пару мин. Какие могут влиять факторы? WDT не использую. ATmega16

Добавлено: Пн фев 12, 2007 18:39:40
Tohey
Нашёл! Уже не выключается! Целый день про$#ал :evil: .
А всего лишь забыл спрятать r16 в стек, при обработке прерывания от таймера. :)))

Добавлено: Пн фев 12, 2007 19:32:23
Abakt
Tohey писал(а):Целый день про$#ал :evil: .

А всего лишь забыл спрятать r16 в стек, при обработке прерывания от таймера. :)))
А компилятор Си не забывает это делать.