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
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ß
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
> Keine Ahnung. Aber wie arbeitest du mit dem Ding? Hast du ein Demoboard?
Klar, notfalls kann man sich ja auch eine Adapterplatine machen.
Olaf
Hier geht es um den LPC541xx aber vielleicht hilft dir das weiter : https://www.nxp.com/docs/en/application-note/AN12123.pdf
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 ;-)
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.