Keil compiler oder FX2 ?

Hallo !

Ich habe unerklärliche Probleme mit dem Cypress FX2. Nach kleinen Änderungen der Firmware habe ich oft das Problem das diese nicht mehr richtig funktioniert. Tritt dieser Fall auf, reicht manchmal schon das Einfügen einer relativ sinnlosen Sourcecode-Zeile (BYTE xdata dummy[] = "dummy";) und schon funktioniert das Ganze wieder. Ich habe leider keine Ahnung was daran Schuld ist. Der Keil-Compiler ? Der Linker ? Der FX2 ? Vielleicht hat schon jemand Erfahrung mit diesem Problem gehabt ? Momentan muß ich einen größeren Sourcecode zur Firmware hinzufügen. Laut meiner Debug-Ausgabe über die serielle Schnittstelle startet die Firmware, bleibt dann aber nach einer gewissen Zeit hängen (es kommt immer wieder das gleiche Zeichen über die serielle Schnitstelle anstatt meiner Debug-Ausgaben.) Mein Vorgänger hatte die gleichen Probleme und das Ganze tritt auf verschiedener Hardware auf, es scheint also nicht bloß eine falsche Code-Zeile oder eine defekte Hardware zu sein.

Vielen Dank schonmal, Thomas Hoppe

Reply to
Thomas Hoppe
Loading thread data ...

Hallo Thomas,

es könnte Dir hier vielleicht helfen kann, die Linker-Mapfile von einer funktionierenden und einer abstürzenden Version zu vergleichen, und den Code, der die Variablen vor und nach dem eingefügten Dummy-Array benutzt, auf Array-Grenzen-Überschreitung überprüfen. Eventuell auch mal bei der funktionierenden Version Code einbauen, der den Inhalt des Dummy-Array ausgibt, evtl. wird dieser ja überschrieben?

Bei Keil/C51 ist ausserdem eine potentielle Fehlerquelle, dass die im xdata - Speicher ab 0x0000 platzierte Variable die Adresse NULL hat, Konstrukte wie

char xdata* p = dummy; if (p == NULL) { }

funktionieren dann nicht wie erwartet, wenn dummy an xdata-Adresse 0 liegt.

Ansonsten tippe ich bei Deiner Fehlerbeschreibung eher auf Probleme mit Interrupt-Routinen - evtl. gibt es Code-Stellen, bei denen Interrupts gesperrt werden müssten, wo dies versäumt wurde. Verwendung der gleichen 16-Bit-Variablen im Hauptprogramm und in der Interrupt-Routine wäre so ein Fall...

Gruß Ernst

Reply to
Ernst Schwab

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.