Как настроить константы UIPEthernet?

Я использую UIPEthernet, чтобы заставить Arduino Nano управлять экраном Ethernet ENC28J60 для приложения на основе UDP. Я настраиваю ряд его параметров #define, чтобы изменить настройки по умолчанию для экономии места, но я не уверен, что делаю это правильно. Он явно предназначен для облегчения настройки каждого скетча, но у меня все работает не совсем так, и я не могу сказать, делаю ли я это неправильно или настройка делает не совсем то, что я ожидаю.

В частности, комментарии в верхней части utilities/uip-conf.h гласят:

uIP имеет ряд параметров конфигурации, которые могут быть переопределены для каждого проекта. Они хранятся в специфичном для проекта файле uip-conf.h, и все имена конфигураций имеют префикс UIP_CONF.

Так что это звучит здорово - я скопировал uip-conf.h в свой скетч (в верхний каталог рядом с другими источниками), соответствующим образом настроил его и ... ничего не изменилось.

Теперь я #включаю <UIPEthernet.h><UIPEthernet.h> в свои исходные файлы, и все компилируется с помощью Arduino IDE (v1.8.10). Заглянув в библиотеку, я вижу <UIPEthernet.h><UIPEthernet.h> включает <utilities/uipopt.h><utilities/uipopt.h>, который в свою очередь включает "uip-conf.h" (обратите внимание на кавычки). Поэтому я думаю, что он предназначен для того, чтобы забрать мой местный. Но это не так - он использует оригинал из библиотеки.

Мое понимание слова#Include "пример.ч" , что он выглядит на примере.ч относительно текущего местоположения файла, (т. е. <utilities uipopt.h="">так ЖКХ/), поэтому я вижу правильное включение поведение и теперь я не вижу, как этот подход к настройкам может не работать!

Я попытался добавить #include "uip-conf.h" к своим собственным источникам, и это работает для моих источников, но, конечно, не влияет на сами файлы library .cpp, которые все еще видят исходную версию.

Я, вероятно, мог бы перетащить всю библиотеку в свой скетч и исправить включения, но это кажется неправильным ответом. Он широко разработан, чтобы быть настраиваемым. Знаете ли вы, какие шаги нужно предпринять, чтобы сделать это, пожалуйста? (Или указатель на некоторые документы был бы в порядке!) Спасибо!

, 👍0

Обсуждение

вы пробовали какие-нибудь примеры скетчей?, @jsotola

@jsotola Да, экстенсивно оценивая библиотеку. Но эти примеры не сгибают параметры конфигурации., @SusanW


1 ответ


Лучший ответ:

1

Создание копии включаемого файла в папку скетча не будет работать. При компиляции библиотеки исходные файлы sketch не включаются. "" для включения-это "сначала поиск в той же папке, что и включенный файл".

Проект в описании использования uip-conf.h является UIPEthernet. Он включает в себя библиотеку UIP от Adam Dunkels и настраивает ее с помощью этого файла.


Проект с библиотекой UIPEthernet может настроить библиотеку с параметрами в uipopt.h. Большинство параметров в uipopt.h определяются как

#ifdef UIP_CONF_UDP_CONNS
#define UIP_UDP_CONNS UIP_CONF_UDP_CONNS
#else /* UIP_CONF_UDP_CONNS */
#define UIP_UDP_CONNS    10
#endif /* UIP_CONF_UDP_CONNS */

это позволяет определить значение в командной строке компилятора как-D. Большинство IDE позволяют устанавливать определения проекта в настройках проекта. Arduino IDE еще не включила эту функцию, потому что у нее нет файла конфигурации проекта.

С помощью Arduino IDE вы можете добавить определения для платформы или для определений плат с помощью build.extra_flags in platform.local.txt или внутри boards.local.txt. Пример для boards.local.txt для Arduino Mega:

mega.build.extra_flags=-DUIP_CONF_UDP_CONNS=20 -DUIP_CONF_MAX_LISTENPORTS=30

platform.local.txt и boards.local.txt должно быть в папке boards package nect to platform.txt и boards.txt.

,

Ясный ответ в первой строке. Затем следует перспектива и контекст, а затем варианты и обходные пути - и все до завтрака. Идеальный ответ, спасибо, Юрай - еще раз!, @SusanW

@zx485, я не откатывал твою правку. это была система. система только спросила меня, принимаю ли я правку. Я не принял его, потому что политика сообщества SE заключается в том, чтобы не принимать небольшие изменения, но я бы не откатил его, если бы знал, что он уже принят., @Juraj

@Juraj: Ничего страшного. Я просто был немного сбит с толку, потому что думал, что моя правка облегчит чтение вашего поста. Тем не менее, спасибо за ваши разъяснения., @zx485