PIC C - USB_CDC_GETC () и получение строк - PullRequest
2 голосов
/ 31 марта 2010

Я программирую микроконтроллер PIC18F4455, используя PIC C. Я использую файл заголовка USB_CDC.h. У меня на компьютере есть программа, отправляющая строку типа "W250025". Однако, когда я использую usb_cdc_getc (), чтобы получить первый символ, он зависает. Иногда программа отправляет только 'T', поэтому я действительно хочу получить первый символ.

Почему мой код никогда не выполняется раньше, чем полученный = usb_cdc_getc (); когда я отправляю "W250025"?

if (usb_cdc_kbhit())
      {
         //printf(lcd_putc, "Check 3"); delay_ms(3000); printf(lcd_putc, "\f");
         received = usb_cdc_getc();
         printf(lcd_putc, "Received "); lcd_putc(received); delay_ms(3000); printf(lcd_putc, "\f");
         if (received == 'W'){   //waveform
            disable_interrupts(INT_TIMER1);
            set_adc_channel(0);
            load_and_print_array(read_into_int(), read_into_int());}
         else if (received == 'T'){ //temperature
            set_adc_channel(1);
            enable_interrupts(INT_TIMER1);}
      }

Ответы [ 2 ]

1 голос
/ 31 марта 2010

Я не знаю специфики микроконтроллера PIC, но, предполагая, что usb_cdc_getc ведет себя как нормальный getc, наиболее вероятная причина в том, что ваши персонажи не достигают функции, которая обычно блокирует. Вы отправляете новую строку? Это также может быть аппаратная проблема, когда персонажи не доходят до вашего ОК.

Если это первое, а не желаемое поведение, скорее всего, есть неблокирующий getch эквивалент.

0 голосов
/ 25 мая 2017

Может быть, это поможет:

usb_cdc_getc() - Получить символ из буфера приема.Если в приемном буфере нет данных, он будет ждать, пока в приемном буфере не будет данных.Если вы не хотите ждать в бесконечном цикле, сначала используйте usb_cdc_kbhit(), чтобы проверить, есть ли данные перед вызовом usb_cdc_getc(). "

с https://github.com/tkrworks/PICnome-Firmware/blob/master/usb_cdc.h

...