Миландр

Ключевым подразделением нашей компании является Центр Проектирования интегральных микросхем
Текущее время: 2017-дек-18 04:26

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 46 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
СообщениеДобавлено: 2015-апр-13 16:35 
Не в сети

Зарегистрирован: 2010-июл-08 08:50
Сообщения: 733
Откуда: АО "ПКК Миландр"
ЧумА писал(а):
Здешний порт uIP родился давно и до рождения SPL, пример работы с Ethernet в SPL использует другой стек. Короче, делаем попытку подружить uIP с SPL.
Соответственно на основе SPL и заглядывая в упомянутый пример написана прослойка для uIP - функции tapdev_init(), tapdev_read(), tapdev_send()....

Раз ARP-запросы принимаются, и формируются на них ответы, значит Ethernet настроен "практически" корректно, а если ICMP-запросы не принимаются то у меня рождается вопрос. MAC-адрес в ICMP-пакете и в регистрах контроллера совпадают? Проверьте этот момент.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2015-апр-13 21:19 
Не в сети

Зарегистрирован: 2009-сен-21 12:39
Сообщения: 449
Цитата:
Раз ARP-запросы принимаются, и формируются на них ответы, значит Ethernet настроен "практически" корректно, а если ICMP-запросы не принимаются то у меня рождается вопрос. MAC-адрес в ICMP-пакете и в регистрах контроллера совпадают? Проверьте этот момент.

Судя по логу Wireshark-а совпадают, ответ на ICMP выглядит "как настоящий" (но проверю). Стоит закрыть Wireshark - ping пропадает напрочь. При этом на фоне ping-а Wireshark иногда отлавливает "битые" пакеты и после них кратковременно пропадает ping. Если воткнуться вместо выделенки Win7...ВЕ1 в локалку через хаб, то Wireshark для работы ping-а не требуется, но успешно ping-уется только 1..2% запросов.

Оборзел и пошел от обратного, взял рабочий Ethernet100BaseT_ICMP_Server и пошагово перетаскиваю его от заклинаний в стиле "opora.h" на заклинания в стиле MDR + SPL. Из промежуточных результатов:
- в SPL, например, нет цикла ожидания флага готовности PHY после его настройки;
- регистр u32 G_CFG в SPL почему-то поделен на пару u16 регистров G_CFGh, G_CFGl, хотя работает и так и так;
- функция отправки Ethernet пакета в SPL не возвращает 0 (вообще ничего не возвращает) при отсутствии места в буфере.
На настоящий момент есть рабочий пример с хидером ВЕ1 в стиле MDR и с заменой большинства магических чисел ( типа G_CFG |= 1<<2), но без функций SPL. Очень хочется избавиться от 8-ми warning-ов http://forum.milandr.ru/viewtopic.php?f=34&t=2490&p=13493#p13449, от 2-х избавился :).
В свободную минуту, надеюсь, допилю. Конечная цель - имея рабочий стек прикрутить внешний PHY из 5600ВВ3, но там плата не готова, но чувствуется будет весело :).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2015-апр-14 12:35 
Не в сети
Аватара пользователя

Зарегистрирован: 2014-июн-26 17:31
Сообщения: 10
Никак не могу заставить скомпилиться проект...

Исходные данные:
Вложение:
Снимок0.PNG
Снимок0.PNG [ 62.87 КБ | Просмотров: 8822 ]


и установленный Milandr.MDR1986BExx.1.4.0. pack

Разархивировал проект, запускаю, получаю предупреждения:

Вложение:
Снимок1.PNG
Снимок1.PNG [ 18.08 КБ | Просмотров: 8822 ]

Вложение:
Снимок2.PNG
Снимок2.PNG [ 19.99 КБ | Просмотров: 8822 ]

Вложение:
Снимок3.PNG
Снимок3.PNG [ 19.22 КБ | Просмотров: 8822 ]

Вложение:
Снимок4.PNG
Снимок4.PNG [ 17.17 КБ | Просмотров: 8822 ]


Иду в Options for Target 'Target 1' ->C/C++ -> Include Paths и добавляю пути к Coremark , OPORA/inc, OPORA, компилю, получаю:
Открыть
Код:
Build target 'Target 1'
compiling main.c...
.\src\platform\coremark\core_portme.h(82): warning:  #47-D: incompatible redefinition of macro "NULL" (declared at line 56 of "C:\Keil_5\ARM\ARMCC\Bin\..\include\string.h")
  #define NULL ((void *)0)
.\src\apps/telnetd/shell.c(79): warning:  #167-D: argument of type "uint8 *" is incompatible with parameter of type "const char *"
                if(strncmp(p->commandstr, str, strlen(p->commandstr)) == 0)
.\src\apps/telnetd/shell.c(79): warning:  #167-D: argument of type "uint8 *" is incompatible with parameter of type "const char *"
                if(strncmp(p->commandstr, str, strlen(p->commandstr)) == 0)
.\src\apps/telnetd/shell.c(79): warning:  #167-D: argument of type "uint8 *" is incompatible with parameter of type "const char *"
                if(strncmp(p->commandstr, str, strlen(p->commandstr)) == 0)
.\src\apps/telnetd/shell.c(120): warning:  #167-D: argument of type "uint8 *" is incompatible with parameter of type "const char *"
        if(strlen(str) > 0)
.\src\apps/telnetd/shell.c(134): warning:  #167-D: argument of type "uint8 *" is incompatible with parameter of type "char *restrict"
        substr = strtok(str, " ");
.\src\apps/telnetd/shell.c(134): warning:  #513-D: a value of type "char *" cannot be assigned to an entity of type "uint8 *"
        substr = strtok(str, " ");
.\src\apps/telnetd/shell.c(135): warning:  #513-D: a value of type "char *" cannot be assigned to an entity of type "uint8 *"
        substr = strtok(NULL, " ");
.\src\apps/telnetd/shell.c(139): warning:  #167-D: argument of type "uint8 *" is incompatible with parameter of type "const char *"
                tmp = atoi(substr);
.\src\apps/telnetd/shell.c(147): warning:  #167-D: argument of type "uint8 *" is incompatible with parameter of type "char *restrict"
                sprintf(line, "CoreMark 1.0[%02d]  : %f", coremark_num, (default_num_contexts*results.iterations)/time_in_secs(total_time));
.\src\apps/telnetd/shell.c(149): warning:  #167-D: argument of type "uint8 *" is incompatible with parameter of type "char *restrict"
                sprintf(line, "CoreMark Size     : %lu",(ee_u32)results.size);
.\src\apps/telnetd/shell.c(151): warning:  #167-D: argument of type "uint8 *" is incompatible with parameter of type "char *restrict"
                sprintf(line, "Iterations/Sec    : %f", (default_num_contexts*results.iterations)/time_in_secs(total_time));
.\src\apps/telnetd/shell.c(153): warning:  #167-D: argument of type "uint8 *" is incompatible with parameter of type "char *restrict"
                sprintf(line, "Iterations        : %lu",(ee_u32)(default_num_contexts*results.iterations));
.\src\apps/telnetd/shell.c(155): warning:  #167-D: argument of type "uint8 *" is incompatible with parameter of type "char *restrict"
                sprintf(line, "Total ticks       : %lu",(ee_u32)total_time);
.\src\apps/telnetd/shell.c(161): warning:  #167-D: argument of type "uint8 *" is incompatible with parameter of type "char *restrict"
                sprintf(line, "Memory location   : %s",MEM_LOCATION);
.\src\apps/telnetd/shell.c(163): warning:  #167-D: argument of type "uint8 *" is incompatible with parameter of type "char *restrict"
                sprintf(line, "seedcrc           : 0x%04x",seedcrc);
.\src\apps/telnetd/shell.c(166): error:  #20: identifier "count_IO_IRQ" is undefined
                sprintf(line, "MAC IRQs          : %d",count_IO_IRQ);
.\src\apps/telnetd/shell.c(166): warning:  #167-D: argument of type "uint8 *" is incompatible with parameter of type "char *restrict"
                sprintf(line, "MAC IRQs          : %d",count_IO_IRQ);
.\src\apps/telnetd/shell.c(168): error:  #20: identifier "count_TMR_IRQ" is undefined
                sprintf(line, "Timer IRQs        : %d",count_TMR_IRQ);
.\src\apps/telnetd/shell.c(168): warning:  #167-D: argument of type "uint8 *" is incompatible with parameter of type "char *restrict"
                sprintf(line, "Timer IRQs        : %d",count_TMR_IRQ);
.\src\apps/telnetd/shell.c(173): warning:  #167-D: argument of type "uint8 *" is incompatible with parameter of type "char *restrict"
                sprintf(line, "Current iteration : %lu/%lu", (ee_u32)current_iteration,(ee_u32)results.iterations);
.\src\apps/telnetd/shell.c(186): warning:  #167-D: argument of type "uint8 *" is incompatible with parameter of type "char *restrict"
        rows = strtok(str, " ");
.\src\apps/telnetd/shell.c(186): warning:  #513-D: a value of type "char *" cannot be assigned to an entity of type "uint8 *"
        rows = strtok(str, " ");
.\src\apps/telnetd/shell.c(188): warning:  #513-D: a value of type "char *" cannot be assigned to an entity of type "uint8 *"
        rows = strtok(NULL, "x");
.\src\apps/telnetd/shell.c(191): warning:  #167-D: argument of type "uint8 *" is incompatible with parameter of type "char *restrict"
                sprintf(line,"Current size: %dx%d", s->rows, s->cols );
.\src\apps/telnetd/shell.c(194): warning:  #513-D: a value of type "char *" cannot be assigned to an entity of type "uint8 *"
                cols = strtok(NULL, " ");
.\src\apps/telnetd/shell.c(196): warning:  #167-D: argument of type "uint8 *" is incompatible with parameter of type "const char *"
                tmp = atoi(rows);
.\src\apps/telnetd/shell.c(197): warning:  #167-D: argument of type "uint8 *" is incompatible with parameter of type "const char *"
                tmp2 = atoi(cols);
.\src\apps/telnetd/shell.c(213): warning:  #167-D: argument of type "uint8 *" is incompatible with parameter of type "char *restrict"
                sprintf(line,"New size: %dx%d", s->rows, s->cols);
.\src\apps/telnetd/telnetd.c(83): warning:  #167-D: argument of type "uint8 *" is incompatible with parameter of type "const char *"
        len = strlen(line);
.\src\apps/telnetd/telnetd.c(86): warning:  #111-D: statement is unreachable
                case 0x00:      return; break;
.\src\apps/telnetd/telnetd.c(87): warning:  #111-D: statement is unreachable
                case 0x0A:      return; break;
.\src\apps/telnetd/telnetd.c(88): warning:  #111-D: statement is unreachable
                case 0x0D:      return; break;
.\src\apps/telnetd/telnetd.c(103): warning:  #167-D: argument of type "uint8 *" is incompatible with parameter of type "char *restrict"
                                strncpy(ptr, line, len);
.\src\apps/telnetd/telnetd.c(103): warning:  #167-D: argument of type "uint8 *" is incompatible with parameter of type "const char *restrict"
                                strncpy(ptr, line, len);
.\src\apps/telnetd/telnetd.c(174): warning:  #167-D: argument of type "uint8 *" is incompatible with parameter of type "const char *"
                                len = strlen((uint8*)s->lines[s->lines_sent]);
.\src\apps/telnetd/telnetd.c(311): warning:  #167-D: argument of type "uint8 *" is incompatible with parameter of type "char *restrict"
                strcpy(s->uid.name, "guest");
.\src\apps/webserver/httpd-cgi.c(213): warning:  #513-D: a value of type "struct httpd_cgi_call **" cannot be assigned to an entity of type "const struct httpd_cgi_call **"
        for(f = calls; *f != NULL; ++f)
src\platform\minimal-net\main.c(109): error:  #142: expression must have pointer-to-object type
        uip_setethaddr(default_ethaddr);
src\platform\minimal-net\main.c(109): error:  #142: expression must have pointer-to-object type
        uip_setethaddr(default_ethaddr);
src\platform\minimal-net\main.c(109): error:  #142: expression must have pointer-to-object type
        uip_setethaddr(default_ethaddr);
src\platform\minimal-net\main.c(109): error:  #142: expression must have pointer-to-object type
        uip_setethaddr(default_ethaddr);
src\platform\minimal-net\main.c(109): error:  #142: expression must have pointer-to-object type
        uip_setethaddr(default_ethaddr);
src\platform\minimal-net\main.c(109): error:  #142: expression must have pointer-to-object type
        uip_setethaddr(default_ethaddr);
src\platform\minimal-net\main.c(110): warning:  #223-D: function "clock_init" declared implicitly
        clock_init();
src\platform\minimal-net\main.c(238): warning:  #111-D: statement is unreachable
        return 0;
src\platform\minimal-net\main.c: 38 warnings, 8 errors
compiling memb.c...
src\core\lib\memb.c(101): warning:  #68-D: integer conversion resulted in a change of sign
        return -1;
src\core\lib\memb.c: 1 warning, 0 errors
compiling clock.c...
src\core\sys\clock.c(50): warning:  #223-D: function "init_timer" declared implicitly
        init_timer(CLOCK_CONF_1ms);
src\core\sys\clock.c: 1 warning, 0 errors
compiling timer.c...
src\core\sys\timer.c(67): warning:  #223-D: function "clock_time" declared implicitly
        t->start = clock_time();
src\core\sys\timer.c(106): warning:  #223-D: function "clock_time" declared implicitly
        t->start = clock_time();
src\core\sys\timer.c(123): warning:  #223-D: function "abs" declared implicitly
        return (clock_time_t)(abs(clock_time() - t->start)) >= (clock_time_t)t->interval;
src\core\sys\timer.c(123): warning:  #223-D: function "clock_time" declared implicitly
        return (clock_time_t)(abs(clock_time() - t->start)) >= (clock_time_t)t->interval;
src\core\sys\timer.c(139): warning:  #223-D: function "clock_time" declared implicitly
        return t->start + t->interval - clock_time();
src\core\sys\timer.c: 5 warnings, 0 errors
compiling psock.c...
compiling uip.c...
src\core\net\uip.c(1915): warning:  #177-D: label "ip_send_nolen" was declared but never referenced
  ip_send_nolen:
src\core\net\uip.c: 1 warning, 0 errors
compiling uip_arp.c...
compiling uip-fw.c...
compiling uiplib.c...
compiling uip-neighbor.c...
compiling uip-split.c...
compiling 5600VG1_config.c...
compiling 5600VG1_emac.c...
src\dev\5600VG1\5600VG1_emac.c(27): warning:  #177-D: variable "ptr" was declared but never referenced
        t_DBUS  *ptr;
src\dev\5600VG1\5600VG1_emac.c: 1 warning, 0 errors
compiling 5600VG1_timer.c...
compiling tapdev.c...
".\obj\uIP.axf" - 8 Error(s), 47 Warning(s).
Target not created.
Build Time Elapsed:  00:00:03
Закрыть


Что не так слелал не пойму? Прошу разьяснить :(


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2015-апр-17 16:51 
Не в сети

Зарегистрирован: 2009-сен-21 12:39
Сообщения: 449
Цитата:
Раз ARP-запросы принимаются, и формируются на них ответы, значит Ethernet настроен "практически" корректно, а если ICMP-запросы не принимаются то у меня рождается вопрос. MAC-адрес в ICMP-пакете и в регистрах контроллера совпадают? Проверьте этот момент.

Цитата:
Судя по логу Wireshark-а совпадают, ответ на ICMP выглядит "как настоящий" (но проверю). Стоит закрыть Wireshark - ping пропадает напрочь.

Спасибо, таки да MAC в uIP и MAC в регистры контроллера был записан в обратном порядке.
Теперь вопрос:
Обработчик Ethernet прерывания выдернутый из примера Ethernet100BaseT_ICMP_Server и доработанный в части цикла do/while имеет вид:
Код:
void ETHERNET_Handler(void)
{
   uint16_t Status  = MDR_ETHERNET1->ETH_IFR;
   MDR_ETHERNET1->ETH_IFR = Status;
      
   if(Status & ETH_IMR_RF_OK)
      {
      do
         {      
         len = ReadPacket(buf);
         PacketAnaliser();
         
         MDR_PORTD->CLRTX = 1<<8;
         }
      while( MDR_ETHERNET1->ETH_STAT & ETH_STAT_R_COUNT_Msk );
      }
}

Отлично работает в сети из 2-х устройств - контроллер и тестовый комп, если включить в локалку через хаб, то через некоторое время перестаёт формироваться ETH_IMR_RF_OK,
прерывание вызывается и в Status-е появляются флаги MISSED_F и OVF.
Что ещё, кроме сброса флагов, надо сделать, что бы заставить приёмник принимать? Т.е. как правильно обработать прерывание по MISSED_F и OVF в линейном режиме работы буферов?

Ещё вопрос, в упомянутом примере ф-я чтения пакета в конце выполняет MDR_ETHERNET1->ETH_STAT -= 0х20
т.е. фактически это MDR_ETHERNET1->ETH_STAT -= (1 << ETH_STAT_R_COUNT_Pos);
По спецификации регистр ЕТН_STAT.R_COUNT должен декременироваться при чтении. Надо вычитать или это артефакт?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2015-апр-17 18:08 
Не в сети

Зарегистрирован: 2010-июл-08 08:50
Сообщения: 733
Откуда: АО "ПКК Миландр"
Сходу я бы предположил, что при подключении микроконтроллера к сети достаточно быстро заполняется внутренний буфер приемника Ethernet. То есть принимается, скажем, 3 пакета, а считывается всего 1. Поэтому предложил бы использовать как условие для вычитывания данных из буфера приемника Ethernet разницу в указателях R_Head и R_Tail.
Насколько я помню необходимо самостоятельно декрементироавать поле RCOUNT в регистре STAT. Автоматически оно не уменьшается.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2015-апр-17 20:52 
Не в сети

Зарегистрирован: 2009-сен-21 12:39
Сообщения: 449
Цитата:
Сходу я бы предположил, что при подключении микроконтроллера к сети достаточно быстро заполняется внутренний буфер приемника Ethernet. То есть принимается, скажем, 3 пакета, а считывается всего 1. Поэтому предложил бы использовать как условие для вычитывания данных из буфера приемника Ethernet разницу в указателях R_Head и R_Tail.

1 Ситуация с падением возникает не сразу по подключению, а минут через 10...30 после подключения к локалке и как-то (субъективно) коррелирует с интенсивностью обмена через хаб (т.е. с кол-вом входящих в МК). Т.е. если в сегменте хаба спровоцировать активность, то (субъективно) упадёт быстрее. При этом ping на контроллер работает постоянно. По светодиодам + осциллограф видно, что за одно прерывание от Ethernet поступает не более одного пакета.
2 Допустим, при любом (IMR = 0xFFFF) прерывании от Ethernet я проверяю R_Tail != R_Head. Все доступные на форуме практические (но не упомянутый ICMP пример) реализации делают это почему-то поллингом в main_loop, а в прерывании в лучшем случае сбрасывают IFR. В спецификации не объясняется является ли это неравенство условием приёма пакета целиком или частично, проясните, пожалуйста. Отлично, если целиком. Работать поллингом, без прерываний очень не хочется.
3 Я получил прерывание от Ethernet с IFR = MISSED_F или OVF. Как поступить правильно, считать R_BUF и переустановить R_Head, или установить R_Head = R_Tail без собственно чтения, или переинициализировать Ethernet контроллер, или что-то другое?
4 Я поставил проверку на соответствие считанной (в прерывании по успешному приёму) по R_Head[0] длине пакета максимально возможному в Ethernet-пакете значению 1518 байт. Минут через ...дцать отладчик встал по превышению...
Функция чтения полностью соответствует упомянуому ICMP примеру.
Цитата:
Насколько я помню необходимо самостоятельно декрементироавать поле RCOUNT в регистре STAT. Автоматически оно не уменьшается.

Спецификация версия 2.10.0 от 31.03.2015
Цитата:
Таблица 472 – Описание бит регистра STAT, стр.398:
"Инкрементируется автоматически при получении нового пакета. Декрементируется только при чтении поля R_COUNT регистра STAT".
стр 391:
Таблица 455 – Регистры контроллера интерфейса Ethernet, столбец 3:
R, 0x0303 (т.е. не RW !)

P.S. Упомянутый ICMP пример я переписал из заклинаний opora.h в заклинания MDR_xxx, при необходимости могу выложить. Увы, но он точно также падает в локалке через упомянутые 10...30 минут :(.
P.P.S. Прошу прощения за сумбур в изложении.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: keil + olimex = ?
СообщениеДобавлено: 2015-апр-27 11:45 
Не в сети

Зарегистрирован: 2015-апр-27 11:09
Сообщения: 4
Здравствуйте уважаемые специалисты ЗАО "ПКК Миландр" .
Возможно, ли адаптировать этот замечательный проект под связку Eclipse +ARM GCC + OpenOCD + Olimex ARM-USB.
Ибо Keil весьма дорогой продукт и не всем по карману :oops:


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2015-май-08 10:23 
Не в сети

Зарегистрирован: 2015-мар-19 10:00
Сообщения: 9
Имеется работающая реализация на SPL.


Вложения:
dev.zip [3.36 КБ]
Скачиваний: 285
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2015-май-09 18:09 
Не в сети
Аватара пользователя

Зарегистрирован: 2011-авг-21 18:55
Сообщения: 229
Пытаюсь пересобрать проект с uIP в Keil 5.14 с конфигурацией 1986ВЕ91Т + 5600ВГ1У - уже убрал две ошибки, но остаются ошибки с невидимостью определения структур файла httpd-fsdata.h - причём, если прописать директиву #include "httpd-fsdata.h" в файле httpd-fsdata.c - то видимость появляется, но вылезают ошибки двойного включения объектных модулей. В Keil 4.74 ошибок нет. Вопрос вдогон, нет ли у кого переписанных файлов драйверов 5600ВГ1У для проекта uIP для режима работы с SPI?
Открыть
Вложение:
Error_uIP.jpg
Error_uIP.jpg [ 592.4 КБ | Просмотров: 8566 ]
Закрыть


P.S. Получилось НАКОНЕЦ-ТО собрать без ошибок - если выкинуть из дерева файлов папки app_telnet и app_webserver, то всё компилируется нормально.

P.P.S. Пересобрал пример под Keil 5.14 с ICMP-протоколом для SPI для 5600ВГ1У и обратил внимание на следующее: что за необходимость включения в файлы .h файлов .c - неужели нельзя сделать нормальные пары .h-.c и определить все .h в каком-нибудь файле main.h - из-за этого пришлось из дерева файлов выкинуть файл ethconfig.c и снять галочку С99 в закладке С/C++? Такие хитрости связаны с версией стандарта (с89, с90, с99) языка Си??


Вложения:
spi5600vg1.zip [378.76 КБ]
Скачиваний: 269
uip5600vg1NoErr.zip [2.34 МБ]
Скачиваний: 222
uip5600vg1.zip [2.34 МБ]
Скачиваний: 215

_________________
Hack the Planet!
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2015-май-12 11:17 
Не в сети

Зарегистрирован: 2011-апр-21 07:31
Сообщения: 31
Откуда: АО "ПКК Миландр"
нет, никакого тайного умысла нет


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2015-май-12 18:09 
Не в сети
Аватара пользователя

Зарегистрирован: 2011-авг-21 18:55
Сообщения: 229
Ok

_________________
Hack the Planet!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2015-май-13 01:40 
Не в сети
Аватара пользователя

Зарегистрирован: 2011-авг-21 18:55
Сообщения: 229
Web Server это круто!!! Gyro, лови проект под 1986ВЕ1Т для Keil 5.14 - это пересобранный проект, который был выложен Petr, работает на самопальной плате.

Класс! И DHCP через роутер заработал!

Кто-нибудь знает, кстати, как теперь найти своё устройство по сети своей программой в Windows, например как реализовано в оcциллографах Tektronix в программе SignalExpress?

Подкорректировал файл httpd-cgi.c - добавлены cgi-функции для изменения (port_toggle) и опроса состояния (port_status) жёлтого светодиода на LAN-разъёме (подключен к 14 выводу порта B) (пример реализации взял отсюда http://www.lpcware.com/content/forum/ui ... le-example). Теперь можно помигать с помощью гиперссылки Change светодиодом на закладке GPIO веб-сервера! :D


Вложения:
lanLed.zip [4.41 МБ]
Скачиваний: 291
lanDHCP.zip [4.59 МБ]
Скачиваний: 273
lanWork.zip [4.34 МБ]
Скачиваний: 315

_________________
Hack the Planet!
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2015-май-18 00:23 
Не в сети
Аватара пользователя

Зарегистрирован: 2011-авг-21 18:55
Сообщения: 229
Цитата:
Кто-нибудь знает, кстати, как теперь найти своё устройство по сети своей программой в Windows, например как реализовано в оcциллографах Tektronix в программе SignalExpress?


Вот неплохой батник нашёл http://atinyexperience.blogspot.ru/2012 ... on-ip.html - заполняет таблицу ARP локальной машины и потом можно найти соответствие MAC-адрес (заданный жёстко в микроконтроллере) <-> динамический IP-адрес.

_________________
Hack the Planet!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2017-дек-06 15:56 
Не в сети

Зарегистрирован: 2017-дек-06 14:47
Сообщения: 5
Добрый день, стоит следующая задача, в кротчайшие сроки надо настроить TCP соединение, для подключение и управление 1986ве1т от компьютера и отправки данных обратно в компьютер, нужна программа для самого контроллера, времени разбираться нет, выручите пожалуйста кто сможет!)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2017-дек-08 15:12 
Не в сети

Зарегистрирован: 2014-авг-25 10:34
Сообщения: 18
Обязательно TCP? по UDP можно?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 46 ]  На страницу Пред.  1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB