реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> sbis SREG, SREG_Z и Operand 1 out of range x3f, помогите уже час бьюсь
shevek
сообщение Jul 2 2006, 20:22
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 50
Регистрация: 1-10-05
Пользователь №: 9 136



Компилятор ругается на вот эту инструкцию

sbis SREG, SREG_Z

Operand 1 out of range 0x3f

Битый час не пойму в чем дело. Наверное надо идти спать.


--------------------
Мы не просто идем в будущее, мы его атакуем.
Go to the top of the page
 
+Quote Post
Potter
сообщение Jul 2 2006, 20:51
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 151
Регистрация: 27-05-06
Из: Харьков
Пользователь №: 17 508



Цитата(shevek @ Jul 2 2006, 23:22) *
Компилятор ругается на вот эту инструкцию

sbis SREG, SREG_Z

Operand 1 out of range 0x3f

Битый час не пойму в чем дело. Наверное надо идти спать.


Я вообщето эту комаднду не знаю никогда ей не пользовался.... Посмотрел на нее описание..... поидее на месте SREG должен быть каойнибудь порт... типа PORTD, а на месте SREG_Z номер бита порта.... типа 0x1. Что в программе побразумевается под SREG и SREG_Z?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 2 2006, 21:08
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Как я понял, нужно пропустить следующую инструкцию, если в SREG установлен флаг Z. В таком случае аналогом этой конструкции будет "BREQ PC+2", если следующая за ней команда состоит из одного слова, или "BREQ PC+3" - если из двух.

А ругается компилятор совершенно справедливо: команды sbic и sbis работают в диапазоне адресов 00..1F, куда SREG ни разу не попадает.
Go to the top of the page
 
+Quote Post
shevek
сообщение Jul 2 2006, 21:10
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 50
Регистрация: 1-10-05
Пользователь №: 9 136



Спасибо.

Сообщение отредактировал shevek - Jul 2 2006, 21:11


--------------------
Мы не просто идем в будущее, мы его атакуем.
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Jul 2 2006, 21:11
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Кристалл какой? Компилятор ругается на то, что SREG за пределами IOspace. Соответсвенно cbi/sbi с этими адресами не работает.
PS Посмотрел, то что появилось одновременно со мной. Проверьте опрделение SREG/


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
shevek
сообщение Jul 2 2006, 21:37
Сообщение #6


Участник
*

Группа: Новичок
Сообщений: 50
Регистрация: 1-10-05
Пользователь №: 9 136



А я то торможу и ругаюсь на атмелов, что бранч по Z не предусмотрели,а он смотрит прямо на меня, только называется Branch if equal в кратком описании команд, посмотрел полное описание и все сразу прояснилось.

Спасибо еще раз.


--------------------
Мы не просто идем в будущее, мы его атакуем.
Go to the top of the page
 
+Quote Post
shevek
сообщение Jul 2 2006, 21:50
Сообщение #7


Участник
*

Группа: Новичок
Сообщений: 50
Регистрация: 1-10-05
Пользователь №: 9 136



beer_warrior

Посмотрел, то что появилось одновременно со мной. Проверьте опрделение SREG
SREG адрес 0x3F
Определение из стандартного заголовочного для tiny26 врятли там ошибки.

Совет aaarrr помог решить проблему.

Хотя у меня остались смутные сомнения что я где-то видел уже конструкцию
sbis SREG,SBIS_Z


--------------------
Мы не просто идем в будущее, мы его атакуем.
Go to the top of the page
 
+Quote Post
Nanobyte
сообщение Jul 2 2006, 22:13
Сообщение #8


За битами по регистрам гоняюсь
***

Группа: Свой
Сообщений: 457
Регистрация: 24-04-06
Из: Таганрог
Пользователь №: 16 446



smile.gif Эту конструкцию можно увидеть разве-что на [banned] курсе smile.gif smile.gif smile.gif


--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
Go to the top of the page
 
+Quote Post
_Bill
сообщение Jul 3 2006, 12:08
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(aaarrr @ Jul 3 2006, 00:08) *
Как я понял, нужно пропустить следующую инструкцию, если в SREG установлен флаг Z. В таком случае аналогом этой конструкции будет "BREQ PC+2", если следующая за ней команда состоит из одного слова, или "BREQ PC+3" - если из двух.

Так лучше не делать. Для этих целей существуют метки.

Сообщение отредактировал _Bill - Jul 3 2006, 12:09
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 3 2006, 17:43
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата
Так лучше не делать. Для этих целей существуют метки.

Плодить сотни меток тоже не дело. Нужно выбирать разумный компромисс.
Go to the top of the page
 
+Quote Post
CDT
сообщение Jul 4 2006, 03:31
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 303
Регистрация: 3-03-05
Пользователь №: 3 044



Цитата(aaarrr @ Jul 3 2006, 20:43) *
Плодить сотни меток тоже не дело.

А в чем проблема, если их разумно называть?


--------------------
Опыт - чудесная вещь: легко использовать, можно продать, трудно пропить.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 4 2006, 12:55
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(CDT @ Jul 4 2006, 07:31) *
А в чем проблема, если их разумно называть?

Проблема исключительно в лени. Представьте себе: для того, чтобы заменить
запись BREQ PC+0x02 нужно придумать и написать (два раза!) осмысленную метку.

Использование BREQ PC+0x02 ничем не отличается от использования SBRS/SBRC,
за исключением того, что просто нужно быть чуть внимательнее.
Go to the top of the page
 
+Quote Post
_Bill
сообщение Jul 4 2006, 13:07
Сообщение #13


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(aaarrr @ Jul 4 2006, 15:55) *
Цитата(CDT @ Jul 4 2006, 07:31) *

А в чем проблема, если их разумно называть?

Проблема исключительно в лени. Представьте себе: для того, чтобы заменить
запись BREQ PC+0x02 нужно придумать и написать (два раза!) осмысленную метку.

Использование BREQ PC+0x02 ничем не отличается от использования SBRS/SBRC,
за исключением того, что просто нужно быть чуть внимательнее.

Все правильно, только случаи BREQ PC+0x02 встречаются достаточно редко, а вычислять переходы вручную довольно хлопотно (я предоставляю это делать ассемблеру). Поэтому, если такая конструкция вдруг встретится, я предпочту добавить просто метку. Опять же, к сожалению, IAR не допускает локальных меток. Поэтому, чтобы не утруждать себя придумывать подобные метки, я просто использую в качестве меток иденификаторы типа ?0, ?1, ...
Go to the top of the page
 
+Quote Post
CDT
сообщение Jul 5 2006, 03:32
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 303
Регистрация: 3-03-05
Пользователь №: 3 044



Цитата(_Bill @ Jul 4 2006, 16:07) *
Цитата(aaarrr @ Jul 4 2006, 15:55) *

Цитата(CDT @ Jul 4 2006, 07:31) *

А в чем проблема, если их разумно называть?

Проблема исключительно в лени. Представьте себе: для того, чтобы заменить
запись BREQ PC+0x02 нужно придумать и написать (два раза!) осмысленную метку.

Использование BREQ PC+0x02 ничем не отличается от использования SBRS/SBRC,
за исключением того, что просто нужно быть чуть внимательнее.

Все правильно, только случаи BREQ PC+0x02 встречаются достаточно редко, а вычислять переходы вручную довольно хлопотно (я предоставляю это делать ассемблеру). Поэтому, если такая конструкция вдруг встретится, я предпочту добавить просто метку. Опять же, к сожалению, IAR не допускает локальных меток. Поэтому, чтобы не утруждать себя придумывать подобные метки, я просто использую в качестве меток иденификаторы типа ?0, ?1, ...

А я делаю внятное имя модуля:
Код
Divider10ms:

Далее внутри его сокращаю, добавляя номера с интервалом:
Код
Div10ms1:
Div10ms3:

Если интервал исчерпан поправками, расширяю его также с интервалами:
Код
Div10ms1:
Div10ms13:
Div10ms17:
Div10ms2:

Больше 4-х разрядов еще не получалось, придумывать надо один раз на модуль, а для ускорения писания использую Ctrl-C/Ctrl-V. Всегда знаю что за метка и где ее искать.
Может у кого еще есть симпатичные придумки на эту тему?


--------------------
Опыт - чудесная вещь: легко использовать, можно продать, трудно пропить.
Go to the top of the page
 
+Quote Post
vet
сообщение Jul 5 2006, 05:18
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



Использовать ассемблер с локальными метками.
При неимении - написать препроцессор, таковые предоставляющий.
При нежелании - разбивать проект на файлы помельче (имеет смысл, если ассемблер видит метку только в пределах модуля).
Ну, и BREQ PC+2 весьма удобно, что бы ни говорили.


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 11th August 2025 - 23:15
Рейтинг@Mail.ru


Страница сгенерированна за 0.01506 секунд с 7
ELECTRONIX ©2004-2016