platformio + Visual Studio Code импорт проекта с вкладками

Sergey75

✩✩✩✩✩✩✩
26 Мар 2020
33
2
Здравствуйте !

Посмотрел материал https://alexgyver.ru/platformio-замена-arduino-ide/
Работать на новой платформе оказалось ГОРАЗДО интереснее.
Но возникла проблема с проектами написанными в Arduino IDE которые имеют имеют несколько вкладок, как с ними работать ?

Основной файл переименовываю в main.cpp, вкладки в файлы *.h,
вкладки подключаю в main.cpp
C++:
#include "ADC.h"
#include "aFeed.h"
#include "Beeper.h"
Переменные которые на вкладках не определены, пока это основная проблема, как это решить ?
Заранее спасибо!
 
Последнее редактирование:

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

★★★★✩✩✩
23 Сен 2019
869
262
54
Марий-Эл
Файлам, которые были во вкладках, расширение меняешь на cpp. Создаёшь файлы с расширением h и таким же именем, как файл во вкладках. Все внешние и внутренние переменные описываешь в них.
Вот здесь я на PlatforiIO писал, посмотри: https://yadi.sk/d/ya0kp_C8Ss9mPQ
 

Sergey75

✩✩✩✩✩✩✩
26 Мар 2020
33
2
Файлам, которые были во вкладках, расширение меняешь на cpp. Создаёшь файлы с расширением h и таким же именем, как файл во вкладках. Все внешние и внутренние переменные описываешь в них.
Посмотрел Ваш пример, примерно суть понял (ещё надо поразбираться), но в голове крутится мысль о переменной которая используется в разных вкладках, где её описывать ?
 

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

★★★★✩✩✩
23 Сен 2019
869
262
54
Марий-Эл
Здесь Темплейт для C. Там видно где и как описываются внешние переменные и структура написания подключаемых файлов.
Для C++ он тоже справедлив за некоторыми исключениями.
 

Вложения

  • Лойс +1
Реакции: MrBob

kalobyte

★★★✩✩✩✩
1 Янв 2020
741
158
но в голове крутится мысль о переменной которая используется в разных вкладках, где её описывать ?
все вкладки это файлы цпп и х в одном флаконе как бы, поэтому ты не видиш разницу (для простоты это все и скрыли)

изначально же код делился на файлы
файлы .х это хедеры и там описываются дефайны, прототипы функций (сейчас вроде оно уже и не нужно и довольно идиотское решение вообще было) и сами глобальные переменные

в файлах цпп собственно пишется сам код функций, переменные если там декларируются, то это будут локальные переменные, которые действуют внутри функций во время их выполнения и потом пропадают

в файле цпп в самом начале подключаются файлы хедеров, причем порядок имеет значение
#include <stdint.h>
#include "" // Включаем файл заголовка для нашего модуля

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

при сборке проекта препроцессор берет файлы хедеров и сует их содержимое в цпп файл сверху, как будто ты и не разносил их
потом берет цпп файлы и компилирует их в промежуточный код для кеширования и если в таких файлах нет изменений, то они не компилируются заново, что экономит время на сборку, а сборка больших проектов занимает много времени

потом линкер берет все скомпилированные цпп файлы и собирает их в один файл и потом превращает в бинарник для конкретного контроллера

по такому принципу работают все компиляторы, просто в ардуиновской иде это все скрыто и упрощено

вот кстати новый урок и там немного рассказано про все это
 
  • Лойс +1
Реакции: kostyamat

Sergey75

✩✩✩✩✩✩✩
26 Мар 2020
33
2
Короче говоря переход на "platformio + Visual Studio Code" добавляет кучу головной боли при работе с много-файловым проектом.
Открыть в этой связке большой проект написанный в Arduino IDE очень трудно, надо много переписывать.
Может что то попроще посоветуете для программирования, Arduino IDE + ? (какой редактор)
 

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

★★★★✩✩✩
23 Сен 2019
869
262
54
Марий-Эл
Лучше один раз научиться это делать, чем всю жизнь мучаться с этим говном под названием Arduino IDE.
Если уж решили писать на C++, то изучайте его. Никакие платформы не помогут делать это легче.
Здесь важна не платформа, а понимание самого языка.
Arduino IDE всё это делает за вас. Но это роняет быстродействие и генерит кучу излишнего кода.
 

kalobyte

★★★✩✩✩✩
1 Янв 2020
741
158
Может что то попроще посоветуете для программирования, Arduino IDE + ? (какой редактор)
microsoft visual studio + https://www.visualmicro.com/
правда у меня он что-то перестал работать
---
упд
заработал таки
188 байт на мигание светодиодом с использованием ядра гивера :cool:
я считаю это очень крутая оптимизация

1585477864458.png
 
Последнее редактирование:
  • Лойс +1
Реакции: Старик Похабыч

Kir

✩✩✩✩✩✩✩
28 Мар 2020
27
4
Arduino IDE всё это делает за вас. Но это роняет быстродействие и генерит кучу излишнего кода.
От IDE это никак не зависит.

потом берет цпп файлы и компилирует их в промежуточный код для кеширования
Довольно интересная метафора, но ничего общего с кешированием не имеет.
 

Kir

✩✩✩✩✩✩✩
28 Мар 2020
27
4
Ничего, я же на писал.

промежуточный код, о котором говорилось - это так называемый объектный код - машинный код без определенных адресов в памяти.
Каждый файл исходника компилируется же не зависимо от остальных, и ничего не знает о существовании других. Компоновщик как раз и распределяет содержимое объектных файлов в адресном пространстве, и тем самым получается исполняемый файл.
Другими словами, получение объектного файла - это один из неотъемлемых этапов получения исполняемого файла.
 

kalobyte

★★★✩✩✩✩
1 Янв 2020
741
158
Другими словами, получение объектного файла - это один из неотъемлемых этапов получения исполняемого файла.
а я разве где-то говорил, что это не так?
я сказал, что если код файла не менялся, то объектный файл заново не компилируется и остается в кеше, что экономит время при сборке проекта
поэтому имеет смысл разбивать большой проект на отдельные файлы
 

Kir

✩✩✩✩✩✩✩
28 Мар 2020
27
4
Не ругайтесь. Всё в мире относительно.
Да никто не ругается))).

Просто мне кажется человек не совсем понимает для чего проект разбивается на несколько файлов, и подобное объяснение может повлечь за собой не корректное понимание процесса.
 

Sergey75

✩✩✩✩✩✩✩
26 Мар 2020
33
2
А вот так правильно ?
Пример.jpg
Содержимое:
Global.h
C++:
int Per = 1;
main.cpp
C++:
#include <Arduino.h>
#include <Global.h>
#include <PrintSer.h>

void setup()
{
  // put your setup code here, to run once:
  Serial.begin(9600);
}

void loop()
{
  // put your main code here, to run repeatedly:
  Print();
  Per = Per + 1;
  delay(1000);
}
PrintSer.h
C++:
void Print()
{
    Serial.println(Per);
}
 

kalobyte

★★★✩✩✩✩
1 Янв 2020
741
158
@Sergey75,
не знаю, но не вижу гимора с этим
вкладки это просто открытые файлы, а в проекте бывает куча всяких файлов

можеш скинуть проект, я попробую открыть и собрать
 

Sergey75

✩✩✩✩✩✩✩
26 Мар 2020
33
2
Действительно всё работает, спасибо!
Будем изучать новое.
 

Sergey75

✩✩✩✩✩✩✩
26 Мар 2020
33
2
И снова здрасьте !
Оказывается есть вот такая штука https://github.com/arduino/arduino-pro-ide/releases
Но вот не задача, как на русский перевести, файл "RU.PAK" есть но куда его засунуть ?
Кстати много файловый проект открывает и компилирует.