Как сегментировать программу Arduino, если количество строк настолько велико, что обслуживание кода затруднено?

Я ищу для Arduino/C++ эквивалент инструкции "copy" языка COBOL.

Я работаю над программой, размер которой в исходном файле TopLevel.cpp приближается к 600 строкам кода. С этим трудно справиться, потому что мне кажется, что я трачу все свое время на прокрутку исходного файла вверх и вниз. Рассматриваемый код не поддается легкому преобразованию в класс, потому что это разделы loop/main. Я пытался использовать xxx.h (для определений хранилища) и yyy.cpp (для разделов кода). Эти подходы выдают сообщения об ошибках, которые, я думаю, связаны с разницей во времени препроцессора Arduino и кода компилятора, разрешающего операторы #include.

Спасибо за помощь. --CVTBrakeman

пс Свою первую программу я написал в 1967 году; языком был GOTRAN на IBM 1620. Почти 50 лет я зарабатывал на жизнь проектированием/написанием кода COBOL и SAS на мейнфреймах IBM. Да, 2000 годов были настоящими, и я пережил их.

, 👍1

Обсуждение

у вас может быть много файлов .ino в проекте Arduino. Используйте «Добавить файл» в меню «Скетч» в среде IDE. какие сообщения об ошибках для h/cpp?, @Juraj

Вы можете использовать директиву #include. Вы можете создавать свои подклассы C++ в отдельных файлах .CPP и .H/.HPP. Arduino IDE — это всего лишь оболочка вокруг компилятора C++ и набор скриптов для загрузки .HEX в чип Atmel с использованием ICSP., @Dougie

https://arduinoprosto.ru/q/60656/split-up-arduino-code-into-multiple-files-using-arduino-ide/60659#60659, @Juraj

Спасибо за помощь; Я думаю, что решение состоит в том, чтобы реструктурировать программу и преобразовать мой «включаемый» код в отдельные классы. Наверное, так надо было сделать в самом начале. Мне кажется, что включаемые файлы компилируются отдельно. Переменные, определенные во включенном коде, больше не видны блокам настройки/основного кода. Спасибо за вашу помощь., @Andy Arnold


2 ответа


1

Это больше похоже на общий вопрос по программированию, чем на Arduino. вопрос, но все же...

Вам не нужно писать классы для сортировки кода по файлам. Ты только нужно думать с точки зрения независимых частей функциональности. Каждый из эти части будут реализованы в файле .cpp с интерфейсом объявлено в файле .h.

В качестве примера предположим, что ваш Arduino управляет гиперприводом. Управление генератором дилитиевой плазмы — одна из таких функций. которые могут быть разделены в своих собственных файлах. Файлы .h объявляют все который необходим для использования этой функциональности:

plasma_generator.h:

// Читаем состояние плазмы.
float plasma_density();
float plasma_temperature();

// Управление плазмой.
void set_plasma_target_temperature(float target_temperature);
void ignite_plasma();
void turn_off_plasma();
void add_dilithium(float amount);

Затем файл .cpp содержит реализацию:

plasma_generator.cpp:

#include "plasma_generator.h"

// «Статическая» функция — это функция, приватная для этого модуля.
static float get_gauge_reading(int gauge_number)
{
    ...
}

// Реализация публичной функции, описанной в файле .h.
float plasma_density()
{
    float raw_reading = get_gauge_reading(42);
    ...
}

...

В вашей основной программе (или даже в других модулях, если необходимо) вы #include файл .h и использовать определенные в нем функции.

,

1

Есть два способа сделать это:

  1. Несколько файлов INO

IDE Arduino объединяет несколько файлов INO в один файл CPP перед компиляцией. Вы можете по желанию разделить свою программу на несколько файлов INO. Это упрощает управление, так как вы можете по желанию разбивать свою программу на логические части, но вам не нужно много думать, кроме того, «в какой файл я должен вставить эту функцию?»

  1. Создание библиотек

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

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

В качестве альтернативы вы можете рассмотреть другую IDE, например UECIDE, которая предоставляет такие возможности, как функции закладок& для создания упрощает навигацию по коду.

,