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

 
 
> CodeVisionAVR работа со структурами
Станис
сообщение Nov 22 2010, 16:48
Сообщение #1


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

Группа: Участник
Сообщений: 128
Регистрация: 12-11-09
Из: Perm
Пользователь №: 53 565



создал структуру:
struct in {
unsigned char b0:1;
unsigned char b1:1;
unsigned char b2:1;
unsigned char b3:1;
unsigned char b4:1;
unsigned char b5:1;
unsigned char b6:1;
unsigned char b7:1;
}ww;
b0-b7 - биты
присвоил значения:
ww.b0=1;
ww.b1=1;
ww.b2=1;
ww.b3=0;
ww.b4=0;
ww.b5=1;
ww.b6=1;
ww.b7=0;

скажите, пожалуйста, как теперь значение структуры присвоить переменной unsigned char in;
т.е. должна in==0b11100110
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sch
сообщение Dec 15 2011, 02:04
Сообщение #2


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

Группа: Участник
Сообщений: 165
Регистрация: 12-08-08
Из: Омск
Пользователь №: 39 557



Не буду создавать новую тему.
Какая-то фигня в codevision со структурами. Поднял давнишний проект, написанный в версии 1.25.5. Надо немного исправить его, ну думаю сделаю в версии 2.05.
Задал 2 безымянных структуры:
Код
eeprom struct {                                        
               unsigned char cc_l[3],            
                             cc_r[3],              
                             cc_low,                  
                             pc_l[4],                
                             pc_r[4],                
                             pc_low;                  
              } ecommand;    

flash struct {                                          // дефолтные значения
               unsigned char cc_l[3],                  
                             cc_r[3],                  
                             cc_low,                  
                             pc_l[4],                  
                             pc_r[4],                  
                             pc_low;                  
              } fcommand

так вот в версии 1.25 строка типа ecommand = fcommand; корректно присваивает все значения всем переменным структуры, а в версии 2.05 - ругается и не компилируется. Почему?
Go to the top of the page
 
+Quote Post
maksimp
сообщение Dec 15 2011, 02:56
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 313
Регистрация: 2-07-11
Пользователь №: 66 023



Цитата(sch @ Dec 15 2011, 05:04) *
Задал 2 безымянных структуры:
так вот в версии 1.25 строка типа ecommand = fcommand; корректно присваивает

Странно что работает с безымянными структурами.

А так будет работать?
Код
struct X {                                        
               unsigned char cc_l[3],            
                             cc_r[3],              
                             cc_low,                  
                             pc_l[4],                
                             pc_r[4],                
                             pc_low;                  
              };    

eeprom X ecommand;    
flash X fcommand;

Go to the top of the page
 
+Quote Post
sch
сообщение Dec 15 2011, 03:49
Сообщение #4


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

Группа: Участник
Сообщений: 165
Регистрация: 12-08-08
Из: Омск
Пользователь №: 39 557



Цитата(maksimp @ Dec 15 2011, 08:56) *
Странно что работает с безымянными структурами.

А так будет работать?

А что странного?
Разобрался, так как вы привели не работает, зато заработало вот так:
Код
struct X {                                        
               unsigned char cc_l[3],            
                             cc_r[3],              
                             cc_low,                  
                             pc_l[4],                
                             pc_r[4],                
                             pc_low;                  
              };    

struct X eeprom ecommand;    
struct X flash fcommand;

Спасибо за наводку.

Кстати, никакого уменьшения объема кода не заметил: в старой версии codevision прошивка была 3031 слов, в новой 2.05, с учетом вышеприведенных исправлений - 3061 слово.

Сообщение отредактировал sch - Dec 15 2011, 11:22
Go to the top of the page
 
+Quote Post
maksimp
сообщение Dec 15 2011, 10:40
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 313
Регистрация: 2-07-11
Пользователь №: 66 023



Цитата(sch @ Dec 15 2011, 06:49) *
А что странного?

Вроде структуры с одинаковым содержимым не считаются принадлежащими к одному типу, если по разному называются. Вот пример из Windows:

В winnt.h
Код
#define DECLARE_HANDLE(n) typedef struct n##__{int i;}*n

В windef.h
Код
DECLARE_HANDLE(HBITMAP);
DECLARE_HANDLE(HBRUSH);

И HBITMAP и HBRUSH - указатели на структуры их одного целого числа, но присваивать их друг другу нельзя. Специально для этого это всё и накручено.

Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Станис   CodeVisionAVR работа со структурами   Nov 22 2010, 16:48
- - ReAl   Дежавю како-то... Ну про union понятно, если CodeV...   Nov 22 2010, 17:48
|- - Станис   Цитата(ReAl @ Nov 22 2010, 23:48) Дежавю ...   Nov 22 2010, 17:59
|- - WHALE   Цитата(ReAl @ Nov 22 2010, 20:48) Дежавю ...   Nov 23 2010, 05:45
|- - ReAl   Цитата(WHALE @ Nov 23 2010, 07:45) Все он...   Nov 23 2010, 09:21
- - alexeyv   я обычно делал так: Кодtypedef union Type____{ uns...   Nov 23 2010, 03:49
|- - SasaVitebsk   Цитата(alexeyv @ Nov 23 2010, 07:49) И ни...   Nov 23 2010, 06:34
- - alexeyv   Цитатаа что с указателями будут преобразования? Те...   Nov 24 2010, 03:50
- - Сергей Борщ   QUOTE (sch @ Dec 15 2011, 04:04) ругается...   Dec 15 2011, 07:38
- - sch   Цитата(Сергей Борщ @ Dec 15 2011, 13:38) ...   Dec 15 2011, 11:20
- - Сергей Борщ   QUOTE (sch @ Dec 15 2011, 13:20) Вообще н...   Dec 15 2011, 14:35
- - sch   Цитата(Сергей Борщ @ Dec 15 2011, 20:35) ...   Dec 16 2011, 02:31


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

 


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


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