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

 
 
 
Reply to this topicStart new topic
> AVR GCC, размещение двух переменных по одному адресу
Kuz'ka
сообщение Dec 13 2005, 07:59
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 13-12-05
Пользователь №: 12 152



Есть команда препроцессора #define. Ею можно переопределить имя переменной.

int Var1;

#define Var2 Var1;


Но в полученную новую переменную нельзя записать новое значение (Var2 = 34; не работает ).



Есть анонимные объединения:

static union {
float Var1;
float Var2;
};

но компилятор WINAVR видимо не умеет им пользоваться, так как требует ввести имя объединения.


Есть определение ссылки:

float Var1;
float &Var2 = Var1;

оно тоже не работает...

Так вот, как же все таки в WINAVR получить две переменные Var1 и Var2 по одному адресу? (переменные из объединения U.Var1 и U.Var2 не подходят).

Спасибо!
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Dec 13 2005, 08:31
Сообщение #2


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Анонимные объединения и ссылки это свойства из C++.
Но поддерживается ли C++ в WinAVR?
Go to the top of the page
 
+Quote Post
Petka
сообщение Dec 13 2005, 08:31
Сообщение #3


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

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(Kuz'ka @ Dec 13 2005, 10:59) *
Есть команда препроцессора #define. Ею можно переопределить имя переменной.

int Var1;

#define Var2 Var1;


Но в полученную новую переменную нельзя записать новое значение (Var2 = 34; не работает ).

.........
Спасибо!


Как это не работает?! Такого быть не может, потому-что такого не может быть!
при компиляции везде после самого #define все "Var2" ЗАМЕНЯЮТСЯ на Var1. Если не работает Var2, значит и не работает Var2! Привнедите полный код, вероятно у вас ошибка.
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Dec 13 2005, 08:41
Сообщение #4


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

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



В gcc можно задать стандарт компиляции c89/c99/gnu89/gnu99.
Посмотри различия в стандартах.
А самый простой выход, конечно именованый union.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
Kuz'ka
сообщение Dec 13 2005, 09:46
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 13-12-05
Пользователь №: 12 152



float Var1 = 55.6; //объявляем


#define Var2 Var1; //переопределяем

Var1 = 23.6; //это присвоение работает

Var2 = 45.8; //на эту строку компилятор пишет следующее error: parse error before '=' token


то есть Var 2 считается константой

Цитата(beer_warrior @ Dec 13 2005, 11:41) *
В gcc можно задать стандарт компиляции c89/c99/gnu89/gnu99.
Посмотри различия в стандартах.
А самый простой выход, конечно именованый union.



Ни с одним из ключей c89/c99/gnu89/gnu99 ссылки и анонимные объединения не работают...Полччается что же, WinAvr на работает по стандарту С++?
Go to the top of the page
 
+Quote Post
Petka
сообщение Dec 13 2005, 10:06
Сообщение #6


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

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(Kuz'ka @ Dec 13 2005, 12:46) *
float Var1 = 55.6; //объявляем


#define Var2 Var1; //переопределяем

Var1 = 23.6; //это присвоение работает

Var2 = 45.8; //на эту строку компилятор пишет следующее error: parse error before '=' token


то есть Var 2 считается константой

Цитата(beer_warrior @ Dec 13 2005, 11:41) *

В gcc можно задать стандарт компиляции c89/c99/gnu89/gnu99.
Посмотри различия в стандартах.
А самый простой выход, конечно именованый union.



Ни с одним из ключей c89/c99/gnu89/gnu99 ссылки и анонимные объединения не работают...Полччается что же, WinAvr на работает по стандарту С++?



Ржу =) убери ";" в строке с #define а то компилятор пытается скомпилировать "Var1; = 45.8;"!
Go to the top of the page
 
+Quote Post
Kuz'ka
сообщение Dec 13 2005, 10:20
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 13-12-05
Пользователь №: 12 152



Ржу =) убери ";" в строке с #define а то компилятор пытается скомпилировать "Var1; = 45.8;"!
[/quote]



Самому смешно...Все понял. Спасиба. (причем когда то я на это уже натыкалсиsmile.gif)))
Go to the top of the page
 
+Quote Post
GrayCat
сообщение Dec 14 2005, 07:15
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 7-10-05
Из: UA
Пользователь №: 9 342



Ну а вот это:
Цитата(Kuz'ka @ Dec 13 2005, 09:59) *
float Var1;
float &Var2 = Var1;
работать и не должно! "Усе напутал!" © Б.р.

Код
float Var1;
float *Var2 = &Var1;
-- так должно работать. Но обращаться прийдется к Var1 и *Var2. И помнить, что обращение по ссылке может ухудшить размер и скорость кода...

Сообщение отредактировал GrayCat - Dec 14 2005, 07:17


--------------------
Gray©at
Go to the top of the page
 
+Quote Post
Old1
сообщение Dec 14 2005, 07:45
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 697
Регистрация: 26-07-05
Из: Могилев
Пользователь №: 7 095



Цитата(GrayCat @ Dec 14 2005, 11:15) *
Ну а вот это:
Цитата(Kuz'ka @ Dec 13 2005, 09:59) *
float Var1;
float &Var2 = Var1;
работать и не должно! "Усе напутал!" © Б.р.

На С не должно, а на С++ работает...
Go to the top of the page
 
+Quote Post
sensor_ua
сообщение Jan 10 2006, 21:23
Сообщение #10


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

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



Цитата(Kuz'ka @ Dec 13 2005, 11:46) *
#define Var2 Var1; //переопределяем

Var1 = 23.6; //это присвоение работает

Var2 = 45.8; //на эту строку компилятор пишет следующее error: parse error before '=' token


Удивлюсь, если коммент "//переопределяем" тоже есть, а оно работаетwink.gif А то это классический ляп


--------------------
aka Vit
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 01:08
Рейтинг@Mail.ru


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