Lufa CDC Echo

OP #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
}
OP #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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.