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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Аватара пользователя
Tohey
Грызет канифоль
Сообщения: 257
Зарегистрирован: Сб сен 09, 2006 19:00:18
Откуда: СССР

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

Сообщение Tohey »

Немогу понять почему появляется ошибка: "Relative branch out of reach". Компилятор начал ругаться когда я добавил в программе несколько подпрограмм(даже если они пустые) на brne, breq?
Реклама
Аватара пользователя
Tohey
Грызет канифоль
Сообщения: 257
Зарегистрирован: Сб сен 09, 2006 19:00:18
Откуда: СССР

Сообщение Tohey »

Немного понял, если brne находится далеко от своей подрограммы то тогда появляется эта ошибка
Реклама
Аватара пользователя
romeuz
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Пт июл 28, 2006 13:28:14
Откуда: Москва
Контактная информация:

Сообщение romeuz »

Странно, у меня обычно ругается на Call, если вызываемая подпрограмма далеко..ну это в прочем объяснимо, а тут...
тоже ограничение в 63 строки, наверно
Тоже жду ответа от ассов :)
Аватара пользователя
Nanobyte
Встал на лапы
Сообщения: 92
Зарегистрирован: Пн окт 30, 2006 01:09:37
Откуда: Таганрог

Сообщение Nanobyte »

Команды условных переходов имеют "дальность стрельбы" от -64 до +63. У Вас расстояние до метки больше, поэтому ассемблер и ругается. В таких случаях я командой условного перехода обхожу команду RJMP, нацеленную на дальнюю метку. В случаях жёсткой экономии времени процессора приходится перегруппировывать подпрограммы, чтобы условный переход мог дотянуться до нужного места.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
romeuz
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Пт июл 28, 2006 13:28:14
Откуда: Москва
Контактная информация:

Сообщение romeuz »

А тогда call, может вызвать что-то не ниже чем 64 строки и не выше себя?
Реклама
123avr

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

Сообщение 123avr »

Tohey писал(а):Немогу понять почему появляется ошибка: "Relative branch out of reach". Компилятор начал ругаться когда я добавил в программе несколько подпрограмм(даже если они пустые) на brne, breq?
зачем в компилятор добавлять АСМ инструкции ?
Реклама
Аватара пользователя
romeuz
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Пт июл 28, 2006 13:28:14
Откуда: Москва
Контактная информация:

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

Сообщение romeuz »

123avr писал(а): зачем в компилятор добавлять АСМ инструкции ?
Потому, что вся программа пишется на асме :)))
Аватара пользователя
Nanobyte
Встал на лапы
Сообщения: 92
Зарегистрирован: Пн окт 30, 2006 01:09:37
Откуда: Таганрог

Сообщение Nanobyte »

romeuz писал(а):А тогда call, может вызвать что-то не ниже чем 64 строки и не выше себя?
Нет, у RCALL и RJMP дальность действия составляет от -2047 до +2047.
И не строк, а команд (слов по 2 байта).
Аватара пользователя
Tohey
Грызет канифоль
Сообщения: 257
Зарегистрирован: Сб сен 09, 2006 19:00:18
Откуда: СССР

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

Сообщение Tohey »

123avr писал(а): зачем в компилятор добавлять АСМ инструкции ?
???
Аватара пользователя
Мышонок
Друг Кота
Сообщения: 3792
Зарегистрирован: Чт сен 14, 2006 11:42:09
Откуда: Обитаю на чердаке
Контактная информация:

Сообщение Мышонок »

Действительно зачем? Ребята, уважайте друг друга, читайте внимательней:
Tohey писал(а):Компилятор начал ругаться когда я добавил в программе несколько подпрограмм(даже если они пустые) на brne, breq?
Память очень интересная штука: бывает так, что запомнишь одно, а вспомнишь другое...
Аватара пользователя
romeuz
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Пт июл 28, 2006 13:28:14
Откуда: Москва
Контактная информация:

Сообщение romeuz »

Nanobyte писал(а):Нет, у RCALL и RJMP дальность действия составляет от -2047 до +2047.
И не строк, а команд (слов по 2 байта).
Аааа,!! Все, понял!!Спасибо!
Аватара пользователя
Tohey
Грызет канифоль
Сообщения: 257
Зарегистрирован: Сб сен 09, 2006 19:00:18
Откуда: СССР

Сообщение Tohey »

А вот ещё проблемка, написал 2х канальный терморегулятор и не могу въехать почему проц сам отключается? Бывает сразу после включения, бывает через пару мин. Какие могут влиять факторы? WDT не использую. ATmega16
Аватара пользователя
Tohey
Грызет канифоль
Сообщения: 257
Зарегистрирован: Сб сен 09, 2006 19:00:18
Откуда: СССР

Сообщение Tohey »

Нашёл! Уже не выключается! Целый день про$#ал :evil: .
А всего лишь забыл спрятать r16 в стек, при обработке прерывания от таймера. :)))
Аватара пользователя
Abakt
Вечно гонимый
Сообщения: 568
Зарегистрирован: Ср янв 10, 2007 19:15:51

Сообщение Abakt »

Tohey писал(а):Целый день про$#ал :evil: .

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

Вернуться в «Разные вопросы по МК»