Вопросы по PlatformIO

Shalom

✩✩✩✩✩✩✩
23 Мар 2019
21
3
Омск
Столкнулся с ошибкой подключения библиотек в PlatformIO в VSCode. При написании скетча подчёркивает красной волной строчку #include <Arduino.h>. В некоторых проектах всё нормально, а в некоторых выдает ошибку.
Также иногда не подключает библиотеки zip. Подключаю как в статье Гайвера.
Если кто-то сталкивался с этим, подскажите решение проблемы.
 

kalobyte

★★★✩✩✩✩
1 Янв 2020
726
146
пока разбираюсь с этой платформой
ставил чисто редактор кода + ардуиновское расширение для него от мелкасофта
ядро новое видит, но подсветка не работает + конфликт модуля автокомплита вылазит, если установлено расширение ардуины и платформа
 

Syorito Hatsuki`

✩✩✩✩✩✩✩
23 Сен 2019
4
0
Finland, Oulu
fstudio.space
Библиотеки просто распаковывай в /include и /lib в своем проекте PlatformIO, до первой компиляции они будут красными, потом станут нормальными
 

Mix_man

✩✩✩✩✩✩✩
21 Янв 2020
91
9
Так может он прикручивается методом прописывания оного в platformio.ini ? Ну и закинуть в нужную папку.. Надо только узнать как её обозвать
 

kalobyte

★★★✩✩✩✩
1 Янв 2020
726
146
там все намного сложнее
ини файл это только настройки конкретного проекта

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

_BadWolf_

★✩✩✩✩✩✩
2 Янв 2020
49
16
Привет всем,
Мне нужно модифицировать некоторый код в Arduino Core для одного моего проекта, а также для других библиотек (только для одного проекта, другие проекты должены использовать не измененные библиотеки).
Также хорошо было бы скопировать все библиотеки в папку моего проекта, без каких-либо внешних зависимостей.
Как это сделать?
 

seregapopov

✩✩✩✩✩✩✩
3 Мар 2020
8
0
Помогите с platformio. Проблема с прерываниями. attachInerrupt (номер пина, ФУНКЦИЯ, режим) Пишу функцию, предположим myInterrupt, после сектора loop создаю функцию void myInterrupt() {} и при компиляции выходит ошибка типа имя функции не объявлена. Копирую весь скетч, ввожу в arduioi.ide всё компилируется без проблем. В чём прикол?
 
Изменено:

seregapopov

✩✩✩✩✩✩✩
3 Мар 2020
8
0
@kalobyte,
да там и выкладывать нечего. вот.

#include <Arduino.h>

void setup () {
pinMode (2, INPUT);
attachInterrupt (0, myInterrupt, RISING);
}

void loop () {
}

void myInterrupt() {
}

Всё это Visual Code, PlatformIo

И вот здесь пишет ошибку. Причем саму функцию он видит, а на ссылку на функцию ругается. В Arduino IDE всё норм работает.
 

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

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

Arhat109

★★★★✩✩✩
9 Июн 2019
473
203
Ардуино ИДЕ имеет т.н. "билдер", который пробегает по вашему тексту и втыкивает прототипы функций в самое начало скетча. Поэтому и не ругается. Но .. иногда такое поведение приводило раньше к серъезным проблемам, когда правильно прототип ссылался на класс из того же скетча и .. получалось, что прототип вставлялся раньше описания класса.
Вот такое преодолеть было достаточно проблематично ..
Не знаю как сейчас, давно не проверял эту фичу ИДЕ билдера.

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

В вашем примере, достаточно было перенести определение функции myInterrupt() выше "над" setup() - и дело "в шляпе". :)
 
  • Лойс +1
Реакции: kostyamat

Sergey75

✩✩✩✩✩✩✩
26 Мар 2020
31
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
2,265
944
58
Марий-Эл
Файлам, которые были во вкладках, расширение меняешь на cpp. Создаёшь файлы с расширением h и таким же именем, как файл во вкладках. Все внешние и внутренние переменные описываешь в них.
Вот здесь я на PlatforiIO писал, посмотри: https://yadi.sk/d/ya0kp_C8Ss9mPQ
 

Sergey75

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

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

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

Вложения

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

kalobyte

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

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

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

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

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

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

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

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

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

Sergey75

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

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

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

kalobyte

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

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