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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Как сослаться на структуру typedef struct?, Из другого файла
Lagman
сообщение Jun 20 2017, 11:16
Сообщение #16


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



В .h (для примера main.h) файле обычно находится объявление типа для структуры
Цитата
typedef struct { //Структура для хранения сырых значений
uint16_t ADC_CH0; //
uint16_t ADC_CH1; //
uint16_t ADC_CH2; //
uint16_t ADC_CH3; //
uint16_t ADC_CH4; //
uint16_t ADC_CH5; //
uint16_t ADC_CH6; //
uint16_t ADC_CH7; //
} ADC_my; //

обрамляя при этом файл main.h
Код
#ifndef MAIN_H
#define MAIN_H
... содержимое заголовочного файла ...
#endif


В си файле где определяется структура
Цитата
#define main.h
......
ADC_my ADC_RAW; //
.....


В других сишных файлах где используется глобальная структура определенная в другом файле
Цитата
#define main.h
......
extern ADC_my ADC_RAW;
.....

Я создаю проекты не включая все си файлы в один си файл, видел как делают некоторые в один main.c включают много #define second.c и другие сишные файлы.
Go to the top of the page
 
+Quote Post
novikovfb
сообщение Jun 20 2017, 11:27
Сообщение #17


Знающий
****

Группа: Участник
Сообщений: 518
Регистрация: 29-09-11
Пользователь №: 67 450



Цитата(Lagman @ Jun 20 2017, 15:16) *
В других сишных файлах где используется глобальная структура объявленная в другом файле

extern ADC_my ADC_RAW; лучше перенести в хедер, как и все объявления глобальных переменных. Компилироваться и даже работать будет и так и эдак, но риск влепить малозаметную ошибку в хедере меньше.
Go to the top of the page
 
+Quote Post
Lagman
сообщение Jun 20 2017, 11:30
Сообщение #18


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



Цитата(novikovfb @ Jun 20 2017, 14:27) *
extern ADC_my ADC_RAW; лучше перенести в хедер, как и все объявления глобальных переменных. Компилироваться и даже работать будет и так и эдак, но риск влепить малозаметную ошибку в хедере меньше.

Можно, только я не знаю что будет если вначале идет extern ADC_my ADC_RAW; а потом появляется ADC_my ADC_RAW;
Go to the top of the page
 
+Quote Post
Димон Безпарольн...
сообщение Jun 20 2017, 11:32
Сообщение #19


Знающий
****

Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247



Да, спасибо. Так все заработало.

В хидере:

Код
typedef struct ADC_my2 {            //Структура для хранения сырых значений
    uint16_t    ADC_CH0;            //
    uint16_t    ADC_CH1;            //
    uint16_t    ADC_CH2;            //
    uint16_t    ADC_CH3;            //
    uint16_t    ADC_CH4;            //    
    uint16_t    ADC_CH5;            //
    uint16_t    ADC_CH6;            //
    uint16_t    ADC_CH7;            //    
}ADC_my;                            //


Там, где структура заполняется:

Цитата
ADC_my ADC_RAW;


В остальных местах где использую структуру подгружаю хидер и пишу:

Цитата
extern ADC_my ADC_RAW;


Сообщение отредактировал Димон Безпарольный - Jun 20 2017, 11:37
Go to the top of the page
 
+Quote Post
Lagman
сообщение Jun 20 2017, 11:36
Сообщение #20


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



Цитата(Димон Безпарольный @ Jun 20 2017, 14:32) *
Да, спасибо. Так все заработало.

Но книжки надо читать, а то так и будете проклинать HAL не понимая что там происходит sm.gif
Go to the top of the page
 
+Quote Post
novikovfb
сообщение Jun 20 2017, 12:00
Сообщение #21


Знающий
****

Группа: Участник
Сообщений: 518
Регистрация: 29-09-11
Пользователь №: 67 450



Цитата(Lagman @ Jun 20 2017, 15:30) *
Можно, только я не знаю что будет если вначале идет extern ADC_my ADC_RAW; а потом появляется ADC_my ADC_RAW;

хорошо будет: компилятор увидит, что тип тот же самый и спокойно это обработает. А если объявить
extern ADC_my ADC_RAW;
и
DAC_my ADC_RAW;
, то компилятор ткнет носом в ошибку.
Go to the top of the page
 
+Quote Post

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

 


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


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