Was ändert sich beim Verschieben von Code von einem ARM M0+ auf einen ARM M4?

Angenommen, ich habe ein sehr einfaches Programm, das auf einem ARM Cortex M0 + -Prozessor einwandfrei funktioniert. Wie viel muss ich ändern, damit es auf einem ARM Cortex M4-Prozessor funktioniert, vorausgesetzt, sie stammen beide von derselben Firma und ich habe den neuen Cores-Header importiert.

Mir fällt einfach kein Grund ein, warum es nicht funktionieren sollte. Sie verwenden einen ähnlichen Befehlssatz. Ich meine, der M4 hat einen viel umfangreicheren Thumb-2-Befehlssatz als der M0+. Meiner Erfahrung nach behalten Unternehmen dasselbe Namensschema bei, wenn sie ihre ARM-Geräteheader erstellen.

Hast du es versucht? Hat es funktioniert?
Ich habe keinen, ich habe eigentlich noch keinen M4-Armprozessor.
Es sollte funktionieren, aber Sie wären dumm, die M4-Anweisungen nicht neu zu kompilieren und zu nutzen. Sie könnten es in einem LPC43xx testen, der sowohl einen M4 als auch einen oder zwei M0 hat, mit Zugriff auf die gleichen Peripheriegeräte.
Sie müssen die Hardware nicht zur Hand haben, um zu versuchen, sie zu kompilieren. Wenn Sie jedoch die Peripherieschnittstelle direkt und nicht über eine Bibliothek ausführen, benötigen Sie die Hardware (oder einen Simulator mit extrem hoher Wiedergabetreue), um dies zu validieren.

Antworten (2)

Die CPU sollte Ihnen keine Probleme bereiten, da Sie sagen, dass der Befehlssatz eines M4 eine Obermenge des M0/M0+-Befehlssatzes ist. Beachten Sie, dass das Timing unterschiedlich sein kann, sodass das auf Beschäftigt-Warten basierende Timing möglicherweise nicht gleich funktioniert.

Peripheriegeräte können ein PITA sein, ich würde nicht davon ausgehen, dass sie gleich sind, es sei denn, die Datenblätter lesen dasselbe.

Danke! Ich bin froh zu hören, dass die Konzepte bei der Programmierung mehr oder weniger gleich sein werden.
"Die Cortex-M0-CPU ... führt eine Teilmenge des Thumb-2-Befehlssatzes aus. Dies ermöglicht eine vollständig kompatible, binäre Aufwärtsmigration des Codes zu ... dem Cortex-M3 und M4." -- Datenblatt der PSoC 4000-Familie
Tatsächlich kann sich der "Stil" der Peripherieschnittstelle sogar zwischen den meisten Pin-kompatiblen Upgrade-Path-Geräten desselben Anbieters drastisch unterscheiden.

Wenn Ihre Software im ASM-/kompilierten Format vorliegt, funktioniert sie (da Cortex M4 eine Obermenge von Cortex M0 ist), aber suboptimal.

Wenn Ihre Software in C/C++ ist (im Wesentlichen kann sie neu kompiliert werden), müssen Sie wählen:

  • für M0 kompilieren (und keine leistungsfähigeren Anweisungen verwenden),
  • für M4 kompilieren und sicherstellen, dass andere Komponenten dies unterstützen (z. B. muss RTOS den FPU-Status im Kontextwechselkontext speichern, wenn FPU verwendet wird),

Beachten Sie jedoch, dass Peripheriegeräte möglicherweise nicht vollständig kompatibel sind, insbesondere wenn der Hersteller sich nicht um eine solche Kompatibilität kümmert. Wenn der Hersteller darauf achtet und Ihre Software reservierte Bits von Reset-Werten ändert, funktionieren Peripheriegeräte möglicherweise nicht wie erwartet.