Перейти к содержанию
    

Как сослаться на структуру typedef struct?

В .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 и другие сишные файлы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В других сишных файлах где используется глобальная структура объявленная в другом файле

extern ADC_my ADC_RAW; лучше перенести в хедер, как и все объявления глобальных переменных. Компилироваться и даже работать будет и так и эдак, но риск влепить малозаметную ошибку в хедере меньше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

extern ADC_my ADC_RAW; лучше перенести в хедер, как и все объявления глобальных переменных. Компилироваться и даже работать будет и так и эдак, но риск влепить малозаметную ошибку в хедере меньше.

Можно, только я не знаю что будет если вначале идет extern ADC_my ADC_RAW; а потом появляется ADC_my ADC_RAW;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

В хидере:

 

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;
Изменено пользователем Димон Безпарольный

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Но книжки надо читать, а то так и будете проклинать HAL не понимая что там происходит :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно, только я не знаю что будет если вначале идет extern ADC_my ADC_RAW; а потом появляется ADC_my ADC_RAW;

хорошо будет: компилятор увидит, что тип тот же самый и спокойно это обработает. А если объявить

extern ADC_my ADC_RAW;

и

DAC_my ADC_RAW;

, то компилятор ткнет носом в ошибку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...