Hallo zusammen, Ich beschäftige mich momentan mit einem AVR32 Board (AT32UC3C-EK mit einem AVR32UC3C0512C) der beim Auftretten eines UART Interrupts hängen bleibt. kurz zu dem Aufbau: Die Anwendung ist aufgebaut wie in der angehängten Abbildung dargestellt. Sprich ich möchte 3 Aufgaben erledigen. 1. Daten die am UART1 ankommen sollen geparst werden um festzustellen ob sie für das Gerät bestimmt sind oder nicht dazu werden diese in die INPUT QUEUE geschrieben und dann von einem Task ausgewertet. 2. Alle Daten die am UART 1 ankommen sollen auch gleichzeitig weitergeleitet werden, dazu wird in eine FORWORDING QUEUE geschrieben, die Daten in der FORWARD QUEUE werden durch einen Task am OUTPUT UART rausgeschrieben. 3. Die Anwendung selbst senden ab und an ebenfalls Daten, die in die OUTPUT QUEUE geschrieben werden und dann mithilfe eines Tasks am OUTPUT UART rausgeschrieben werden. Das ganze gibt es in einer funktionierenden Konfiguration und einer nichtfunktionierenden. Funktionierende Kunfiguration: - Freertos (3 Tasks) - 2xUARTs ( 1x Eingang + 1x Ausgang) Eingang ist Interruptgesteuert Sobald ein Zeichen am Eingang registriert wird, wird ein Interrupt ausgelöst. Mit dem Auslösen eines Interrupts wird das Zeichen in zwei verschieden Queues geschrieben (INPUT & FORWORDING) - HEAP liegt im HRAM0 - STACK liegt im INTRAM (Größe 4K) - PBA ist auf 32 MHz erhöht (um höhere Geschwindigkeiten am UART2 zu erreichen) Nichtfunktionierende Konfiguration: - Freertos (3 Tasks) - 2xUARTs ( 1x Eingang + 1x Ausgang) Eingang ist Interruptgesteuert Sobald ein Zeichen am Eingang registriert wird, wird ein Interrupt ausgelöst. Mit dem Auslösen eines Interrupts wird das Zeichen in zwei verschieden Queues geschrieben (INPUT & FORWORDING) - HEAP liegt im SDRAM - STACK liegt im INTRAM (Größe 4K) - PBA ist auf 32 MHz erhöht (um höhere Geschwindigkeiten am UART2 zu erreichen) Nichtfunkionierende Konfiguration bedeutet, dass alle Tasks solange problemlos ausgeführt werden bis ich ein Zeichen (oder Zeichenfolge) an den UART1 sende (vom Terminal). Es werden dann einige Zeichen empfangen (immer unterschiedlich wieviele mal 1 Zeichen mal 5) und die Anwendung bleibt hängen. Ich habe die Probleme jetzt auf den INTERRUPT handler eingegrenzt. Jetzt ist die Frage, kennt jemand die geschilderten Probleme. Das Kuriose ist, das die Anwendung ohne den Einsatz des SDRAMs problemlos und stabil läuft, nur sobald ich den SDRAM verwende kommt es zu diesem Verhalten. Den SDRAM wird richtig angebunden (Linker Script, Startup File... initialisierung im _init_startup). Der Einsatz des SDRAM als externes RAM habe ich in einem Projekt ohne Freertos bereits erfolgreich getestet, dort läuft es stabil. Stack overflow würde ich persönlich ausschließen, aus dem einfachen Grund, dass eine funktionierende Konfiguration existiert und es dort nicht zu einem Stack Overflow kommt. Ich bin auf eure Vorschläge gespannt. Viele Grüße Alex
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.
