Чому файл `.ino` повинен знаходитися в однойменній папці?


12

Я намагаюся організувати дуже складний проект, і я хочу помістити весь фактичний код у папку з назвою src(джерело), ​​але я хочу зберегти основний .inoфайл як main.ino(він також буде в src). Потім, коли я намагаюся відкрити код, IDE каже, що main.inoвін повинен бути в папці з назвою main.

Чому це?

Я повністю розумію повідомлення про помилку, але чому так іменування файлів в Arduino повинно бути таким. Чи є спосіб це змінити?

Відповіді:


6

AFAIK, це химерність, вбудована в IDE Arduino. Найкращий спосіб, який я можу придумати, - це структура файлів на кшталт:

ArduinoWorkspace --- /myproj/ ----+ /src/ --------+ myproj.cpp
                                  + myproj.ino    + sensor.h
                                                  + sensor.cpp
                                                  + (more files)

, де myproj.cpp просто основний.cpp #include. Це повинно залишати ваші файли проекту "чистими" таким чином, що вони також повинні працювати в більш типовому середовищі.

Оновлення:

Я запозичив назву "main" з вашого запитання, але, замислившись, "main" - це зарезервоване ім'я, зокрема, кожна програма C або C ++ має main.c або main.cpp як код верхнього рівня, що надається системою, якщо ви не надаєте його. Тож я уникав використовувати це як ім'я папки та проекту (але не соромтеся спробувати), і я оновив діаграму. Вам потрібна папка проекту та однойменний файл .ino в ньому. Файл .ino міг

#include <src/anything-else-you-like>

, наприклад, ваш код верхнього рівня, таким чином, витягуючи все інше. Вам може знадобитися .ino для #includeкожного з файлів у srcпапці, якщо компілятор не з'ясує самостійно, саме там знаходяться інші ваші файли.

BTW, якщо ви використовуєте ім’я main.cpp для свого верхнього файлу, вам доведеться викликати функції setup () і loop () (і функцію послідовних подій, якщо ви використовуєте це). Напевно, найкраще залишити ім’я 'main' у спокої, нехай система надає однакове основне для кожної програми Arduino, отримане за замовчуванням, і написати свій проектний проект типовим способом Arduino - починаючи з setup () та loop ().


myproj.cpp, ти маєш на увазі myproj.ino? Бо я не бачу, де myproj.cppце!
Дат Ха

Гаразд, маленька проблема, якщо я це зроблю, деякі основні функції Arduino (наприклад, map () та analogRead ()), які містяться у sensor.cpp, не розпізнають компілятор.
Дат Ха

Крім того, якщо ви працюєте на вікні Windows, використовуйте команду junction і "прив'язуйте" правильний каталог імен до каталогу з кращим іменем. Або, якщо ви працюєте на вікні Linux, використовуйте символьну команду посилання, щоб зробити те саме.
st2000

(Дивіться моє оновлення - ваш .ino файл, можливо, повинен містити кожен з інших файлів).
JRobert

3

Якщо у вас є проект, який складається з декількох .INOфайлів, як IDE повинен знати, який є "головним"? Під час компіляції IDE об'єднує всі .INOфайли разом в один монолітний файл. Робиться це, починаючи з "головного", а потім додає до кінця кожну іншу в алфавітному порядку.

Це робиться таким чином, щоб ваші включені та глобальні змінні, які ви повинні помістити у свій "головний" .INOфайл, були на початку готової програми.

Для цього IDE повинен знати, який з файлів є "головним". І те, як це працює, - це знайти той, який названий таким же, як і папка, в якій ескіз.

У UECIDE я роблю це на крок далі і перетворюю всю папку на складений документ, тому вам більше не доведеться вводити папку та відкривати .INOфайл, щоб відкрити ескіз - сама фактична папка - це весь проект ескізу. Знову ж таки, ця папка ідентифікується як така, що має в ній .INOфайл, який називається таким же, як і папка.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.