Вопросы по PlatformIO

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

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

bort707

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

Amarok

✩✩✩✩✩✩✩
2 Окт 2019
25
0
Покажите пример правильного разделения, пожалуйста?
 

bort707

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

givvv

✩✩✩✩✩✩✩
5 Мар 2020
25
1
Это не ардуино иде. тут функции должны быть описаны ранее, чем используются в коде
О реально! Спасибо дедок! Зачем только это придумали.

Это не ардуино иде.
А вот ещё вопрос, Почему на скорости загрузки 57600 не компилится, а на 115200 всё ок, где эту скорость смотреть?
1643459247326.png
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
Компиляция никак не связана со скоростью загрузки. Если в коде нет ошибок - он скомпилируется.
А скорость загрузки зависит от того конвертора, что используется для прошивки (встроенный или внешний программатор), от чипа, что на нем установлен.
 

bort707

★★★★★★✩
21 Сен 2020
2,859
850
Зачем только это придумали.
это стандарт языка Си - каждая переменная. функция и метод должны быть обьявлены ДО ПЕРВОГО ИСПОЛЬЗОВАННИЯ
А в ардуино ИДЕ просто сделали поблажки для детишек, не привыкайте к ним.
 
  • Лойс +1
Реакции: Lumenjer

~220v

✩✩✩✩✩✩✩
15 Июн 2023
2
0
Добрый день
Тоже задался єтим вопросом - в Arduino IDE решалось все просто - порубал основной файл на куски и все. Тут же допиши кучу лишнего, - и потом єто лишнее уже будет не понятно владельцам сугубо Arduino.
Неужели нет такого же простого способа как в ардуине?
 

bort707

★★★★★★✩
21 Сен 2020
2,859
850
Неужели нет такого же простого способа как в ардуине?
что-то вы ерунду какую-то пишете.
Практически все базовые конструкции С++ поддерживаются в ардуино.
Я в ардуино так и пишу, как в Си++ - библиотеки оформляю парами файлов .h .cpp - в .h описания функций, в .cpp - реализация
И все это легко встраивается в любой ардуино проект и понятно родной Ардуино ИДЕ
 

vortigont

★★★★★✩✩
24 Апр 2020
852
461
Saint-Petersburg, Russia
@~220v,
ардуино иде при компиляции все .ino файлы склеивает в один и генерирует декларации.
С cpp и h файлами так не прокатит, спп файлы каждый компилируются отдельно. Если хотите "как в ардуино" - делайте кучу .ino файлов, область видимости объектов и переменных у вас будет всё как будто в одном файле.
Если хотите по-нормальному - делайте как вам bort написал, но это сложнее.
 
  • Лойс +1
Реакции: ~220v

~220v

✩✩✩✩✩✩✩
15 Июн 2023
2
0
Если хотите по-нормальному - делайте как вам bort написал, но это сложнее.
Сложно єто не мой метод, мне абы работало. ;)

ардуино иде при компиляции все .ino файлы склеивает в один и генерирует декларации.
С cpp и h файлами так не прокатит, спп файлы каждый компилируются отдельно. Если хотите "как в ардуино" - делайте кучу .ino файлов, область видимости объектов и переменных у вас будет всё как будто в одном файле.
Спасибо друг, єто то что надо! лойс тебе! :cool:
Переименовал все в .ino - мне так и надо - один большой проєкт, уже на полторы тыщи срок, разбить по разным файлам-вкладкам, бо скролить вверх/вниз - єто безумие. Компилироваться должно как одно целое, я не пишу библиотеку или отельную внешнюю функцию. Просто для собственного удобства доступа к различным частям кода.

Осталось отключить ошибки типа "проблем в єтом файле: 9" и подчеркивания ошибок типа: "идентификатор "mqttClient" не определен" но єто фигня уже работать можно и все компилится!
 

vortigont

★★★★★✩✩
24 Апр 2020
852
461
Saint-Petersburg, Russia
Сложно єто не мой метод, мне абы работало.
вот так ардуино иде и калечит мозги людям - вроде что-то работает, но черти как... с ростом проекта вы обязательно столкнетесь с проблемами изоляции переменных и прочего, но распутать этот клубок будет уже сложно