Перейти к содержанию
    

realqwerty

Участник
  • Постов

    19
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о realqwerty

  • Звание
    Участник
    Участник

Посетители профиля

857 просмотров профиля
  1. индицировать состояние ячейки, пустое, полупустое и т.д., т.е. независмое включение, моргание любым светодиодом без текста и картинок. WS2812B спасибо посмотрим, LIN тоже глянем, спасибо
  2. имеется стеллаж на 240 ячеек, 2х3 метра. по вертикали 8 рядов(2 метра) по горизонтали 30 рядов ( 3 метра.) Нужно на каждую ячейку приделать независимую трехцветную светодиодную индикацию. кучу проводов тянуть неохота. есть мысль сделать печатную плату размером на 5 ячеек(48 плат.) и зацепить по RS485 + каконить контроллер. какие варианты еще есть? i/o - expanderы? у них spi и i2c интерфейсы, как они себя поведут на такие расстояния, + вопрос адресации.
  3. сделал с использованием сокетов, получилось неожиданно легко, где будут грабли?
  4. а на халяву не прокатит: "тут" поставить очистку буфера, а "тут" отключение соединения?
  5. lwIp tcp клиент для STM32

    имеется сервер TCP, который на запрос клиента "M\r" отправляет два сообщения: 1. "ОК\r" 2. "какое-то значение\r" имеется отладка stm32f746g-disco и пример "LwIP_TCP_Echo_Client" из набора STM32Cube. работает замечательно, за исключением одного, не принимает сообщение №2. т.е. после приема первого сообщения соединение закрывается. err_t tcp_echoclient_recv(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err) { struct echoclient *es; err_t ret_err; LWIP_ASSERT("arg != NULL", arg != NULL); es = (struct echoclient *)arg; /* if we receive an empty tcp frame from server => close connection */ if (p == NULL) { /* remote host closed connection */ es->state = ES_CLOSING; if (es->p_tx == NULL) { /* we're done sending, close connection */ tcp_echoclient_connection_close(tpcb, es); } else { /* send remaining data*/ tcp_echoclient_send(tpcb, es); } ret_err = ERR_OK; } /* else : a non empty frame was received from echo server but for some reason err != ERR_OK */ else if (err != ERR_OK) { /* free received pbuf*/ if (p != NULL) { pbuf_free(p); } ret_err = err; } else if (es->state == ES_CONNECTED) { /* increment message count */ message_count++; /* Acknowledge data reception */ tcp_recved(tpcb, p->tot_len); es->p_tx = p; char strmr[20] = ""; strncpy(strmr, es->p_tx->payload, es->p_tx->len); // здесь считали сообщение printf("%d %s\n", message_count, strmr); pbuf_free(p); tcp_echoclient_connection_close(tpcb, es); // соединение закрывается ret_err = ERR_OK; } /* data received when connection already closed */ else { /* Acknowledge data reception */ tcp_recved(tpcb, p->tot_len); /* free pbuf and do nothing */ pbuf_free(p); ret_err = ERR_OK; } return ret_err; } если соединение закрывать после второго сообщения, else if(es->state == ES_CONNECTED) { /* increment message count */ message_count++; /* Acknowledge data reception */ tcp_recved(tpcb, p->tot_len); es->p_tx = p; char strmr[20] = ""; strncpy (strmr,es->p_tx->payload,es->p_tx->len); //strmr[es->p_tx->len] = '\r'; printf ("%d %s\n", message_count, strmr); if (strncmp(strmr, "OK", 2) == 0) { pbuf_free(p); } else { pbuf_free(p); tcp_echoclient_connection_close(tpcb, es); } ret_err = ERR_OK; } то происходит переполнение буфера и ... 1 OK 2 4680235013820 3 OK 4 4680235013820 5 OK 6 4680235013820 7 OK 8 4680235013820 9 OK 10 4680235013820 11 OK Assertion "pbuf_free: p->ref > 0" failed at line 747 in ../Middlewares/Third_Party/LwIP/src/core/pbuf.c Assertion "mem_free: legal memory" failed at line 430 in ../Middlewares/Third_Party/LwIP/src/core/mem.c Assertion "pbuf_free: p->ref > 0" failed at line 747 in ../Middlewares/Third_Party/LwIP/src/core/pbuf.c Assertion "tcp_write: arg == NULL (programmer violates API)" failed at line 401 in ../Middlewares/Third_Party/LwIP/src/core/tcp_out.c Assertion "tcp_write: arg == NULL (programmer violates API)" failed at line 401 in ../Middlewares/Third_Party/LwIP/src/core/tcp_out.c 12 ER :smile3046: попробовал с компьютера в visual studio написать запрос 187 - запрос "M\r" 192 - ответ "OK\r" 198 - ответ "4680235013820" подскажите пожалуйста как правильно организовать прием второго пакета
  6. нет, ограничений нету, моя семантическая ошибка, все работает.
  7. имеется три сервопривода дельта подключенные по CAN, адаптировал Canopennode, уткнулся в проблему как увеличить количество RPDO и TPDO в Canopennode? через Object_Dictionary_Editor устанавливаю количество более 5 RPDO и 5 TPDO и при запуске в CO_OD_RAM.errorRegister появляется ошибка CO_ERR_REG_COMM_ERR = 0x10U, /**< bit 4, communication error (overrun, error state) */ хотя 5+5 работает нормально.
  8. похоже много памяти выделялось для GUI уменьшил до 1024 * 120 и заработало // // Define the available number of bytes available for the GUI // #define GUI_NUMBYTES (1024 * 120) // x KByte в .map умрешь разбираться, спасибо за подсказку
  9. я вижу по ошибкам что ее не хватает. только почему в объемном примере STemWin_SampleDemo с десятком окон с памятью все нормально, а для вывода HelloWorld ее не достаточно? наверное где-то проблемы с распределением памяти, только где?
  10. прикрутил tft lcd 800x480 к отладке STM32F429IDISCOVERY, все вроде настроил, дисплей работает, простенькие примеры отображает. ide Keil. пытаюсь "прикрутить" STemWim используя примеры из библиотек (STM32F429I-Discovery_FW_V1.0.1), на родном разрешении 240*320 все работает, как только меняю на 800*480 keil при компоновке выдает ошибки .\STM32F429I-Discovery_Demo\STM32F429I-Discovery_Demo.axf: Error: L6406E: No space in execution regions with .ANY selector matching guidrv_stm32f429i_discovery.o(.bss). .\STM32F429I-Discovery_Demo\STM32F429I-Discovery_Demo.axf: Error: L6407E: Sections of aggregate size 0x9600 bytes could not fit into .ANY selector(s). скачал STM32Cube_FW_F4_V1.0.0 пример STemWin_SampleDemo работает замечательно, а пример STemWin_HelloWorld опять ругается STM32F429I_DISCO_MB1075\STM32F429I_DISCO_MB1075.axf: Error: L6406E: No space in execution regions with .ANY selector matching startup_stm32f429xx.o(STACK). STM32F429I_DISCO_MB1075\STM32F429I_DISCO_MB1075.axf: Error: L6407E: Sections of aggregate size 0x2000 bytes could not fit into .ANY selector(s). кто может разбирался, подскажите что не так?
  11. частота коммутации - это кол-во включений транзистора? так оно и так в районе 10-50 кГц, а частота вибрации электромагнита должна регулироваться в районе 40-60 Гц. а вот для решений по синусу вообще ничего не видел в сети, подскажите где почитать спасибо.
  12. спасибо, дерзаю, но все таки интересно узнать (почитать) о преимуществах и недостатках различных схем включения силовых элементов, может поделитесь ссылкой?
  13. индуктивность у магнита я даже честно не знаю, сейчас работает одна схема (типовая схема включения IR2101) там выдаются прямоугольные импульсы с "заполнением" для ограничения протекающего тока, интересно было бы попробовать с имитацией полуволны синусоиды и регулировкой амплитуды и частоты.
  14. прошу прощения, а наверно некорректно выражаюсь: с выбором силового элемента проблем нет, есть проблема (в виду недостаточного незнания основ) с выбором самой схемы включения этого силового элемента, т.е. транзистор(ы) м.б. включен "нижним ключом", "верхним ключом", "нижним + верхним ключом", мостом и полумостом, так вот я пытаюсь понять почему люди применяют все эти разные схемы и какая именно мне нужна?
×
×
  • Создать...