PIC C - Отправка 200 значений через USB, но отправляет только 25 или около того из них

У меня есть микроконтроллер PIC18F4455, который я пытаюсь использовать для отправки 200 значений через USB. В основном я использую цикл for и оператор printf для печати значений в выходной поток USB. Однако, когда код выполняется, я вижу в своем мониторе последовательного порта, что он отправляет только первые 25 или около того значений, а затем останавливается. Мой код PIC C ниже. Он отправит 25-е или около того значение (и запятую), но не отправит ничего после и не отправит символ новой строки. Я пытаюсь заставить его отправлять все значения, а затем символ новой строки в конце. Я отправляю их всех как символы, потому что я могу конвертировать их на ПК.

//print #3
   for (i = 0; i <= 199; i++){if (data[i]=='\0' || data[i]=='\n'){data[i]++;}}
   for (i = 0; i < 199; i++){printf(usb_cdc_putc, "%c,", data[i]);}
   printf(usb_cdc_putc, "%c\n", data[199]);

c pic
person Adam    schedule 03.04.2010    source источник


Ответы (2)


Возможно, вы переполняете буфер (FIFO аппаратно), если он слишком короткий. Вот почему задержка решила проблему — потому что вы дали аппаратному обеспечению время, чтобы фактически отправить несколько байтов, прежде чем вы заполнили новые байты в FIFO.

Прочтите техническое описание контроллера, чтобы узнать, насколько велик этот FIFO. Вероятно, есть способ проверить, насколько он заполнен, и, таким образом, подождать меньше, чем постоянные 20 мкс.

Кроме того, я бы использовал putchar для вывода отдельных символов, а не printf.

person Eli Bendersky    schedule 03.04.2010

Я понял. В итоге мне пришлось поставить задержку после печати в поток. Задержка_us(20) в цикле for после оператора печати прояснила ситуацию.

person Adam    schedule 03.04.2010
comment
Немного поздно, но похоже, что вам либо нужен протокол XOn/XOff, либо вам нужно проверить RTS/CTS перед добавлением данных в поток. - person cup; 02.10.2016