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

 
 
> Union c внешними (external) переменными, подскажите, как сделать
Dmitro25
сообщение Apr 14 2010, 12:09
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 60
Регистрация: 4-04-07
Пользователь №: 26 770



Здравствуйте.
Кратко опишу проблему:
В программе есть два модуля: один низкоуровневый - "lowlevel.c" и основной модуль "main.c". В модуле "lowlevel.c" объявлен некий буфер
Код
char buffer[10];

и модуль умеет с ним работать, например, посылать данные из этого буфера на внешнее устройство. Этому модулю нет дела до того, что означает каждый байт этого буфера, его дело - передать данные.
На самом деле каждый байт из этого буфера имеет особый смысл: заголовок, управляющие поля, данные, контрольная сумма.
Хочется, чтобы основной модуль мог работать с этим буфером как со структурой, т.е. что-то вроде того:
Код
  union {            
    char buffer[10];
    struct {
      char NT;
      char mask;
      char event;
      char blok;
      char echo;
      char data[3];
      int crc;
    };
  } LO_TRBuf;

Однако, всё осложняется тем, что элементы структуры описаны с модуле "main.c", а буфер находится в "lowlevel.c". Пробовал использовать директиву "extern" в разных местах, но добиться желаемого не удалось. Можно, конечно перенести описание структуры в "lowlevel.h", но это будет неправильно с точки зрения инкапсуляции данных.
Посоветуйте какое-либо решение?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MrYuran
сообщение Apr 14 2010, 12:15
Сообщение #2


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(Dmitro25 @ Apr 14 2010, 16:24) *
Однако, всё осложняется тем, что элементы структуры описаны с модуле "main.c", а буфер находится в "lowlevel.c".

А нельзя структуру описать в main.h?
И вставляйте потом куда угодно

extern-ом вы даёте ссылку на экземпляр объекта, а не на его описание


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Dmitro25   Union c внешними (external) переменными   Apr 14 2010, 12:09
- - Dmitro25   2MrYuran: Она у меня и так описана в main.c. А под...   Apr 14 2010, 12:18
- - Сергей Борщ   Работать с указателями. Кодtypedef struct { char...   Apr 14 2010, 12:30
|- - XVR   Цитата(Сергей Борщ @ Apr 14 2010, 16:45) ...   Apr 15 2010, 09:37
|- - MrYuran   Цитата(XVR @ Apr 15 2010, 13:52) Тут ошиб...   Apr 15 2010, 09:38
|- - XVR   Цитата(MrYuran @ Apr 15 2010, 13:53) Без ...   Apr 15 2010, 10:17
|- - MrYuran   Цитата(XVR @ Apr 15 2010, 14:32) extern c...   Apr 15 2010, 10:30
||- - XVR   Цитата(MrYuran @ Apr 15 2010, 14:45) Ниче...   Apr 15 2010, 11:11
|- - Сергей Борщ   Цитата(XVR @ Apr 15 2010, 12:32) В этом к...   Apr 15 2010, 11:16
- - Dmitro25   2Сергей Борщ Спасибо за ответ. Я уже думал о таком...   Apr 14 2010, 12:46
|- - Палыч   Зачем в union тащить какой-то extern? Нужно в моду...   Apr 14 2010, 13:00
|- - zltigo   Цитата(Dmitro25 @ Apr 14 2010, 15:01) Но ...   Apr 14 2010, 13:11
|- - Сергей Борщ   Цитата(Dmitro25 @ Apr 14 2010, 15:01) Но ...   Apr 14 2010, 20:10
- - baralgin   Или так: разместить объект структуры(не массив) в ...   Apr 14 2010, 13:06
- - Dmitro25   2Палыч 2baralgin Я просто для инкапсуляции хотел, ...   Apr 14 2010, 13:52
|- - _Pasha   Цитата(Dmitro25 @ Apr 14 2010, 17:07) я у...   Apr 14 2010, 13:56
|- - Палыч   Цитата(Dmitro25 @ Apr 14 2010, 17:07) Я п...   Apr 14 2010, 15:15
- - baralgin   Dmitro25 Пишем в lowlevel функцию типа "void*...   Apr 14 2010, 14:09
- - Dmitro25   2baralgin 2Сергей Борщ Спасибо, я, наверное, что-т...   Apr 15 2010, 05:56
- - Dmitro25   XVR Спасибо за подсказку. Ваш вариант с преобразо...   Apr 16 2010, 04:32


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

 


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


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