Я долго искал хороший ответ на этот вопрос.
Как правило, любой проект Arduino, кроме самого простого, будет включать:
- Основной файл исходного кода
MyProject.ino
- Библиотеки, специфичные для проекта (
MyProjectLibrary1.h
,MyProjectLibrary1.cpp
...) - Сторонние библиотеки (как правило, с открытым исходным кодом, добавляются вручную в каталог библиотек Arduino)
- Схемы, печатные платы
- Документация
- ...
Все это затрудняет хранение всего кода и документа одного проекта под управлением исходным кодом (например, в Subversion, Git или GitHub).
Управление исходным кодом вашего проекта означает управление версией всех файлов, используемых проектом, включая сторонние библиотеки.
Теперь для одного проекта мне нужно определить структуру каталогов, которая:
- Включает все файлы проекта, как описано выше
- Я могу полностью посвятить себя инструменту управления исходным кодом (включая сторонние зависимости)
- Я могу оформить заказ в любом месте на своем жестком диске и построить проект оттуда (должно ли это быть единое местоположение, как установлено в Arduino IDE)
- Я могу заархивировать в автономный архив, который могу отправить другу, чтобы он собрал его как можно проще (без дополнительной загрузки вручную)
Что мне особенно нравится в проектах Arduino, так это управление зависимостями от внешних библиотек. Для этого у разработчиков Java-проектов есть репозитории Maven , что очень помогает в управлении всеми внешними приложениями. Но у нас нет эквивалентной системы для библиотек Arduino.
Мне было бы интересно узнать, как другие разработчики проектов Arduino справляются с этими аспектами в своих собственных проектах.
Также обратите внимание, что я открыт для изменения моего процесса разработки, включая мою IDE (в настоящее время я использую Eclipse с плагином Arduino большую часть времени, а затем я гарантирую, что мои проекты также могут работать напрямую с Arduino IDE).
источник
Ответы:
Мой способ организации проекта arduino довольно прост, все мои проекты - это git-репозитории, поэтому есть как минимум следующее:
У меня есть предпочтение, используя мой любимый редактор и Makefile, который я создал для работы с большинством вариантов использования (и я даже улучшил тот, которым скоро собираюсь поделиться).
Для библиотек я предпочитаю хранить их как свои собственные репозитории и использовать подмодуль git для включения их в проект. Поскольку многие библиотеки, написанные сообществом, являются общими для git-репозиториев, это хорошее общее решение. Затем в Makefile мне просто нужно добавить путь к библиотекам, который я хочу включить в переменную LOCALLIBS .
Хотя для некоторых проектов имеет смысл инкапсулировать библиотеки в библиотеку аппаратного уровня абстракции, созданную для проекта, тогда я предпочитаю использовать путь, такой как:
project
project.ino
Makefile
project_hal_lib
library1
library2
library3
Тем не менее, в arduino 1.5.x предложен новый способ указания библиотек , который предложит способ создавать и создавать проекты arduino так же, как мы это уже делали с pipy и virtualenv в python, то есть вы определяете набор библиотек, который вам нужен, и они получить загрузки.
источник
flash
использования либо программатора, либоupload
загрузчика. А также обработка слияния загрузчика с прошивкой. Я также написал встроенный установщик предохранителей.Самый простой способ сделать это - скопировать файлы заголовка и кода библиотеки в исходный каталог и включить их.
В своем коде вы можете сделать
include "somelib.h"
Недостатком является то, что библиотеки должны находиться в одной папке, а не в подпапках, поэтому ваш каталог выглядит беспорядочно.
Что касается структуры каталогов всего моего проекта, включая схемы и документацию, мой обычно выглядит так:
источник
Подмодули Git чрезвычайно эффективны для организации нескольких вложенных репозиториев. Работа с несколькими библиотеками из разных источников, и даже обработка частей вашего собственного проекта, которые могут храниться в разных источниках, становится проще с подмодулями git.
Структура каталогов
Способ организации ваших проектов будет:
projectA - Родительский каталог
projectA - каталог исходного кода, содержащий код Arduino
документы - Ваш основной каталог документации
схемы - они могут храниться отдельно в отдельном репозитории Git или в той же репо
libs - будет содержать ваши сторонние библиотеки.
лицензия
ПРОЧТИ МЕНЯ
Makefile - необходимо обрабатывать зависимости между каталогами
Workflow
Вы должны следовать своему обычному циклу внесения изменений, добавления и фиксации в том, что касается основного репозитория. Вещи становятся интересными с суб-репозиториями.
У вас есть возможность добавить репозиторий в родительский каталог вашего основного репозитория. Это означает, что любая часть вашей структуры каталогов, т. Е. Документы, схемы и т. Д., Может поддерживаться как отдельный репозиторий и постоянно обновляться.
Вы можете сделать это с помощью
git submodule add <repo.git>
команды. Чтобы держать это в курсе, вы можете использоватьgit submodule update <path>
.Когда дело доходит до поддержки нескольких сторонних библиотек в вашем репозитории, так что каждая из них может контролироваться версией сама по себе или каждая может быть обновлена в случае необходимости, подмодуль git снова спасет ваш день!
Чтобы добавить стороннее репо в libs , используйте команду
git submodule add <lib1.git> libs/lib1
. Затем, чтобы поддерживать библиотеку в фиксированной точке цикла выпуска, извлеките библиотеку и сделайте коммит. Чтобы поддерживать библиотеку в актуальном состоянии, используйте командуgit submodule update <path>
.Теперь вы можете поддерживать несколько репозиториев в главном репозитории, а также несколько сторонних библиотек на их независимых этапах выпуска.
Против единого подхода к каталогам
Хотя подход с одним каталогом является самым простым, невозможно управлять версиями каталога без особой боли. Следовательно, простой подход не позволяет разместить в хранилище разные репозитории с разными состояниями.
Этот подход позволяет поддерживать несколько репозиториев, но требует наличия Makefile для обработки процесса компиляции и компоновки.
В зависимости от сложности вашего проекта, может быть выбран оптимальный подход.
источник
vendor
,node_modules
и т. Д.). Git ссылается на них и отслеживает их.Вот как я, наконец, решил следовать своим проектам.
Arduino-CMake
Первым важным решением, которое я принял, был выбор инструмента сборки, который мог бы работать для моей среды (Windows), но не ограничивался этим (я хочу, чтобы мои проекты легко использовались другими людьми).
Я тестировал различные инструменты Arduino с открытым исходным кодом:
Я также нашел ArduinoDevel , еще один инструмент сборки Arduino, который я не экспериментировал, который может генерировать файлы Unix Makefiles или ant
build.xml
; это казалось интересным, но немного ограниченным с точки зрения функциональности.Наконец я решил поехать с Arduino-CMake :
CMakeLists.txt
файле конфигурации, чтобы адаптировать свойства, необходимые для моей среды, например, тип Arduino, последовательный порт)в сгенерированном make создается несколько целей для поддержки:
Структура проекта
Поскольку Arduono-CMake не навязывает какую-либо структуру каталогов для вашего проекта, вы можете выбрать ту, которая подходит вам лучше всего.
Вот что я сделал лично (это все еще требует доработки, но сейчас я доволен):
Я решил поместить все свои проекты в общий
arduino-stuff
каталог (который я фиксирую на github в целом, я знаю, что мог бы использовать подмодули git для лучшей организации на github, но у меня еще не было времени проверить это).arduino-stuff
имеет следующее содержание:build
: это каталог, в котором cmake и make сгенерируют все свои вещи (make-файлы, кеш, объектные файлы ...); этот не предан githubcmake
: это просто копия (не модифицированная) директории Arduino-CMake cmake . Этот попадает на GitHub, так что это легче для тех, кто хочет строить мои проектыCMakeLists.txt
: это «глобальная» конфигурация CMake, которая объявляет все значения по умолчанию для моей среды (плата, последовательный порт) и список целевых подкаталогов сборкиTaskManager
: это мой первый проект, основанный на Arduino-CMake, это библиотека с примерами; эта директория также содержит объект, вCMakeLists.txt
котором указаны цели проектаОчки для улучшения
Текущее решение не идеально, хотя. Среди улучшений, которые я вижу (это скорее для проекта Arduino-CMake, чтобы включить эти улучшения, если они сочтут нужным):
источник
Папка MyProject (корень репозитория)
Причина, по которой я предлагаю создать избыточную
MyProject
корневую папку, заключается в том, что вы упомянули об использовании GitHub. Когда вы загружаете (а не клонируете) содержимое хранилища GitHub, к имени хранилища добавляется ветвь или имя тега (например,MyProject-master
). В среде Arduino IDE имя папки эскиза должно совпадать с именем файла эскиза. Если вы откроете INO-файл, который находится в папке, которая не соответствует имени эскиза, среда разработки Arduino предложит вам создать папку с соответствующим именем и переместить эскиз в эту папку. В дополнение к тому, что это не очень хороший начальный опыт для пользователя, большая проблема заключается в том, что Arduino IDE может не копировать все другие связанные файлы во вновь созданную папку, что может привести к тому, что программа больше не будет компилироваться. Поместив скетч в подпапку, вы избегаете изменения GitHub имени папки скетча.Если имя файла GitHub не является для вас проблемой, тогда избыточная корневая папка не нужна.
папка данных
Я рекомендую использовать
data
подпапку для ваших некодовых файлов, потому что в Arduino IDE есть специальная обработка подпапок с таким именем. Они копируются в новое место , когда вы делаете Файл> Сохранить как ... . Подпапок других имен нет.папка src
src
Подпапка имеет особое свойство позволяет рекурсивные компиляции . Это означает, что вы можете оставить библиотеки в этой папке и включить их из своего эскиза следующим образом:1,5 Библиотека Структура папок формата Arduino также поддерживается, вам нужно только настроить
#include
заявления соответственно.Обратите внимание, что только Arduino IDE 1.6.10 (arduino-builder 1.3.19) и новее поддерживают компиляцию рекурсивных эскизов.
К сожалению, некоторые библиотеки используют неправильный
#include
синтаксис для локальных файловых включений (например,#include <ThirdPartyLibrary.h>
вместо#include "ThirdPartyLibrary.h"
). Это все еще работает, когда библиотека установлена в одну изlibraries
папок Arduino, но не работает, когда библиотека связана с эскизом. Поэтому некоторые библиотеки могут потребовать незначительных правок, чтобы использовать этот способ.Я предпочитаю это альтернативе дампу всех файлов библиотеки в корне папки эскиза, потому что это грязно, и каждый файл библиотеки будет отображаться в IDE Arduino в виде вкладок при открытии эскиза (Конечно, любые исходные файлы, которые вы делаете хочу быть редактируемым из Arduino IDE должен быть помещен в корневую папку эскиза).
Возможность использования связанных библиотек на месте также соответствует другой вашей цели:
Снятие требования об установке библиотек вручную значительно упрощает использование проекта.
Это также позволит избежать любых конфликтов с другими версиями библиотечных файлов с тем же именем, которые могут быть установлены ранее.
источник
Вы можете использовать make-файл https://github.com/sudar/Arduino-Makefile для компиляции кодов Arduino. Вам не обязательно нужна IDE.
источник
Возможно, действительно поздно в игре, но это достаточно популярный вопрос, чтобы ответить, используя несколько иные методы, чем те, которые были опубликованы уже.
Если вам нужно поддерживать совместимость с Arduino IDE напрямую, вы можете использовать что-то вроде того, который я описал здесь:
https://gitlab.com/mikealger/ExampleArduinoProjectStructure/tree/master/ExampleSketchBook
Я основал большую часть этого на заметках Arduino - структура проекта и процесс сборки , а также некоторые советы, которые я взял за эти годы.
Я действительно не знаю, почему это так трудно найти на страницах Arduino напрямую, кажется глупым, если исходить из полупрофессионального фона, что процесс сборки такой тупой.
удачи там
источник