Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 17.07.2009, 03:29  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию Си, IAR AVR & Hi Tech PICC

//Непонятка с UNION в HiTech PICC 9.60PL3
//имеем 4 переменых типа char и одну типа long требуется обьединить их союзом.
//обьявляю в IAR AVR 5.20:
Код:
union {
struct {
unsigned long BCD0:8,
			  BCD1:8,
			  BCD2:8;
			  BCD3:8;
		};
unsigned long BCDL;
		};
получаю переменную BCDL типа unsigned long и переменные BCD0,BCD1,BCD2,BCD3
типа unsigned char, ко всем переменным можно обращаться по именам, писать и читать, то есть переменные BCD0-3 по адресам совпадают с переменной BCDL что и требовалось получить
//если присвоить
Код:
BCDL=0x765453210
//то в переменых получаем:
BCD0=0x10
BCD1=0x32
BCD2=0x54
BCD2=0x76
//обьявляю в Hitech PICC 9.60pl3:
Код:
union{
struct{
unsigned long bcdl0;
unsigned char bcd0;
unsigned char bcd1;
unsigned char bcd2;
unsigned char bcd3;
}bcdl0;
}bcdl1;
в окне переменных (Watch) - вижу переменные bcd0,bcd1,bcd2,bcd3 обьединены союзом bcdl1 ;
но переменные bcd0,bcd1,bcd2,bcd3 не доступны для чтения и записи, как и переменная bcdl0 или bcdl1

//Если сначала обьявляю переменные а потом их обьединяю,
Код:
unsigned long bcdl0;
unsigned char bcd0;
unsigned char bcd1;
unsigned char bcd2;
unsigned char bcd3;

union{
struct{
unsigned long bcdl0;
unsigned char bcd0;
unsigned char bcd1;
unsigned char bcd2;
unsigned char bcd3;
}bcdl0;
}bcdl1;
то переменные bcd0,bcd1,bcd2,bcd3 и bcdl видны и доступны для записи чтения, но не совпадают по адресам с переменными (с такими же именами но обьединёными в союз ) bcd0,bcd1,bcd2,bcd3 и bcdl0
которые как и в первом примере не доступны для чтения и записи. То есть просто получаю переменные не оьединёные союзом....

Кто пихнёт в нужном направлении? чего я не так записываю в Hitech, что бы работало как в IAR, то есть правильно.

-- Прилагается рисунок: --

Реклама:
picavr вне форума  
Непрочитано 17.07.2009, 12:02  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию Re: Си, IAR AVR & Hi Tech PICC

Сообщение от picavr
//Непонятка с UNION в HiTech PICC 9.60PL3
//имеем 4 переменых типа char и одну типа long требуется обьединить их союзом.

//обьявляю в Hitech PICC 9.60pl3:
Код:
union{
struct{
unsigned long bcdl0;
unsigned char bcd0;
unsigned char bcd1;
unsigned char bcd2;
unsigned char bcd3;
}bcdl0;
}bcdl1;
в окне переменных (Watch) - вижу переменные bcd0,bcd1,bcd2,bcd3 обьединены союзом bcdl1 ;
но переменные bcd0,bcd1,bcd2,bcd3 не доступны для чтения и записи, как и переменная bcdl0 или bcdl1
Так к структурам надо обращатся так наверно: например к переменой bcd3-bcdl1.bcdl0.bcd3,на счет чтоб обращатся ко всей структуре за раз bcdl0 ни разу не встречал.

Сообщение от picavr
//Если сначала обьявляю переменные а потом их обьединяю,
Код:
unsigned long bcdl0;
unsigned char bcd0;
unsigned char bcd1;
unsigned char bcd2;
unsigned char bcd3;

union{
struct{
unsigned long bcdl0;
unsigned char bcd0;
unsigned char bcd1;
unsigned char bcd2;
unsigned char bcd3;
}bcdl0;
}bcdl1;
то переменные bcd0,bcd1,bcd2,bcd3 и bcdl видны и доступны для записи чтения, но не совпадают по адресам с переменными (с такими же именами но обьединёными в союз ) bcd0,bcd1,bcd2,bcd3 и bcdl0
которые как и в первом примере не доступны для чтения и записи. То есть просто получаю переменные не оьединёные союзом....
Так это и правельно,ведь ты объявляеш переменые отдельные,структуры отдельно.

-- Прилагается рисунок: --

CERGEI1982 вне форума  
Непрочитано 17.07.2009, 15:13  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию

Сообщение от CERGEI1982
Так к структурам надо обращатся так наверно: например к переменой bcd3-bcdl1.bcdl0.bcd3,на счет чтоб обращатся ко всей структуре за раз bcdl0 ни разу не встречал.
bcdl0 - здесь я хочу обратится не к структуре, а к переменной LONG, которая обьединена союзом со структурой...

Сообщение от CERGEI1982
Так это и правельно,ведь ты объявляеш переменые отдельные,структуры отдельно.
Ну это я типа догадался.. что отдельно... но как их обьединить... я подумал может нужно сначала их обьявить а потом обьеденинить?... если через обьявление UNION не работает... имена показывает а доступа нет...
Код:
union{
struct{
unsigned char bcd0;
unsigned char bcd1;
unsigned char bcd2;
unsigned char bcd3;
}bcdl0;
};
в IAR AVR всё работает.. может Hitech не уммеет обьединять структуры?

Или как правильно записать?
обьединение структуры из 4-х unsigned char переменных и unsigned long переменной...
picavr вне форума  
Непрочитано 17.07.2009, 15:16  
TEHb
Почётный гражданин KAZUS.RU
 
Аватар для TEHb
 
Регистрация: 27.06.2005
Сообщений: 1,389
Сказал спасибо: 19
Сказали Спасибо 210 раз(а) в 156 сообщении(ях)
TEHb на пути к лучшему
По умолчанию

Код:
union
 { unsigned long bcdl0; 
   struct
    { unsigned char bcd0; 
      unsigned char bcd1; 
      unsigned char bcd2; 
      unsigned char bcd3; 
    } bcdl0; 
 } bcdl1;
или даже если компилятор понимает безымянные структуры

Код:
union
 { unsigned long bcdl0; 
   struct
    { unsigned char bcd0; 
      unsigned char bcd1; 
      unsigned char bcd2; 
      unsigned char bcd3; 
    }; 
 } bcdl1;
TEHb вне форума  
Непрочитано 17.07.2009, 15:27  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию

спасибо ТЕНЬ... но на эти записи компилятор ругается...
я уже по всякому перепробовал записывать...
Код:
union 
{ unsigned long bcdl0; 
   struct 
    { unsigned char bcd0; 
      unsigned char bcd1; 
      unsigned char bcd2; 
      unsigned char bcd3; 
    }bcdl0; 
} bcdl1;
Error [261] W:NutStarmain.c; 85.7 struct/union member "bcdl0" redefined
Код:
union 
{ unsigned long bcdl0; 
   struct 
    { unsigned char bcd0; 
      unsigned char bcd1; 
      unsigned char bcd2; 
      unsigned char bcd3; 
    }; 
} bcdl1;
Error [285] W:NutStarmain.c; 85.2 no identifier in declaration
Код:
union 
{ 
   struct 
    { unsigned char bcd0; 
      unsigned char bcd1; 
      unsigned char bcd2; 
      unsigned char bcd3; 
    }bcdl0; 
} bcdl1;
не ругается.. переменные bcd0-bcd3, структура bcdl0 и союз bcdl1 видны в окне WATCH... но доступа к ним нет из программы:
Код:
void main(void){
	while(1){
	bcd0=0x10;
	}
}
Error [192] W:NutStarmain.c; 94.1 undefined identifier "bcd0"
picavr вне форума  
Непрочитано 17.07.2009, 15:32  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию

Видел как массивы под один указатель собирают http://www.microchip.su/showthread.php?t=6122
может этот ход получится и со структурами
CERGEI1982 вне форума  
Непрочитано 17.07.2009, 15:36  
TEHb
Почётный гражданин KAZUS.RU
 
Аватар для TEHb
 
Регистрация: 27.06.2005
Сообщений: 1,389
Сказал спасибо: 19
Сказали Спасибо 210 раз(а) в 156 сообщении(ях)
TEHb на пути к лучшему
По умолчанию

Код:
union 
{ unsigned long bcd_long; 
   struct 
    { unsigned char bcd0; 
      unsigned char bcd1; 
      unsigned char bcd2; 
      unsigned char bcd3; 
    } bcd_bytes;
} bcdl1;
ну конечно. у union были одинаковые имена полей. Попробуй так - должно пройти.
TEHb вне форума  
Непрочитано 17.07.2009, 19:52  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию

Сообщение от TEHb
Код:
union 
{ unsigned long bcd_long; 
   struct 
    { unsigned char bcd0; 
      unsigned char bcd1; 
      unsigned char bcd2; 
      unsigned char bcd3; 
    } bcd_bytes;
} bcdl1;
ну конечно. у union были одинаковые имена полей. Попробуй так - должно пройти.
Спасибо, но я подставлял разные имена в имена полей. Результат один.. обьявление союза - компилируется без ошибок.. и появляется в окошке переменных WATCH в MPLABе, но когда добавяешь чтение или запись в bcd_long или bcd0-3
Код:
bcd_long=0x123456;
bcd0=0x12;
bcd1=0x34;
bcd2=0x56;
bcd3=0x78;
компилятор ругается ))))хотя вроде бы всё правильно..
undefined identifier "bcd_long"
undefined identifier "bcd0"
undefined identifier "bcd1"
undefined identifier "bcd2
undefined identifier "bcd3"
Перепробовал компиляторы
9.50PL2
9.60PL1
9.60PL3

это заговор компиляторов издеваются ))))
имена видны а обратиться низя...

-- Прилагается рисунок: --

picavr вне форума  
Непрочитано 17.07.2009, 19:58  
TEHb
Почётный гражданин KAZUS.RU
 
Аватар для TEHb
 
Регистрация: 27.06.2005
Сообщений: 1,389
Сказал спасибо: 19
Сказали Спасибо 210 раз(а) в 156 сообщении(ях)
TEHb на пути к лучшему
По умолчанию

А если так:

Код:
longchar.bcd_long = 0x12345678;
TEHb вне форума  
Непрочитано 17.07.2009, 20:17  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию

Сообщение от TEHb
А если так:
Код:
longchar.bcd_long = 0x12345678;
Пипец просто... так сработало )) а тогда обращаться к структуре так ...
Код:
longchar.bcd_bytes.bcd0 = 0x23;
А где указана такая форма записи для обращения к элементу союза?...

Ужас с этим Си.. у каждого компилятора свои тараканы...

А к примеру в IAR AVR обращение было бы обычное как к переменным обьявленым обычноым образом...
Код:
bcd_long = 0x01234567;
Код:
bcd0 = 0x57;
А ведь это ещё не расширения для МК... это по моему чистый СИ... И по идее форма записи союзов - должна быть одинакова у всех компиляторов... ПИПЕЦ ПРОСТО!!! отбивает охоту изучать СИ с такими выкрутасами ...

Спасибо.. ТЕНЬ
picavr вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
HI-TECH PICC™ Enterprise Edition (new!!!)??? shihaidong Микроконтроллеры, АЦП, память и т.д 14 30.12.2011 15:45
Библиотеки LCD 44780 на С CCS или HI-TECH PICC для PIC16 vsvetlov Микроконтроллеры, АЦП, память и т.д 15 27.10.2009 08:03
IAR for AVR & Assembler GLVlad Микроконтроллеры, АЦП, память и т.д 3 04.06.2008 16:46
Вопрос новичка. IAR C, AVR & interrupt sns13 Микроконтроллеры, АЦП, память и т.д 5 18.03.2008 18:08
PIC18F.., HI-TECH PICC-18 и MPLAB avartemiy Микроконтроллеры, АЦП, память и т.д 11 20.08.2007 02:35


Часовой пояс GMT +4, время: 09:41.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot