Visual Studio Code + PlatformIO. Как правильно разнести код по разным файлам?

Amarok

✩✩✩✩✩✩✩
2 Окт 2019
14
0
Здравствуйте!
Пишу код для ESP8266 и избрал для этого связку Visual Studio Code + PlatformIO. Подскажите, пожалуйста, как правильно разделить проект по разным файлам?
Планируемая структура:
main.cpp - основной код проекта
html - код html-страниц
functions - все мои самописные функции
config - настройки (объявление всех переменных и установка значений по умолчанию)
Напрашивается #include <имя_файла>, но какая-то чепухня выходит: то библиотеки надо в каждом файле подключать, то переменные объявленные в одном файле не изменяются.
 

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
1,483
523
55
Марий-Эл
Напрашивается #include <имя_файла>, но какая-то чепухня выходит: то библиотеки надо в каждом файле подключать
Создать файл в котором подключаются все необходимые библиотеки. И в своих файлах подключать этот файл.
Тогда при добавлении новой библиотеки достаточно прописать её только там и не нужно будет лазить по всем файлам прописывая её.
то переменные объявленные в одном файле не изменяются.
Если нужны переменные, которые видны из каждого файла, нужно объявлять как глобальные, а в остальных файлах объявлять как external, что бы линковщик знал где они находятся.
 

bort707

★★★★★✩✩
21 Сен 2020
1,096
314
Планируемая структура:
main.cpp - основной код проекта
html - код html-страниц
functions - все мои самописные функции
config - настройки (объявление всех переменных и установка значений по умолчанию)
плохой подход. У вас так будет слишком много общих элементов и перкрестных связей между файлами. Это не упрощает, а только запутывает программу.
Правильнее разделять программу по смыслу действий на изолированные части и эти части уже распределять по файлам. Например, все функции работы с экраном собрать в один файл, а работу с кнопками в другой. И подключить библиотеку экрана только в первом файле, а не включать ее во все.
В идеале части должны быть полностью независимы, как кубики конструктора, так чтобы их можно было взять и перенести в другой проект, почти ничего не меняя. Хорошим примером по выделению части программы в отдельный модуль является схема организации библиотек ардуино. Вот и вы старайтесь разбивать пооект так, чтобы у него был главный файл c функцией main, а все прочие части были оформлены как библиотеки. Это значит, что между файлами не должно быть общих переменных. Избегайте глобалов и квалификатора extern. При необходимости передачи данных используйте передачу по ссылке или по указателю через параметры функций.
 
Изменено:

bort707

★★★★★✩✩
21 Сен 2020
1,096
314
любой пример к любой библиотеке ардуино. У библиотек никогда не бывает общих с основным скетчем переменных