PIC C - отправка 200 значений через USB, но он отправляет только 25 из них - PullRequest
0 голосов
/ 03 апреля 2010

У меня есть микроконтроллер 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]);

Ответы [ 2 ]

2 голосов
/ 03 апреля 2010

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

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

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

0 голосов
/ 03 апреля 2010

Я понял это. В итоге мне нужно было поставить задержку после печати в поток. Delay_us (20) внутри цикла for после того, как оператор print прояснил ситуацию.

...