Forum: Compiler & IDEs Multiprozessor MCU


von Olaf (Gast)


Lesenswert?

Moin Leute,

Ich werde wohl als naechstes mit einem Prozessor rumspielen der mehrere 
Cores enthaelt. Genauer gesagt einem LPC4300.

Da drin befindet sich ein Cortex-M4 und ein oder zwei M0. Soweit ich das 
ueberschaue teilen die sich denselben Adressbereich. Eigentlich cool, 
bin schon gespannt darauf was sich damit erreichen laesst.

Programmieren wollte ich gerne mit dem gcc.

Jetzt kann ich natuerlich einen Source fuer den M4 uebersetzen und einen 
anderen fuer den M0. Am ende sollte aber ein Bin oder Hex rauskommen. 
Ich bin auch in der Lage das LD File entsprechend zu schreiben damit die 
jeweiligen Sachen an der richtigen Stelle landen, aber was ist mit 
Funktionen gleichen Namens? (z.B zweimal main)

Sollte man beide Projekte komplett getrennt halten und am ende irgendwie 
(wie?) das Hexfile zusammenboseln?

Oder sollte man getrennt uebersetzen und dann alles vom Linker erzeugen 
lassen?

Wie macht ihr das so?

Oh..und noch eine Zusatzfrage: Wie erklaert man eigentlich seinem JLink 
mit welchem der Prozessoren er spricht?

Olaf

von Franko P. (sgssn)


Lesenswert?

Olaf schrieb:
> Wie macht ihr das so?

Keine Ahnung. Aber wie arbeitest du mit dem Ding? Hast du ein Demoboard? 
Vermutlich ist sowas für den Einstieg nicht falsch. Auf jeden Fall gibts 
genug Doku dazu auf NXP.com und auf LPC4300.com

Gruß

von Schall & Rauch (Gast)


Lesenswert?

Olaf schrieb:
> Sollte man beide Projekte komplett getrennt halten und am ende irgendwie
> (wie?) das Hexfile zusammenboseln?

srec_cat app.hex -I app2.hex -I -o combined.hex -I

von Olaf (Gast)


Lesenswert?

> Keine Ahnung. Aber wie arbeitest du mit dem Ding? Hast du ein Demoboard?

Klar, notfalls kann man sich ja auch eine Adapterplatine machen.

Olaf

von Hans-Georg L. (h-g-l)


Lesenswert?

Hier geht es um den LPC541xx aber vielleicht hilft dir das weiter :

https://www.nxp.com/docs/en/application-note/AN12123.pdf

von Michael F. (Gast)


Lesenswert?

Folgender Ansatz funktioniert bei IAR und somit sollte das auch mit GCC 
gehen...

- ein Projekt für den Master-Core
- ein Projekt für den Slave-Core
- das Slave-Projekt wird compiliert, gelinkt und am Ende das erzeugte 
ELF in ein BIN gewandelt
- das Master-Projekt wird compiliert, gelinkt und hierbei wird das BIN 
des Slaves als zusätzlicher Input angegeben, der an die passende Adresse 
gelinkt wird
- am Ende hat man ein ELF, welches sowohl die Applikation für Master & 
Slave enthält

Da das Slave-Projekt nur als gekapseltes BIN verwendet wird, spielen 
gleiche Funktionsnamen im Master- und Slave-Projekt keine Rolle.

Was das Debugging angeht, so wird es darauf ankommen, welchen Debugger 
(Software) Du nutzt und ob da Multicore unterstützt wird oder nicht. 
Wichtig ist aber, sich Gedanken über die Reset-Strategie des Slaves zu 
machen (z.B. Software), nicht dass bei einem (hardware)Reset des Slaves 
auch dem Master der Boden unter den Füßen weggezogen wird ;-)

von Pandur S. (jetztnicht)


Lesenswert?

Ich denke man muss so ein Projekt als Echtzeit Projekt aufsetzen, mit 
Semaphoren zum Schutz der Daten. Dass Daten nicht teilweise 
ueberschrieben werden. Dazu muss die App erst mal laufen wenn nur ein 
Kern aktiv ist, bevor man ihn auf mehrere Kerne verteilt. Dann wird es 
Deadlocks geben, wo sich zwei Kerne per Kommunikation blockeren. Dazu 
benoetigt man dann Debugkonzepte und Simulationen.

Viel Glueck.

von Til S. (Firma: SEGGER) (til_s)


Lesenswert?

Olaf schrieb:
> Oh..und noch eine Zusatzfrage: Wie erklaert man eigentlich seinem JLink
> mit welchem der Prozessoren er spricht?

Über J-Link Scripte. Ich arbeite gerade mit einem Dual Cortex-M4 
(SAM4C16C).
Dort machen die Scripte ein JLINK_ExecCommand("SetCoreIndex = 0") bzw. 
JLINK_ExecCommand("SetCoreIndex = 1").

Ich habe es aber auch einfacher weil ich beide Cores den gleichen Code 
aus dem gleichen Flash ausführen lasse. Ich arbeite mit zwei Embedded 
Studio Instanzen. Die erste lädt das ELF File ins Flash und die zweite 
muss dann nur noch ein Attach machen. Core 0 initialisiert Core 1 und 
lässt ihn dann den gewünschten Code ausführen.

Pandur S. schrieb:
> Ich denke man muss so ein Projekt als Echtzeit Projekt aufsetzen, mit
> Semaphoren zum Schutz der Daten.

Dafür kann man Spinlocks benutzen. Von Arm gibt es dafür die LDREX/STREX 
Instruktionen.

von uC (Gast)


Lesenswert?

Ich kann dir empfehlen mal mit dem Aurix rumzuspielen.
Da gibt es ein Aurix TC275/TC375 Board im Arduino Form-Faktor was um die 
100€ kostet. Infineon bietet dazu auch eine kostenlose Toolchain inkl. 
Debugger auf Basis von Eclipse an.

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
Noch kein Account? Hier anmelden.