Например TDA7294

Форум РадиоКот • Просмотр темы - Ошибка команды относительного перехода brcs.
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Чт май 29, 2025 18:15:33

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 12 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Ошибка команды относительного перехода brcs.
СообщениеДобавлено: Пт июн 15, 2012 20:14:32 
Вымогатель припоя

Карма: -6
Рейтинг сообщений: -47
Зарегистрирован: Чт июн 16, 2011 15:06:10
Сообщений: 507
Откуда: электрощитовая
Рейтинг сообщения: 0
Программа из книжки, я ни одной строчки не дописывал в ней, в чем дело?
Ошибка "Error 7 Relative branch out of reach" на строчке:
Код:
...
brcs Start                ;
...

Так понимаю, относительный переход вне досягаемости. Вот полный фрагмент:
Код:
...
Change:
in store, PortD           ; обновим значение
dec counter               ;
brne LowLoop              ;

ldi temp, 0x0F            ;
ldi temp2, 0x00           ;
cpi delay1, 0xA0          ;
cpc delay2, temp          ;
cpc delay3, temp2         ;
brcs Start                ; если да, переходим к метке

ldi temp, 0x00            ;
ldi temp2, 0x09           ;
ldi temp3, 0x3D           ;
clr lowerbyte             ;
clr upperbyte             ;
...

_________________
даешь высокое напряжение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ошибка команды относительного перехода brcs.
СообщениеДобавлено: Пт июн 15, 2012 20:34:04 
Друг Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52
Сообщений: 4468
Откуда: Главный Улей России (Moscow)
Рейтинг сообщения: 0
Либо Вы пытаетесь перейти по условию к несуществующей метке, либо она далековато находится.
Относительный переход - это переход не по адресу метки, а переход относительно текущего содержимого счетчика команд PC.
На более низком уровне выглядит как brcs PC+XX или PC-XX
Команды относительного перехода едят меньше памяти, но на них есть такое вот ограничение. Точно не помню, на сколько единиц можно прыгать. То ли +128\-127 , то ли меньше.
Ваша метка Start должна быть немного ближе и тогда проблему можно решить.
Если быстродействие не критично, то можно часть кода, находящегося между меткой Start и условием brcs Start вынести в виде подпрограммы.
Можно так же постараться развернуть алгоритм другим способом (реализовать по другому)

_________________
I am DX168B and this is my favourite forum on internet!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ошибка команды относительного перехода brcs.
СообщениеДобавлено: Пт июн 15, 2012 20:38:55 
Вымогатель припоя

Карма: -6
Рейтинг сообщений: -47
Зарегистрирован: Чт июн 16, 2011 15:06:10
Сообщений: 507
Откуда: электрощитовая
Рейтинг сообщения: 0
Дело в том, что это программа из книжки, по которой я учусь программировать. Там написано, что эта команда может перейти через не более чем 64 команды. А там их примерно 100. Сократить не могу, потому что: во-первых, не соображаю как это сделать, а во-вторых, если это пример, то он должен быть рабочим.

Может эту команду заменить на rjmp, но мне нужно чтобы флаг С обрабатывался тоже. Как можно сделать, скажите пожалуйста?
Так можно заменить эту команду:
Код:
...
brcc PC + 2
rjmp Start
...

_________________
даешь высокое напряжение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ошибка команды относительного перехода brcs.
СообщениеДобавлено: Пт июн 15, 2012 20:46:26 
Держит паяльник хвостом
Аватар пользователя

Карма: 15
Рейтинг сообщений: 70
Зарегистрирован: Ср мар 28, 2012 21:45:24
Сообщений: 904
Откуда: ВО
Рейтинг сообщения: 0
Что за книга? можно


Последний раз редактировалось ILYAUL Пт июн 15, 2012 20:48:08, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ошибка команды относительного перехода brcs.
СообщениеДобавлено: Пт июн 15, 2012 20:47:13 
Вымогатель припоя

Карма: -6
Рейтинг сообщений: -47
Зарегистрирован: Чт июн 16, 2011 15:06:10
Сообщений: 507
Откуда: электрощитовая
Рейтинг сообщения: 0
ILYAUL писал(а):
Что за книга?

Джон Мортон Микроконтроллеры AVR

_________________
даешь высокое напряжение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ошибка команды относительного перехода brcs.
СообщениеДобавлено: Пт июн 15, 2012 20:57:57 
Друг Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52
Сообщений: 4468
Откуда: Главный Улей России (Moscow)
Рейтинг сообщения: 0
Возможно, компилятор не понимает, что такое PC+2 (думает, что это метка)
Сделайте так:
Код:
...
brcc Label
rjmp Start
Label:
...

По сути, PC+2 это прыжок через rjmp Start
Просто автор книги решил не заморачиваться с метками, и написал так. А компилятор у него другой был. Видать, какой-то из старых TAVRASMов.

_________________
I am DX168B and this is my favourite forum on internet!


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Ошибка команды относительного перехода brcs.
СообщениеДобавлено: Пт июн 15, 2012 21:02:52 
Держит паяльник хвостом
Аватар пользователя

Карма: 15
Рейтинг сообщений: 70
Зарегистрирован: Ср мар 28, 2012 21:45:24
Сообщений: 904
Откуда: ВО
Рейтинг сообщения: 0
Код:
brcs Start                ; если да, переходим к метке

Там комментарии разнятся с действием


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ошибка команды относительного перехода brcs.
СообщениеДобавлено: Пт июн 15, 2012 21:08:51 
Вымогатель припоя

Карма: -6
Рейтинг сообщений: -47
Зарегистрирован: Чт июн 16, 2011 15:06:10
Сообщений: 507
Откуда: электрощитовая
Рейтинг сообщения: 0
ILYAUL писал(а):
Код:
brcs Start                ; если да, переходим к метке

Там комментарии разнятся с действием

Описание команды:
Цитата:
brcs label - проверяет флаг переноса (С) и переходит если он установлен.


Я переписал команду "brcs" сейчас сам на это:
Цитата:
brcc PC + 2 ;
rjmp Start ;


Компилятор это принял, но в Протеусе работает не так.

_________________
даешь высокое напряжение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ошибка команды относительного перехода brcs.
СообщениеДобавлено: Пт июн 15, 2012 21:17:57 
Друг Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52
Сообщений: 4468
Откуда: Главный Улей России (Moscow)
Рейтинг сообщения: 0
Млин. Чет я тупанул маленько.
В принципе да. Можно и так, RJMP достает дальше.
В книге проверяют, установлен ли флаг С в регистре SREG, и если установлен, то переход к началу программы.
Мы меняем условие. Проверяем состояние флага на сброс и если флаг сброшен, перепрыгиваем переход к началу и идем далее по программе.
А если флаг будет установлен, то условие не выполнится и произойдет переход к началу программы (метка Start)
А на счет Протеуса: Может есть еще ошибки в программе?

_________________
I am DX168B and this is my favourite forum on internet!


Последний раз редактировалось DX168B Пт июн 15, 2012 21:20:52, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ошибка команды относительного перехода brcs.
СообщениеДобавлено: Пт июн 15, 2012 21:19:54 
Держит паяльник хвостом
Аватар пользователя

Карма: 15
Рейтинг сообщений: 70
Зарегистрирован: Ср мар 28, 2012 21:45:24
Сообщений: 904
Откуда: ВО
Рейтинг сообщения: 0
Всё , что мы тут обсуждали - написано в самой книге при описании программы


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ошибка команды относительного перехода brcs.
СообщениеДобавлено: Пт июн 15, 2012 21:21:26 
Вымогатель припоя

Карма: -6
Рейтинг сообщений: -47
Зарегистрирован: Чт июн 16, 2011 15:06:10
Сообщений: 507
Откуда: электрощитовая
Рейтинг сообщения: 0
DX168B писал(а):
Млин. Чет я тупанул маленько.
В принципе да. Можно и так, RJMP достает дальше.
В книге проверяют, установлен ли флаг С в регистре SREG, и если установлен, то переход к началу программы.
Мы меняем условие. Проверяем состояние флага на сброс и если флаг сброшен, перепрыгиваем переход к началу и идем далее по программе.
А если флаг будет установлен, то условие не выполнится и произойдет переход к началу программы (метка Start)

Да, компилятор принимает. Но в Протеусе полная каша получается. Я думаю, это уже по моей вине. Где-то есть мелочи, которые нужно исправлять, схему переделывать. С другой стороны, так даже лучше, чем просто тупо перепечатывать код из книги, надо и мозг напрячь, поискать ошибки.

_________________
даешь высокое напряжение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ошибка команды относительного перехода brcs.
СообщениеДобавлено: Сб июн 16, 2012 19:43:42 
Друг Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52
Сообщений: 4468
Откуда: Главный Улей России (Moscow)
Рейтинг сообщения: 0
AVR Studio 4 понимает.
Если Вы в протеусе прикрепили к МК исходник, то лучше попробуйте прицепить к нему скомпилированный в AVR Studio файл прошивки (HEX файл) И проверьте исходники на прочие ошибки. В книгах бывают и опечатки.

_________________
I am DX168B and this is my favourite forum on internet!


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 12 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y