реклама на сайте
подробности

 
 
> Работа с VCP
Jenya7
сообщение Feb 27 2018, 06:16
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Я получаю строку с терминала
Код
int main(void)
{
  Set_System();
  Set_USBClock();
  USB_Interrupts_Config();
  USB_Init();

  while (1)
  {
    if (bDeviceState == CONFIGURED)
    {
      CDC_Receive_DATA();
      /*Check to see if we have data yet */
      if (Receive_length  != 0)
      {
        PARSER_ParseCommand((char *)Receive_Buffer);
        Receive_length = 0;
      }
    }
  }
}

Обрабатываю строку и посылаю ответ
Код
CDC_Send_DATA((uint8_t *)strbuf, strlen(strbuf));


Проблема вот в чем - если я ставлю точку останова на самой строке CDC_Send_DATA и потом Step Over - то я вижу ответ в терминале.
А если код свободно бежит - на терминал не приходит ответ. Что то с синхронизацией, не могу понять.

Сообщение отредактировал Jenya7 - Feb 27 2018, 06:18
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
toweroff
сообщение Feb 27 2018, 19:01
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Тоже плевался на реализацию куба, пока отложил, есть другие задачи, но общее решение у меня нарисовалось вот какое (надо проверить) :

1. Отправка данных через функцию, в которой проверка, отправляется ли в данный момент по usb что-то или нет. Если да - добавляем в буфер, нет - вызываем CDC_Send_DATA с размером точки, остальное в буфер, ставим флаг активности.
2. В EP1_IN_Callback смотрим, есть что в буфере или нет. Есть - CDC_Send_DATA с размером точки (если данных больше), кончились данные - снимаем флаг

Go to the top of the page
 
+Quote Post
Jenya7
сообщение Feb 28 2018, 06:13
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(toweroff @ Feb 28 2018, 01:01) *
Тоже плевался на реализацию куба, пока отложил, есть другие задачи, но общее решение у меня нарисовалось вот какое (надо проверить) :

1. Отправка данных через функцию, в которой проверка, отправляется ли в данный момент по usb что-то или нет. Если да - добавляем в буфер, нет - вызываем CDC_Send_DATA с размером точки, остальное в буфер, ставим флаг активности.
2. В EP1_IN_Callback смотрим, есть что в буфере или нет. Есть - CDC_Send_DATA с размером точки (если данных больше), кончились данные - снимаем флаг

ого. фига се. sm.gif. пока что уменьшил до 1000 - if(++timeout > 1000) break; - работает стабильно и слава богу. все равно это допольнительная фича для настройки параметров, типа nice-to-have, если лень UART подключать.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 17:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01384 секунд с 7
ELECTRONIX ©2004-2016