Библиотеки не включены правильно
Я обнаружил следующее неожиданное поведение, и мне интересно узнать его причину.
header.h:
#include <Time.h>
[...]
main.ino:
#include "header.h"
#include <Time.h>
[...]
Мой код работает правильно с этой настройкой. Однако, если я закомментирую библиотеку Time.h в своем main.ino, мой код перестанет работать правильно:
#include "header.h"
//#include <Time.h>
[...]
Я все еще могу получить доступ к функциям Time.h, но они возвращают ошибочное время.
Почему я должен включать библиотеку в свой *.ino, хотя я уже включил ее в свой заголовочный файл? Есть ли наилучшая практика, где включать библиотеки? Должен ли я просто всегда включать все библиотеки в мои файлы *.h и *.ino?
@wheeler, 👍0
Обсуждение1 ответ
Лучший ответ:
Во-первых, вы должны включить TimeLib.h
, а не Time.h
— имя заголовка библиотеки было изменено, чтобы избежать конфликтов в системах, нечувствительных к регистру (Windows), и внутренний заголовок time.h
во многих компиляторах.
Во-вторых, вы всегда должны включать все свои библиотеки напрямую в файл INO. Это связано с тем, что среда IDE анализирует файл INO перед компиляцией в поисках включенных библиотек. Затем он добавляет эти найденные библиотеки в список библиотек, которые необходимо скомпилировать. Без этого вы не сможете правильно скомпилировать исходный код для своих библиотек.
Да! Это (во-вторых) также часто относится к #include <Wire.h>
, если другая библиотека использует I2C., @DataFiddler
@DataFiddler И SPI и т. д., @Majenko
Я не включаю библиотеки. сборщик Arduino может справиться с этим. Я использую Ethernet.h без SPI.h в скетче, UnoWiFiDevEdSerial1.h без Wire.h в скетче, ..., @Juraj
@Juraj Пока вы используете версию IDE, которая использует Arduino Builder, или, конечно, UECIDE, которая делает это изначально. Для всех остальных в мире (например, для тех дураков, которые apt-get install arduino
, или идиотов, которые используют плагины для eclipse или VS;)) это не сработает. Так что лучше включить их в любом случае, так как нет минусов, только плюсы. Конечно, если никто другой не использует ваш код, это нормально..., @Majenko
- Wire.h не найден!
- Может ли плагин Arduino Eclipse использовать библиотеки, установленные Arduino IDE?
- ATtiny85 и DHT11 - Датчик всегда возвращает 0
- Arduino IDE: Плата nodemcuv2 (платформа esp8266, пакет esp8266) неизвестна
- Альтернативы дисплею Nextion
- TinyGPS++ Вопрос о gps.encode(ss.read())
- Как сгенерировать файлы .a и .so для добавления в проект arduino
- Только что установил Arduino 2.0.3 - каков путь Windows к связанным библиотекам?
вы хотите time.h или TimeLib.h? Time.h неоднозначно, @Juraj