Lufa CDC Echo

#3775436
Lesenswert?

Hallo zusammen,

anbei habe ich folgenden Code,mit dem ich über eine Terminalsoftware was 
an den AT90USB162 (Lufa Implementierung für USB CDC) sende und er mir 
das gleiche wieder zurücksenden soll.

Es klappt auch, nur halt sehr langsam, also ich kann nicht frei drauf 
lostippen und muss zwischen den einzelnen Eingaben warten bis diese 
akzeptiert werden.
Mache ich hier was grundlegendes falsch? Und vorallem, müsste ich bei 
einem empfangen Byte nicht in eine Interrupt Routine abspringen können?
1
int main(void)
2
{
3
  
4
  SetupHardware();
5
  CDC_Device_CreateStream(&VirtualSerial_CDC_Interface, &USBSerialStream);
6
  sei();
7

8
  for (;;)
9
  {
10
    CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface);
11
    
12
    int16_t ReceivedByte = CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface);
13
       if (!(ReceivedByte < 0))
14
         CDC_Device_SendByte(&VirtualSerial_CDC_Interface, (uint8_t)ReceivedByte);
15

16

17
     CDC_Device_USBTask(&VirtualSerial_CDC_Interface);
18
     
19
     USB_USBTask();
20
    
21
  }
22
}
#3775445
Lesenswert?

Hi,

Wo ist jetzt der große Unterschied zu meinem code?
1
int main(void) {
2
    /* Init the USB (and clock + interrupts) */
3
    USBInit();
4

5
    for (;;) {
6
        /* Must throw away unused bytes from the host, or it will lock up while waiting for the device */
7
        int c = fgetc(USBtty0);
8

9
        /* simple demo: implement an uppercase echo */
10
        if (!(c<0)) {
11
            fputc(toupper(c), USBtty0);
12
        }
13

14
        USBPoll();
15
    }
16
}
#3775448
Lesenswert?

Ja hast recht, ich habe nochmal genauer in die lib gesehen - am Puffer 
duerfte es nicht liegen.

Wohl aber an:
1
    CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface);
2
    
3
    int16_t ReceivedByte = CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface);
4

5
[...]

Was zu lockups/loss fuehren koennte, wenn du tatsaechlich mal was 
empfangen willst?

Nachtrag: Loech einfach mal bitte das erste "CDC_Device_ReceiveByte" 
raus.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren