|
Как объявить / сослаться на глобальную стуктуру, Или может как - то по-другому реализовать? |
|
|
|
Jun 9 2016, 18:38
|
Знающий
   
Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247

|
Цитата(ViKo @ Jun 9 2016, 21:13)  extern квалификатор примените Вот его то у меня как раз и не получается применить. Кейл С. Вот объявление: Код struct ADC { unsigned int ADC_CH3; unsigned int ADC_CH4; unsigned int ADC_CH5; unsigned int ADC_CH6; unsigned int ADC_CH7; unsigned int ADC_CH8; unsigned int ADC_CH15; unsigned int ADC_CH16; unsigned int ADC_Show; unsigned int ADC_CH_Step; } ADC_Micro; Когда пишу: Код extern ADC_Micro не ругается. А когда обращаюсь: Код ADC_Micro.ADC_CH_Step = 0; ругается: Цитата ../Src/stm32l4xx_it.c(244): error: #20: identifier "ADC_Micro" is undefined
Сообщение отредактировал Димон Безпарольный - Jun 9 2016, 18:40
|
|
|
|
|
Jun 10 2016, 05:18
|
Знающий
   
Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247

|
В первом случае ругается на: Код extern ADC_Micro_TypeDef ADC_Micro; Цитата ../Src/stm32l4xx_it.c(49): error: #20: identifier "ADC_Micro_TypeDef" is undefined В текущем файле, где структура объявлена глобальной не ругается. Во втором случае ругается при использовании: Код ADC_Micro.ADC_CH_Step = 0; в сторонних файлах: Цитата ../Src/stm32l4xx_it.c(248): warning: #111-D: statement is unreachable
Сообщение отредактировал Herz - Jun 13 2016, 14:54
Причина редактирования: Избыточное цитирование
|
|
|
|
|
Jun 11 2016, 20:16
|
Знающий
   
Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247

|
Срач не удался. Обидно, да? Кстати, по поводу Куба ответил в теме. Получилось. Вроде. Ошибок не выдает - попробовать еще не успел. В файле ADC объявил структуру: Код struct ADC { unsigned int ADC_CH3; unsigned int ADC_CH4; unsigned int ADC_CH5; unsigned int ADC_CH6; unsigned int ADC_CH7; unsigned int ADC_CH8; unsigned int ADC_CH15; unsigned int ADC_CH16; unsigned int ADC_Show; unsigned int ADC_CH_Step; }ADC_Micro; В файле прерываний, где заполняются поля: Код extern struct ADC ADC_Micro; Не хватало этого в файле прерываний: Код struct ADC { unsigned int ADC_CH3; unsigned int ADC_CH4; unsigned int ADC_CH5; unsigned int ADC_CH6; unsigned int ADC_CH7; unsigned int ADC_CH8; unsigned int ADC_CH15; unsigned int ADC_CH16; unsigned int ADC_Show; unsigned int ADC_CH_Step; }; Всем спасибо. Доброго здоровья.
|
|
|
|
|
Jun 12 2016, 18:32
|

Просто Che
    
Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881

|
В одном хидер-файле объявляете структуру (например в adc.h): Код typedef struct { unsigned int ADC_CH3; unsigned int ADC_CH4; unsigned int ADC_CH5; unsigned int ADC_CH6; unsigned int ADC_CH7; unsigned int ADC_CH8; unsigned int ADC_CH15; unsigned int ADC_CH16; unsigned int ADC_Show; unsigned int ADC_CH_Step; } adc_t; Теперь это новый тип данных - adc_t - и его можно применять под этим именем везде, где этот тип объявлен. А объявить его в других файлах, где он будет применятся, можно при помощи подключения хидера adc.h: #include "adc.h" Вышенаписанное объявление типа не выделяет память под структуру. Так что выделять память нужно отдельно в файле на Си: adc_t ADC_Micro; Чтобы эта структура была видна в других файлах, в файле adc.h, ниже typedef нужно добавить: extern adc_t ADC_Micro; Все. В файлы, где вам нужна работа с этой структурой просто включаете #include "adc.h" и работаете. Именно это вам и пытался сказать ViKo
|
|
|
|
|
Jun 12 2016, 23:52
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Baser @ Jun 12 2016, 00:34)  Вам же ViKo сразу написал, как это делать правильно, через typedef. То есть typedef struct {} type; - правильно, а struct ID {}; - нет? Цитата(Baser @ Jun 12 2016, 00:34)  Так как написали вы, работать тоже будет, но при этом структуру придется объявлять в полном виде (дублировать) в каждом файле, где она применяется. Это "не есть хорошо". Когда нужно будет изменить структуру, вам придется ее править в н'адцати местах. Нет, не придется. Цитата(Димон Безпарольный @ Jun 11 2016, 23:16)  В файле ADC объявил структуру: Код struct ADC { unsigned int ADC_CH3; unsigned int ADC_CH4; unsigned int ADC_CH5; unsigned int ADC_CH6; unsigned int ADC_CH7; unsigned int ADC_CH8; unsigned int ADC_CH15; unsigned int ADC_CH16; unsigned int ADC_Show; unsigned int ADC_CH_Step; }ADC_Micro; Это лишнее. Просто Код struct ADC ADC_Micro; А описание struct ADC поместите в заголовок.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|