|
sbis SREG, SREG_Z и Operand 1 out of range x3f, помогите уже час бьюсь |
|
|
|
Jul 2 2006, 20:22
|
Участник

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

|
Компилятор ругается на вот эту инструкцию
sbis SREG, SREG_Z
Operand 1 out of range 0x3f
Битый час не пойму в чем дело. Наверное надо идти спать.
--------------------
Мы не просто идем в будущее, мы его атакуем.
|
|
|
|
|
Jul 2 2006, 20:51
|

Частый гость
 
Группа: Участник
Сообщений: 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?
|
|
|
|
|
Jul 2 2006, 21:10
|
Участник

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

|
Спасибо.
Сообщение отредактировал shevek - Jul 2 2006, 21:11
--------------------
Мы не просто идем в будущее, мы его атакуем.
|
|
|
|
|
Jul 2 2006, 21:37
|
Участник

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

|
А я то торможу и ругаюсь на атмелов, что бранч по Z не предусмотрели,а он смотрит прямо на меня, только называется Branch if equal в кратком описании команд, посмотрел полное описание и все сразу прояснилось.
Спасибо еще раз.
--------------------
Мы не просто идем в будущее, мы его атакуем.
|
|
|
|
|
Jul 2 2006, 21:50
|
Участник

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

|
beer_warrior
Посмотрел, то что появилось одновременно со мной. Проверьте опрделение SREG SREG адрес 0x3F Определение из стандартного заголовочного для tiny26 врятли там ошибки. Совет aaarrr помог решить проблему.
Хотя у меня остались смутные сомнения что я где-то видел уже конструкцию sbis SREG,SBIS_Z
--------------------
Мы не просто идем в будущее, мы его атакуем.
|
|
|
|
|
Jul 3 2006, 12:08
|
Местный
  
Группа: Участник
Сообщений: 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
|
|
|
|
|
Jul 4 2006, 03:31
|
Местный
  
Группа: Свой
Сообщений: 303
Регистрация: 3-03-05
Пользователь №: 3 044

|
Цитата(aaarrr @ Jul 3 2006, 20:43)  Плодить сотни меток тоже не дело. А в чем проблема, если их разумно называть?
--------------------
Опыт - чудесная вещь: легко использовать, можно продать, трудно пропить.
|
|
|
|
|
Jul 4 2006, 12:55
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(CDT @ Jul 4 2006, 07:31)  А в чем проблема, если их разумно называть? Проблема исключительно в лени. Представьте себе: для того, чтобы заменить запись BREQ PC+0x02 нужно придумать и написать (два раза!) осмысленную метку. Использование BREQ PC+0x02 ничем не отличается от использования SBRS/SBRC, за исключением того, что просто нужно быть чуть внимательнее.
|
|
|
|
|
Jul 4 2006, 13:07
|
Местный
  
Группа: Участник
Сообщений: 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, ...
|
|
|
|
|
Jul 5 2006, 03:32
|
Местный
  
Группа: Свой
Сообщений: 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. Всегда знаю что за метка и где ее искать. Может у кого еще есть симпатичные придумки на эту тему?
--------------------
Опыт - чудесная вещь: легко использовать, можно продать, трудно пропить.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|