Unterscheidet sich die Entwicklung auf ARM-Prozessoren von verschiedenen Anbietern stark?

7

Ich habe begonnen, Anwendungen auf dem XMC 2 go Evaluation Board zu entwickeln. Ich hatte mehr oder weniger die Idee. Aber was ist, wenn ich versuche, STM32 zu wählen?

Für XMC1100 wird Pin 00 als Ausgang eingestellt

PORT1->IOCR0 &= ~PORT0_IOCR0_PC0_Msk;
PORT0->IOCR0 |= 0x0 << PORT0_IOCR0_PC0_Pos;

Aber ich glaube nicht, dass stm32 ein IOCRRegister hat. Sollte ein Ingenieur all diese verschiedenen Registernamen lernen?

Ozgur
quelle

Antworten:

10

Ja tut es. Während alle Cortex M-Controller denselben Kern und einige der Kernperipheriegeräte gemeinsam nutzen, sind alle anderen Peripheriegeräte herstellerspezifisch.

Selbst die Verwendung von CMSIS hilft Ihnen in diesem Szenario nicht viel, da es nur Dinge abdeckt, die von ARM bereitgestellt werden, dem Kern und den Kernperipheriegeräten (NVIC, Systick ...).

Wenn Sie also von einem Anbieter zu einem anderen wechseln, müssen Sie am Ende das Datenblatt, das Referenz- (oder Benutzer-) Handbuch lesen und herausfinden, wie das Zeug funktioniert. Sie müssen nicht unbedingt alle Registernamen lernen, da Anbieter jetzt Peripheriebibliotheken bereitstellen, die eine abstrakte Ebene auf die Hardware legen.

Aber es ist nicht schwer oder herausfordernd, es ist das, was Sie tun müssen - ich würde sagen, es ist sogar einer der spaßigeren Teile, um herauszufinden, wie diese Peripheriegeräte funktionieren.

Und nachdem Sie dies erkannt haben, möchten Sie möglicherweise eine Hardware-Abstraktionsschicht schreiben, um zu verhindern, dass Ihre Firmware für einen anderen Controller vollständig unbrauchbar wird. Wenn Sie eine stabile HAL haben, können Sie zumindest die Gerätetreiber und Anwendungsebenen auf Ihren nächsten Controller übertragen und müssen die HAL nur erneut implementieren.

Obwohl die Anbieter Peripheriebibliotheken anbieten, die als HAL fungieren, gibt es keinen Anbieterübergreifenden Standard. Auf der untersten Ebene müssen Sie also Ihre Software anpassen, weshalb ich sagte, dass Sie möglicherweise selbst eine HAL schreiben möchten (in der Sie die HAL des Anbieters verwenden können).

Wenn Sie eine stabile HAL implementieren möchten, sind Ihre Funktionen höchstwahrscheinlich auf die grundlegenden Funktionen der allgemeinen Peripheriegeräte beschränkt, sodass jeder Controller abstrahiert werden kann. In der Regel verlieren Sie einige erweiterte Funktionen der Peripheriegeräte, da diese nicht überall verfügbar sind (z. B. ein Baudratenerkennungsmechanismus oder eine automatische Totzeit zwischen PWM-Kanälen). Das ist der Preis, den man zahlen muss. Wenn wir diese Mechanismen für unsere Anwendung benötigen, schreiben wir zu diesem Zweck einen speziellen Hardwaretreiber, damit der Rest weiterhin mit der gemeinsamen HAL arbeiten kann.

Mit diesem Ansatz habe ich eine Anwendung auf zwei andere Mikrocontroller portiert, die gerade die HAL implementiert haben. Der Rest konnte ohne eine einzige Änderung in der Software kompiliert werden.

Arsenal
quelle
1
Ich weiß es zu schätzen, dass Sie HAL erwähnt haben. Wie wäre es mit HALs, die Anbieter anbieten? Befolgen sie prozessübergreifend einen Standard?
Ozgur
4
@ozgur Um es milde auszudrücken ist "nein". Herstellerspezifische HALs dienen nur dazu, mit all ihren Chips mit denselben Befehlen zu arbeiten. Zum Beispiel hat Atmel Software Framework, ein sehr schönes Quick-Proto-Toolset, einige Funktionen wie HALs anderer Anbieter, aber nichts ist garantiert, und tatsächlich konnte ich nicht auf mein eigenes HAL oder HALAL (<- LOL! ) ihre Abstraktion zu abstrahieren.
Asmyldof
@ozgur Ich habe meinen Beitrag aktualisiert und auf Anbieter-HALs erweitert. Ich stimme Asmyldof zu, es gibt keinen Standard.
Arsenal
@ Arsenal Sehr hilfreich. Vielen Dank, wirklich.
Ozgur
@Asmyldof jetzt ist die Nachricht Ihres Kommentars klar. Ein Mangel an Standard ist jedoch eine Schande.
Ozgur