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

 
 
> Работа с 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
Ответов
0men
сообщение Feb 27 2018, 11:11
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 84
Регистрация: 7-05-05
Пользователь №: 4 819



char strbuf[10]="";

вот это объявите вне функции - глобально. Она останется аргументом

Сообщение отредактировал 0men - Feb 27 2018, 11:11
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Feb 27 2018, 11:15
Сообщение #3


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

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



Цитата(0men @ Feb 27 2018, 16:11) *
char strbuf[10]="";

вот это объявите вне функции - глобально. Она останется аргументом

объявил. не помогло.
Go to the top of the page
 
+Quote Post
0men
сообщение Feb 27 2018, 11:22
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 84
Регистрация: 7-05-05
Пользователь №: 4 819



Цитата(Jenya7 @ Feb 27 2018, 14:15) *
объявил. не помогло.


CDC_Send_DATA использует USBD_CDC_TransmitPacket? Посмотрите, что возвращают функции
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Feb 27 2018, 11:33
Сообщение #5


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

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



Цитата(0men @ Feb 27 2018, 16:22) *
CDC_Send_DATA использует USBD_CDC_TransmitPacket? Посмотрите, что возвращают функции

для F103 было что то вроде этого. по человечески.
а тут крайне странная функция
Код
uint32_t CDC_Send_DATA (uint8_t *ptrBuffer, uint8_t Send_length)
{
  /*if max buffer is Not reached*/
  if(Send_length < VIRTUAL_COM_PORT_DATA_SIZE)    
  {
    /*Sent flag*/
    packet_sent = 0;
    /* send  packet to PMA*/
    UserToPMABufferCopy((unsigned char*)ptrBuffer, ENDP1_TXADDR, Send_length);
    SetEPTxCount(ENDP1, Send_length);
    SetEPTxValid(ENDP1);
  }
  else
  {
    return 0;
  }
  return 1;
}

ставлю точку останова на UserToPMABufferCopy - вижу ptrBuffer = 10 Send_length = 2 - все верно. и на терминале вижу - 10. без точки останова - на терминал не приходит ничего.

Сообщение отредактировал Jenya7 - Feb 27 2018, 11:40
Go to the top of the page
 
+Quote Post



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

 


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


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