Lagman 1 20 июня, 2017 Опубликовано 20 июня, 2017 · Жалоба В .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 и другие сишные файлы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
novikovfb 17 20 июня, 2017 Опубликовано 20 июня, 2017 · Жалоба В других сишных файлах где используется глобальная структура объявленная в другом файле extern ADC_my ADC_RAW; лучше перенести в хедер, как и все объявления глобальных переменных. Компилироваться и даже работать будет и так и эдак, но риск влепить малозаметную ошибку в хедере меньше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lagman 1 20 июня, 2017 Опубликовано 20 июня, 2017 · Жалоба extern ADC_my ADC_RAW; лучше перенести в хедер, как и все объявления глобальных переменных. Компилироваться и даже работать будет и так и эдак, но риск влепить малозаметную ошибку в хедере меньше. Можно, только я не знаю что будет если вначале идет extern ADC_my ADC_RAW; а потом появляется ADC_my ADC_RAW; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Димон Безпарольный 2 20 июня, 2017 Опубликовано 20 июня, 2017 (изменено) · Жалоба Да, спасибо. Так все заработало. В хидере: 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; Изменено 20 июня, 2017 пользователем Димон Безпарольный Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lagman 1 20 июня, 2017 Опубликовано 20 июня, 2017 · Жалоба Да, спасибо. Так все заработало. Но книжки надо читать, а то так и будете проклинать HAL не понимая что там происходит :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
novikovfb 17 20 июня, 2017 Опубликовано 20 июня, 2017 · Жалоба Можно, только я не знаю что будет если вначале идет extern ADC_my ADC_RAW; а потом появляется ADC_my ADC_RAW; хорошо будет: компилятор увидит, что тип тот же самый и спокойно это обработает. А если объявить extern ADC_my ADC_RAW; и DAC_my ADC_RAW; , то компилятор ткнет носом в ошибку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться