Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: присвоение значения переменной
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
HarieR
Здравствуйте, хочу присвоить одной переменной значение другой: не выходит. В окне watch (среда AVR Studio 4) напротив byte2 пишет Location not valid. Как присвоить переменной значение другой переменной?
Помогите нубу, плиз laughing.gif

Код
volatile unsigned char byte2 = 0x12;    
volatile unsigned char F713 =  0x75;
byte2 = byte2 | F713;
_Pasha
Сбываеццо предсказание, ура!
Цитата(_Pasha @ Jan 24 2011, 11:25) *
Имхо, в недалеком будущем появится обилие тем типа "как присвоить значение 8-ми битной переменной" с последующим флеймом на 200 страниц. Нас почти 50штук (тысяч ГГ), давайте будем людьми, потому что уже стыдно перед более интеллектуальными амебами и инфузориями.

ссылка
По теме: не может быть. Volatile всегда отображается. Может, они локальные и сразу вышли из блока?
SZ0
А может они нигде больше не используются и выкинуты компилятором как не нужные?
_Pasha
Цитата(SZ0 @ Jan 28 2011, 13:47) *
А может они нигде больше не используются и выкинуты компилятором как не нужные?

volatile не выкидывается
GetSmart
Ещё как выкидывается, если она статик и к ней нет обращения и на чтение и на запись. Локальные так же.
_Pasha
Цитата(GetSmart @ Jan 28 2011, 14:32) *
Ещё как выкидывается, если она статик и к ней нет обращения и на чтение и на запись. Локальные так же.

Код
volatile unsigned char byte2 = 0x12;    
volatile unsigned char F713 =  0x75;
byte2 = byte2 | F713;


В конкретно этом случае? Ню-ню. biggrin.gif
sergeeff
А если написать так:

Код
volatile unsigned char byte2 = 0x12;    
volatile unsigned char byte3 = 0x75;
byte2 = byte2 | byte3;


тоже не работает?
dimmy_e
Цитата(sergeeff @ Jan 29 2011, 01:41) *
А если написать так:
[skip]
тоже не работает?

Что вы мучаетесь, посмотрите ассемблерный листинг. В сомнительных случаях я всегда так делаю.
sergeeff
Цитата(dimmy_e @ Jan 30 2011, 10:52) *
Что вы мучаетесь, посмотрите ассемблерный листинг. В сомнительных случаях я всегда так делаю.


Я не мучаюсь и мне AVR Studio ставить в лом, по причине полной не надобности. Просто переменная с именем F713 подозрительно смахивает на шестнадцатиричное число.
dimmy_e
Цитата(sergeeff @ Jan 30 2011, 12:10) *
Я не мучаюсь и мне AVR Studio ставить в лом, по причине полной не надобности. Просто переменная с именем F713 подозрительно смахивает на шестнадцатиричное число.

Ну это же не ассемблер - да и там нужен префикс или суффикс для шестнадцатеричных чисел.

О AVR Studio я не говорю, а советую топик-стартеру посмотреть ассемблерный листинг компилятора - чем-то же он свой код компилирует? Я, например, IAR-ом пользуюсь. Но студия тоже стоит - для прошивки обновлений в AVR Dragon, например. sm.gif

P.S.: кстати, как тут принято обращаться: на вы, на Вы, на ты?
injen-d
Цитата(HarieR @ Jan 28 2011, 08:08) *
Здравствуйте, хочу присвоить одной переменной значение другой: не выходит. В окне watch (среда AVR Studio 4) напротив byte2 пишет Location not valid. Как присвоить переменной значение другой переменной?
Помогите нубу, плиз laughing.gif

Код
volatile unsigned char byte2 = 0x12;    
volatile unsigned char F713 =  0x75;
byte2 = byte2 | F713;


Как я понял операция
Код
byte2 = byte2 | F713;
находится за пределами какой-либо функции, на что и ругается компилятор.

byte2 = byte2 | F713; как и любые операции с переменными(кроме начальной инициализации) должны быть прописаны в теле какой-либо функции.

sergeeff
Цитата(dimmy_e @ Jan 30 2011, 14:13) *
Ну это же не ассемблер - да и там нужен префикс или суффикс для шестнадцатеричных чисел.

О AVR Studio я не говорю, а советую топик-стартеру посмотреть ассемблерный листинг компилятора - чем-то же он свой код компилирует? Я, например, IAR-ом пользуюсь. Но студия тоже стоит - для прошивки обновлений в AVR Dragon, например. sm.gif

P.S.: кстати, как тут принято обращаться: на вы, на Вы, на ты?


1. Тут все на "вы".
2. Вы даете ссылку на мой совет, соответственно я ваш ответ так и воспринимаю, а не как совет автору топика.
3. Насчет "префикса или суффикса для шестнадцатеричных чисел" я прекрасно осведомлен. Просто во всяких компиляторах полно всяческих нюансов.
4. Вам на будущее. Не очень обольщайтесь ассемблерным листингом компилятора. Часто это некий промежуточный результат до окончательной обработки оптимизатором (-ами). Лично сталкивался. 100% можно доверять только дизассемблеру бинарного файла.

Цитата(injen-d @ Jan 30 2011, 14:31) *
Как я понял операция
Код
byte2 = byte2 | F713;
находится за пределами какой-либо функции, на что и ругается компилятор.

byte2 = byte2 | F713; как и любые операции с переменными(кроме начальной инициализации) должны быть прописаны в теле какой-либо функции.


Так как автор своим фрагментом кода задает большое количество загадок, то может быть. Совершенно ведь не ясно, переменные объявлены как глобальные или локальные. Операция "или" внутри или вне функции.

Самое мне не понятное и часто наблюдаемое. Автор что-то спрашивает и исчезает. Не интересно? Сам свои ляпы нашел?
HarieR
Спасибо всем! Проблема решилась:
переменные были объявлены в теле main, т.е. действительно как локальные, и компилятор не хотел их показывать:
Код
void main()
{    
volatile unsigned char byte2 = 0x12;    
volatile unsigned char F713 =  0x75;
byte2 = byte2 | F713;
}

Сработал вариант:

Код
volatile unsigned char byte2 = 0x12;    
volatile unsigned char F713 =  0x75;
void main()
{    
byte2 = byte2 | F713;
}

Прошу сильно не пинать maniac.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.