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

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

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

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

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

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

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

 
Опции темы

Си, IAR AVR & Hi Tech PICC

Непрочитано 17.07.2009, 03:29  
picavr
Почётный гражданин KAZUS.RUN
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,815
Сказал спасибо: 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.RUN
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,578
Сказал спасибо: 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.RUN
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,815
Сказал спасибо: 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.RUN
 
Аватар для TEHb
 
Регистрация: 27.06.2005
Сообщений: 1,387
Сказал спасибо: 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.RUN
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,815
Сказал спасибо: 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.RUN
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,578
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию

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

А если так:

Код:
longchar.bcd_long = 0x12345678;
TEHb вне форума  
Непрочитано 17.07.2009, 20:17  
picavr
Почётный гражданин KAZUS.RUN
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,815
Сказал спасибо: 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, время: 04:55.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.