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

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

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

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

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

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


 
Опции темы
Непрочитано 03.05.2013, 18:08  
stmfaq
Прописка
 
Регистрация: 31.03.2013
Сообщений: 146
Сказал спасибо: 50
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
stmfaq на пути к лучшему
По умолчанию Проблема при работе с структурой.

Что-то я уже запарился, не пойму где торможу.
Допустим в программе есть два модуля ethernet.c и client.c и один заголовочный файл global.h . Модуль ethernet.c и client.c используют общий массив структур который я объявил в global.h


‹global.h ›
Код:
struct s_read {
unsigned char inet_status;
unsigned char client_status;
};
extern struct s_read *reader;

‹ethernet.c›
Код:
#include "global.h"
reader[1].inet_status=5;

‹client.c›
Код:
#include "global.h"
if (reader[1].inet_status==5) reader[1].client_status=2;
IAR ругается Error[Li005]: no definition for "reader"

Что нужно изменить в моем случае чтобы можно было работать с общим массивом структур из разных модулей?
Реклама:

Последний раз редактировалось stmfaq; 03.05.2013 в 18:12.
stmfaq вне форума  
Непрочитано 03.05.2013, 18:18  
metrA85
Прописка
 
Аватар для metrA85
 
Регистрация: 09.08.2007
Адрес: Харьков
Сообщений: 275
Сказал спасибо: 300
Сказали Спасибо 113 раз(а) в 56 сообщении(ях)
metrA85 на пути к лучшему
По умолчанию Re: Проблема при работе с структурой.

а зачем extern используется в объявлении? Это лишнее!
metrA85 вне форума  
Непрочитано 03.05.2013, 18:34  
_Артём_
Гражданин KAZUS.RU
 
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
_Артём_ на пути к лучшему
По умолчанию Re: Проблема при работе с структурой.

Сообщение от stmfaq Посмотреть сообщение
Что-то я уже запарился, не пойму где торможу.

IAR ругается Error[Li005]: no definition for "reader"

Что нужно изменить в моем случае чтобы можно было работать с общим массивом структур из разных модулей?
Иар говорит - нет определения. Так определите.
Код:
struct s_read *reader;
Но не в global.h, а в каком-нибудь из ц-файлов.
_Артём_ вне форума  
Непрочитано 03.05.2013, 18:34  
Godzilla82
Почётный гражданин KAZUS.RU
 
Регистрация: 29.10.2006
Сообщений: 1,448
Сказал спасибо: 96
Сказали Спасибо 319 раз(а) в 233 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: Проблема при работе с структурой.

Сам пишу на Delphi, но одно время пришлось по граблям пройтись.

global.h
В нём описания типов структур.

global.c
В нём реальные объявления, возможно с инициализацией.

Чтобы другие файлы могли видеть переменные, описанные в global.c, надо в global.h повторить эти же самые описания, что и в global.c, но со словом extern.

А потом уже в любом модуле подключать global.h и пользоваться переменными.

‹global.h ›
Код:
struct s_read {
unsigned char inet_status;
unsigned char client_status;
};
extern struct s_read *reader;

‹global.с ›
Код:
struct s_read *reader;

‹ethernet.c›
Код:
#include "global.h"
reader[1].inet_status=5;

‹client.c›
Код:
#include "global.h"
if (reader[1].inet_status==5) reader[1].client_status=2;
P.S. там ещё надо include "global.c" в файл global.h прописать или наоборот.

P.P.S. Если делать неправильно, можно напороться на такую шнягу, что в каждом модуле будут создаваться локальные копии глобальных переменных. Долго будете гадать, откуда ноги растут...

P.P.P.S А зачем индекс у reader???

Последний раз редактировалось Godzilla82; 03.05.2013 в 18:38.
Godzilla82 вне форума  
Непрочитано 03.05.2013, 18:35  
_Артём_
Гражданин KAZUS.RU
 
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
_Артём_ на пути к лучшему
По умолчанию Re: Проблема при работе с структурой.

Сообщение от metrA85 Посмотреть сообщение
а зачем extern используется в объявлении? Это лишнее!
Это не лишнее - это называется declaration, если без extern - то definition.
_Артём_ вне форума  
Непрочитано 03.05.2013, 18:41  
electroTrash
Прописка
 
Регистрация: 05.01.2013
Сообщений: 201
Сказал спасибо: 12
Сказали Спасибо 29 раз(а) в 24 сообщении(ях)
electroTrash на пути к лучшему
По умолчанию Re: Проблема при работе с структурой.

Сообщение от stmfaq Посмотреть сообщение
используют общий массив структур который я объявил в global.h
А где там массив? Если Вы имеете это:
Сообщение от stmfaq Посмотреть сообщение
extern struct s_read *reader;
?
То это не массив, а ссылка, да и индекс массива в Си начинает не 1, а 0 . Для обращения к элементам структуры указателя нужно
Цитата:
reader-›inet_status=5;
или
Цитата:
(*reader).inet_status=5;
electroTrash вне форума  
Непрочитано 03.05.2013, 18:53  
stmfaq
Прописка
 
Регистрация: 31.03.2013
Сообщений: 146
Сказал спасибо: 50
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
stmfaq на пути к лучшему
По умолчанию Re: Проблема при работе с структурой.

Сообщение от electroTrash Посмотреть сообщение
А где там массив? Если Вы имеете это:
Да я вот как раз сейчас и не пойму как объявить массив допустим из 3 структур в заголовочном файле. Если в одном из модулей то массив создается нормально, а в заголовочном IAR ругается. При обращении к массиву структур созданному в заголовчном файлеиз из разных модулей IAR выдает ощибку что происходит повторное определение структуры
stmfaq вне форума  
Непрочитано 03.05.2013, 19:02  
_Артём_
Гражданин KAZUS.RU
 
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
_Артём_ на пути к лучшему
По умолчанию Re: Проблема при работе с структурой.

Сообщение от stmfaq Посмотреть сообщение
Да я вот как раз сейчас и не пойму как объявить массив допустим из 3 структур в заголовочном файле.
f.h
Код:
struct MyStruct_t {
    unsigned char Var1;
    unsigned char Var2;
};
extern struct MyStruct_t MyStruct[3];
f.c
Код:
#include "f.h"
struct MyStruct_t MyStruct[3];
Сообщение от stmfaq Посмотреть сообщение
Если в одном из модулей то массив создается нормально, а в заголовочном IAR ругается.
Заголовочные файлы - это интерфейс, в них определений переменных быть не должно.

Сообщение от stmfaq Посмотреть сообщение
При обращении к массиву структур созданному в заголовчном файлеиз из разных модулей IAR выдает ощибку что происходит повторное определение структуры
Естественно - в друх разных файлах сделан инклуд и получилось что переменная с одним и тем же именем определена 2 раза.
_Артём_ вне форума  
Сказали "Спасибо" _Артём_
stmfaq (03.05.2013)
Непрочитано 03.05.2013, 19:03  
electroTrash
Прописка
 
Регистрация: 05.01.2013
Сообщений: 201
Сказал спасибо: 12
Сказали Спасибо 29 раз(а) в 24 сообщении(ях)
electroTrash на пути к лучшему
По умолчанию Re: Проблема при работе с структурой.

Приведите код с ошибкой, при правильном определении проблем не должно быть и с массивом структур.
electroTrash вне форума  
Непрочитано 03.05.2013, 19:24  
stmfaq
Прописка
 
Регистрация: 31.03.2013
Сообщений: 146
Сказал спасибо: 50
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
stmfaq на пути к лучшему
По умолчанию Re: Проблема при работе с структурой.

f.h
Код:
Код:
struct MyStruct_t {
 unsigned char Var1;
 unsigned char Var2;
};
extern struct MyStruct_t MyStruct[3];

f.c
Код:
Код:
#include "f.h"
struct MyStruct_t MyStruct[3];
И что это значит ? В хидере создалось 3 структуры и ещё и в f.c создал 3 структуры?

Последний раз редактировалось stmfaq; 03.05.2013 в 19:32.
stmfaq вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Буферизация изображения при работе с ЖКИ serb-radio Микроконтроллеры, АЦП, память и т.д 2 16.09.2010 11:33
Глюк Протеуса при работе с SPI ATMEGA32 Klim63 Микроконтроллеры, АЦП, память и т.д 0 17.05.2010 03:04
[Решено] проблема при работе с Bluetooth модулем Gn0me Автоматика и аппаратура связи 1 02.10.2009 09:33
глюк Proteus при работе с ATMEL ATTINY45 igoruha727 Микроконтроллеры, АЦП, память и т.д 3 23.05.2009 01:00
загрузка CPU при работе PROTEUS dimonbest Proteus 48 25.05.2007 20:30


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


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