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

 
 
> Работа с 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, 10:25
Сообщение #2


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

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



strbuf попробуйте объявить как глобальный массив
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Feb 27 2018, 11:07
Сообщение #3


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

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



Цитата(0men @ Feb 27 2018, 15:25) *
strbuf попробуйте объявить как глобальный массив

он у меня аргумент функции. генерик функция посылает или по UART или по USB.
Код
void Parser_SendInt(USART_TypeDef *USARTx, int32_t number, uint32_t cr, uint32_t out)
{
    char strbuf[10]="";
    uint32_t sign = 0;
        
    if (number<0)
    {
    number *= -1;
    sign = 1;
    }
        
    ItoA(number, strbuf);
        
    switch (out)
    {
    case 0:  //UART
            if (sign)
                USART_SendString(USARTx,"-");
                
        USART_SendString(USARTx,strbuf);
                
       if(cr)
            USART_SendString(USARTx,"\r");
    break;
                
    case 1:  //USB
            if (sign)
                CDC_Send_DATA((uint8_t *)"-", 1);
                
             CDC_Send_DATA((uint8_t *)strbuf, strlen(strbuf));
                
             if(cr)
                CDC_Send_DATA((uint8_t *)"\r", 1);
              
     break;    
    }
}
Go to the top of the page
 
+Quote Post



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

 


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


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