Сложные программы Arduino
Я работаю над проектом светодиодной матрицы RGB (10 x 10 неопикселей) и использую классы для управления различными аппаратными компонентами. Как лучше всего справиться с несколькими файлами в проекте? Например, у меня есть класс, который содержит различные функции отображения, такие как написание текста и рисование кругов, но каждый раз, когда я что-то меняю, компиляция занимает много времени (более 30 секунд). есть ли способ иметь несколько файлов без использования классов?
Будем очень благодарны за любую помощь.
Привет
@Matt, 👍0
Обсуждение2 ответа
Я заметил, что очень сложно использовать классы в IDE по умолчанию. Каждый файл будет находиться на отдельной вкладке, но обычно каждый класс имеет файл заголовка (.h) и файл реализации (.c), поэтому на каждый класс приходится две дополнительные вкладки.
Если у вас всего 3–4 класса, вы можете использовать IDE по умолчанию.
Однако, если вы хотите использовать больше, вам придется использовать, например, Eclipse или Visual Studio, любую IDE, которая вам больше нравится.
Найдите Eclipse/Arduino, думаю, вариантов несколько.
Сам я использую visualmicro ... это бесплатно, за исключением того, что вы не можете использовать опция отладчика.
Я использовал в своем скетче несколько классов и не думаю, что время компиляции составляло 30 секунд; это также может зависеть от количества включаемых файлов.
Кроме того, сложная программа — это не обязательно программа с множеством классов. Я бы сказал, что если в один класс (или в один скетч) поместить слишком много функционала, то получится сложная программа.
В настоящее время я использую STINO, но я посмотрю на другие IDE. Ваше здоровье, @Matt
Да, вы можете иметь несколько файлов без классов.
Функции не обязательно должны находиться в классах, пример см. в разделе «Цикл и настройка». Все, что вам нужно сделать, это объявить функцию в заголовочном файле, а затем реализовать ее в теле.
Итак:
// File Bob.h
#ifndef __BOB_H__
#define __BOB_H__
int SomeFunction(const char val);
#endif // __BOB_H__
// File Bob.cpp
#include Bob.h
int SomeFunction(const char val)
{
return (int)val;
}
// File SketchName.ino
#include "Bob.h"
setup()
{
......... Stuff
Теперь теоретически компилятор будет пересобирать Bob.cpp только тогда, когда вы меняете в нем код. На практике вы измените в нем код, а компилятор не будет его пересобирать, и вы будете рвать на себе волосы, пока не вспомните, что если все остальное не помогло, пересоберите все!
В SketchName.ino
некоторые люди скажут, что вы всегда должны ставить включения первыми, некоторые скажут, что последними, а некоторые скажут, что это не имеет значения. По моему опыту, проще исправить повторяющиеся определения, изменив код, поэтому я всегда ставлю «мои» включения последними, потому что таким образом компилятор сообщит об ошибках в моем коде.
Кстати, 30 секунд — это не так уж много времени для сборки. Я работал над проектами, которые занимали более 12 часов, и отсутствие точки с запятой в этих проектах не делает вас популярным :)
Ааа, это звучит правильно. Я использую STINO с включенной опцией полной компиляции, потому что я довольно часто меняю файлы cpp. Я воспользуюсь вашим предложением, когда вернусь домой сегодня вечером, ура., @Matt
Звучит узнаваемо, время сборки несколько часов. Однако я надеюсь, что вы сможете проверить точки с запятой, не выполняя при этом полную сборку. В моей работе полные сборки планируются на ночь, поэтому время ожидания может составлять несколько часов + 8+ часов в зависимости от времени запуска полной сборки., @Michel Keijzers
Какова ваша методология при работе с огромными программами, есть ли у вас какое-то программное обеспечение для отладки или вы полагаетесь на то, что компилятор выделяет ошибки?, @Matt
Это зависит от того, какая платформа. Для Arduino я извлекаю весь код, не зависящий от платформы, и компилирую его в Visual Studio (Community), а затем пишу набор тестов, чтобы убедиться, что каждая функция и класс выполняют то, что я ожидаю. Я также написал несколько макетов модулей, которые предлагают некоторые функции Arduino (pinMode, digitalWrite и т. д.), чтобы я мог тестировать код нижнего уровня на ПК. Затем переключитесь на Arduino как можно позже. Единственный способ (AFAIK) отладки на Arduino — это Serial.Print или аналогичный., @Code Gorilla
- Arduino IDE не видит библиотеки Arduino
- Как сделать выводы Tx и Rx на ESP-8266-01 в выводах GPIO?
- Сброс Arduino Uno в коде
- Предупреждение при проверке скетча с кодом VS
- Arduino Uno 3: Застрял на "загрузке..." скетчей
- Доступ запрещен при загрузке
- Какие есть другие IDE для Arduino?
- Как вызвать функции C из скетча ардуино?
По моему опыту, простое наличие нескольких файлов не должно сильно увеличивать время компиляции. Какой Ардуино вы используете? я бы попробовал устранить неполадки (т.е. что происходит, когда есть 1 файл со всеми вашими функциями? что происходит, когда есть несколько файлов с меньшей функциональностью?), @TanyaV
Я использую Sublime с STINO вместо IDE для программирования nano v3., @Matt
Вы можете иметь несколько файлов без реализации каких-либо классов. просто обязательно включите в них заголовок arduino.h, если вы хотите использовать какой-либо API arduino (например, «digitalWrite», pinMode и т. д.)., @TanyaV
Посмотрите сообщения компиляции. Он все перекомпилирует, когда вы меняете один файл? Если да, то вам, вероятно, следует [сообщить о проблеме](https://github.com/Robot-Will/Stino/issues/new)., @Edgar Bonet
Какая версия IDE и какой хост (Windows, Linux и т. д.)? Если вы работаете в Windows, вам необходимо отключить проверку сгенерированных файлов на вирусы., @Mikael Patel
Я использую Windows 10 с последней версией Arduino. Я добавил временные папки в список исключений для Avast, но они все равно очень медленные. Я думаю, это может быть связано с процессом сборки STINO., @Matt
Мне нравится разделять логические части сложной программы на библиотеки. IDE, которую я использую (UECIDE), затем кэширует эти библиотеки и компилируется очень быстро., @Majenko