Ich habe eine eingebettete Echtzeit-Anwendung, bei der der Hauptzyklus mit 10 KHz läuft. Sie läuft auf einem TI TMS320C, der so konfiguriert ist, dass er vom Flash bootet. Ich habe vor kurzem ein initialisiertes Array zu einer Quelldatei hinzugefügt, und plötzlich ist das Timing vermasselt (in einer Weise, die zu komplex ist, um gut zu erklären - im Wesentlichen ein serieller Port schreiben ist nicht mehr rechtzeitig abgeschlossen.)
Die Dinge, die mich daran stören:
- Ich bin nicht einmal auf die neuen Daten zugreifen nur die Deklaration eines initialisierten Arrays.
- Es ist größenabhängig - das Problem tritt nur auf, wenn das Array mehr als 40 Wörter umfasst.
- Ich weiß, dass ich keine Datensegmente in der Link Map überlaufe.
- Es gibt keine Zwischenspeicherung von Daten, also liegt es nicht an einer Störung der Cache-Konsistenz.
Haben Sie eine Idee, wie die einfache Vergrößerung des .cinit-Segments in Flash das Timing Ihres Codes beeinflussen kann?
Zusätzliche Informationen:
Ich dachte, dass der Code vielleicht verschoben wurde, aber er ist gut von den Daten getrennt. Ich habe anhand der Memory Map überprüft, dass alle Codesegmente vor und nach dem Fehler die gleichen Adressen haben. Ich habe auch überprüft, dass keines der Segmente voll ist - die einzigen Adressen, die sich in der Map ändern, sind einige wenige im Abschnitt .cinit. Dieser Abschnitt enthält Datenwerte, die zur Initialisierung von Variablen im Ram verwendet werden (wie mein Array). Auf ihn sollte nach dem Aufruf von main() nicht mehr zugegriffen werden.