Hallo!
Ich weiß, der Titel ist nicht gerade aussagekräftig, aber ich bin mir
nicht wirklich sicher, wo mein Problem überhaupt liegt...
Ich benutze den AT32UC3A1256 Mikrocontroller der Firma Atmel und will
eine USB Verbindung mit einem Rechner herstellen. Als USB Klasse soll
die HID Klasse zum Einsatz kommen. Ein Ausschnitt aus meinem Source-Code
sieht etwa so aus:
1 | U8 usbReadData[64];
|
2 | U8 usbWriteData[64];
|
3 |
|
4 | int main(void)
|
5 | {
|
6 | // Local variables
|
7 | int i;
|
8 |
|
9 | // Initializations
|
10 | init();
|
11 | usb_task_init(); // init usb
|
12 |
|
13 | for (i = 0; i < 64; i++)
|
14 | {
|
15 | usbWriteData[i] = i;
|
16 | }
|
17 |
|
18 | asm volatile ("nop");
|
19 |
|
20 | while(TRUE)
|
21 | {
|
22 | usb_task();
|
23 |
|
24 | if (usb_readData(usbReadData))
|
25 | usb_writeData(usbWriteData);
|
26 | }
|
27 | return 0;
|
28 | }
|
Ich habe nun das Problem, dass dieser Code so wunderbar funktioniert,
d.h. das Device meldet sich am Rechner über USB an, und ich kann Daten
in beide Richtungen verschicken. Wenn ich aber die Zeile "asm volatile
("nop")" entferne, funktioniert die Anmeldung am Rechner nicht mehr. Das
Programm auf dem Mikrocontroller läuft allerdings prinzipiell (bestätigt
durch eine Blink-Funktion einer LED...). Allerdings scheint es nicht
wirklich an dem nop Befehl zu liegen, auch ein anderer "nutzloser"
Befehl könnte den gleichen Effekt haben (z.B. Zuweisen einer Variable,
die aber später nicht mehr verwendet wird). Genauso ist es z.B. egal an
welcher Stelle in der Main Funktion dieser nop Befehl steht...
Das Problem ist leider sogar noch viel "willkürlicher". Ändere ich
irgendwo etwas am Code, etwa in einer Funktion, oder füge ich etwas
hinzu, kann es sein, dass danach die USB Anmeldung funktioniert, oder
eben auch nicht. Ein Hinzufügen eines nop Befehles, oder auch von zwei
nop Befehlen, könnte das wieder ändern. Der Kompiler meldet keine Fehler
oder Warnungen.
Hat irgendjemand eine Idee, woran das liegen könnte? Ich bin für jede
Hilfe dankbar, weiß gerade nicht mehr was ich noch versuchen soll...
Ach ja, die Entwicklungsumgebung ist AVR32 Studio 2.6.0, ich verwende
das Software Framework 1.7.0.
Vielen Dank und viele Grüße
Christian