Arduino Mega Server

Модератор: Alex

Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server

Сообщение Alex » Сб апр 22, 2017 9:50 am

Я использовал конструкции типа

Код: Выделить всё

#define ETHERNET_LIBRARY 

#if defined(ETHERNET_LIBRARY)
  // W5500
  #include <Ethernet2.h>
  #include <EthernetUdp2.h>
#else
  // W5100
  #include <Ethernet.h>
  #include <EthernetUdp.h>
#endif   
и множество других вариантов. Ветки прекрасно переключаются, но переключение не действует на

Код: Выделить всё

  #include <Ethernet2.h>
  #include <EthernetUdp2.h>   
и

Код: Выделить всё

  #include <Ethernet.h>
  #include <EthernetUdp.h>
 
они просто тупо компилируются вместе, что, естественно, вызывает ошибки.

Ещё раз: ветки переключаются, но переключение не действует на директивы подключения библиотек. Почему?
alexsis_76
Сообщения: 792
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

Re: Arduino Mega Server

Сообщение alexsis_76 » Сб апр 22, 2017 10:05 am

вот такое попробуйте
#define eth
// W5100
#ifdef eth
#include <Ethernet.h>
#endif
// W5500\
#ifndef eth
#include <Ethernet2.h>
#endif
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server

Сообщение Alex » Сб апр 22, 2017 10:13 am

Попробовал — как я и говорил, на include <> директивы не действуют и компилируются сразу обе библиотеки.

Код: Выделить всё

Используем библиотеку Ethernet в папке: C:\Sketches\ams\Arduino\libraries\Ethernet 
Используем библиотеку Ethernet2 в папке: C:\Sketches\ams\Arduino\libraries\Ethernet2
Почему?! Этому должно быть какое-то рациональное объяснение. И должен быть какой-то путь решения этой проблемы. Буквально заблудились в трёх соснах.
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Arduino Mega Server

Сообщение nick7zmail » Сб апр 22, 2017 10:26 am

Возможно немного не в тему, но как альтернатива обьявлению директив (в направлении "мыслить шире", и про "создавать разные сборки"), может за этим и придумали генераторы прошивок...то что не нашли как переключить директивы компиляции, и решили написать прогу, которая просто нужные директивы сама накидывает в файл, а потом уже его заливают в IDE...
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server

Сообщение Alex » Сб апр 22, 2017 10:32 am

Про генераторы прошивок это вопрос второй. Здесь вопрос принципиальный, тут получается как бы 2х2=5. И вопрос чести (особенно для «настоящих» программистов) выяснить в чём тут дело.

Или теперь у нас будет 2х2=5! :)
alexsis_76
Сообщения: 792
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

Re: Arduino Mega Server

Сообщение alexsis_76 » Сб апр 22, 2017 11:18 am

сколько пользовался никогда проблем не было,правда использовал переменные,может надо перенести библиотеки в проект,но при указании пути у файлу орет что там ничего нет,хотя там все есть.
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server

Сообщение Alex » Сб апр 22, 2017 12:13 pm

Есть ещё обходной путь, вот похожий пример:
#define TARGET avr
...
#define FNAME_CONCAT(First, Second) <First/**/Second>
#include FNAME_CONCAT(TARGET,/io.h)

В данном случае макрос в директиве include развернётся в #include <avr/io.h>.
Но у меня не получилось корректно развернуть макрос.
alexsis_76
Сообщения: 792
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

Re: Arduino Mega Server

Сообщение alexsis_76 » Сб апр 22, 2017 1:29 pm

Кажись получилось
ALEX попробуйте так
//#define eth
// W5100
#ifdef eth
// #include <Ethernet.h>
#include "C:/121/Sketches/Sketches/ams/Arduino/arduino_mega_server/libraries/libraries/Ethernet/src/Ethernet.h"
#include <EthernetUdp.h>
#endif
#ifndef eth
// #include <Ethernet.h>
#include "C:/121/Sketches/Sketches/ams/Arduino/arduino_mega_server/libraries/libraries/Ethernet2/src/Ethernet2.h"
#include <EthernetUdp.h>
#endif
для инслюде укажите полный путь начиная с корня,теперь берет библиотеки из каталога с проектом
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server

Сообщение Alex » Сб апр 22, 2017 4:34 pm

Попробовал — пишет «No such file or directory»

Сомнения вызывают слеши «не в ту сторону», но это не самое главное. Самое главное, что этот способ (даже если бы он заработал) неприемлем потому, что запись без путей и в <> скобках позволяет системе искать файлы в папке библиотек, а так каждому пользователю придётся вводить километровые абсолютные пути, которые ещё и у всех разные.
alexsis_76
Сообщения: 792
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

Re: Arduino Mega Server

Сообщение alexsis_76 » Вс апр 23, 2017 3:02 am

все работает
1234556.jpg
1234556.jpg (195.08 КБ) 9328 просмотров
при переключении библиотек надо изменять сдесь
//EthernetClient sclient = server.available_(sock);
EthernetClient sclient = server.available();
иначе ошибки
свой путь можно посмотреть в настройках и добавить к нему папку с библиотеками
ну не понимает она (ардуина) относительные пут я ж говорю убогая среда.
Ответить