{"id":7885,"date":"2025-11-29T07:31:32","date_gmt":"2025-11-29T06:31:32","guid":{"rendered":"https:\/\/web-dev-weissblau.de\/microconsult\/?p=7885"},"modified":"2026-02-13T08:20:39","modified_gmt":"2026-02-13T07:20:39","slug":"openamp-finally","status":"publish","type":"post","link":"https:\/\/www.microconsult.de\/en\/openamp-endlich\/","title":{"rendered":"OpenAMP \u2013 finally!"},"content":{"rendered":"<h2>Ein Open-Source-Framework f\u00fcr asymmetrisches Multiprocessing<\/h2>\n<p style=\"text-align: left;\" align=\"center\">Autor: Frank Storm, Avnet Silica<\/p>\n<h3>Beitrag &#8211; Embedded Software Engineering Kongress 2017<\/h3>\n<p><strong>Viele und unterschiedliche Prozessor-Cores sind in heutigen SoCs Standard. Wie man diese asynchron, also mit unterschiedlichen Betriebssystemen, betreibt und sie dann auch miteinander kommunizieren l\u00e4sst, leider nicht. Dies f\u00fchrt dazu, dass viele Anwender eigene L\u00f6sungen implementieren, die zeit- und wartungsintensiv sind. Dieser Artikel beschreibt OpenAMP, einen offenen Standard, der es sich zur Aufgabe gesetzt hat, dieses Problem zu l\u00f6sen.<\/strong><\/p>\n<p>Fast alle gro\u00dfen SoCs kommen heute mit mehr als einem Prozessor daher. Im oberen Segment sind Arm-Prozessoren als Quad-Core inzwischen Standard, ob als A53, A57 oder als big.LITTLE Kombination aus A15 und A7 (i.MX8 [1], Marvell Armada [2], Xilinx Zynq UltraScale+ [3]). Im mittleren Segment hat man dann eher Dual-Core Systeme (i.MX8, Xilinx Zynq 7000 [4]). Da die typischen Applikationsprozessoren (Arm A) nicht f\u00fcr alle Applikationen ideal sind, stellen die Hersteller den Applikationsprozessoren auch noch andere Cores zur Seite. Das sind dann entweder spezielle Real-Time Prozessoren, wie der Cortex-R5 beim Zynq UltraScale+, oder typische Mikrocontroller-Cores, wie der Cortex-M4 beim i.MX8. Sogar im unteren Segment wird einem Cortex-M4 noch ein Cortex-M0+ zur Seite gestellt, wie in der NXP Controllerfamilie LPC54000 [5].<\/p>\n<p>Bereits in der Vergangenheit hat es diese Kombination aus Universalprozessor und Spezialprozessor gegeben, wie die im Mobilfunkbereich lange Zeit verbreitete OMAP-Familie. Der Spezialprozessor war in diesem Fall ein DSP, der f\u00fcr die Abarbeitung des GSM Stacks zust\u00e4ndig war. Schaut man sich die Verwendung der Zusatzprozessoren an, so werden diese sehr oft gezielt f\u00fcr Echtzeitaufgaben eingesetzt, sei es zur Abarbeitung eines Funkprotokoll-Stacks oder zur Antriebsregelung im Industriebereich. Dem Applikationsprozessor fallen dann die Aufgaben zu, sich um die Schnittstellen nach au\u00dfen zu k\u00fcmmern, das Human Machine Interface (Display oder Web-Server) zu realisieren und nebenbei noch &#8222;House-Keeping&#8220; zu betreiben.<\/p>\n<p>Wir haben in vielen Kundenanwendungen gesehen, dass diese Aufteilung auch bei Systemen mit zwei Applikationsprozessoren gemacht wird, wie dem Zynq-7000, der \u00fcber zwei Cortex-A9 Cores verf\u00fcgt. Hier ist es nahezu Standard, auf dem ersten Core ein Linux laufen zu lassen, das sich um Schnittstellen wie Ethernet und USB k\u00fcmmert und eine komfortable Umgebung f\u00fcr ausgewachsene Web-Server bietet. Auf dem zweiten Core l\u00e4uft dann ein schlankes Echtzeit-Betriebssystem, wie z.B. FreeRTOS oder \u00b5C-OS, oder eben auch gar kein Betriebssystem (Bare Metal).<\/p>\n<p>In der Praxis bringen diese heterogenen Systeme eine Reihe von Herausforderungen mit sich. Dabei kann es auch eher hinderlich sein, wenn die Prozessoren zu eng miteinander verzahnt sind. Typische Problemstellungen sind die Aufteilung des Speichers, das Festlegen eines Shared-Memory, das von beiden Cores zum Austausch von Daten genutzt wird, das Verteilen der System-Ressourcen (wer darf sich z.B. um den CAN-Bus k\u00fcmmern?) und auch die Frage nach der Interrupt-Verteilung (wer unterbricht wen, l\u00e4uft dies \u00fcber einen gemeinsamen Interrupt-Controller oder vielleicht \u00fcber eine spezielle Mailbox-Hardware?). Da wird auch die Frage wichtig, wie MMU oder MPU konfiguriert werden m\u00fcssen oder welche Bereiche nicht gecacht werden d\u00fcrfen. Je mehr Flexibilit\u00e4t der SoC-Hersteller in den Chip gelegt hat, umso mehr muss der Anwender bei der Umsetzung beachten.<\/p>\n<p>Die Erfahrung hat gezeigt, dass Applikation-Notes zum AMP-Betrieb der Cores [6] dankend angenommen werden, meistens aber nur der erste Schritt sind. Je komplexer ein Betriebssystem ist, desto schwieriger wird es auch, z.B. in das Speicher und Cache-Management einzugreifen. Bei einem Bare Metal Programm stellt man noch mal eben ein, welche Speicherbereiche nicht gecacht werden sollen. Bei einem Linux m\u00f6chte man sich damit gar nicht erst besch\u00e4ftigen m\u00fcssen. Leider hat auch hier die Erfahrung gezeigt, dass man sich sp\u00e4testens dann damit besch\u00e4ftigen muss, wenn Interrupts verschluckt werden und die Performance unter bestimmten Bedingungen pl\u00f6tzlich nicht mehr ausreicht.<\/p>\n<p>Auch die Fragen nach dem sogenannten Lifecycle-Management, also dem Laden und Starten von Programmen, sowie dem gezielten Schlafenlegen, Herunterfahren und Neuladen sind nicht unbedingt trivial.<\/p>\n<p>Der Wunsch kommt also ganz schnell auf, hier auf etwas Existierendem, Stabilem und Standardisiertem aufsetzen zu k\u00f6nnen. Weil das auch Hersteller von SoCs, Betriebssystemen und Tools erkannt haben, haben sich etliche Firmen zur Multicore Association (MCA) zusammengeschlossen [7]. Die Multicore Association erarbeitet in Arbeitsgruppen Standards und Implementierungen, die das Zusammenspiel von Multi-Core-Systemen regeln und vereinfachen sollen.<\/p>\n<p>Einer dieser Standards ist OpenAMP &#8211; das Open Assymetric Multiprocessing Framework [8]. OpenAMP stellt dabei ein Open-Source-Framework zur Verf\u00fcgung, was die standardisierte Kommunikation einer Vielzahl von heterogenen Systemen miteinander erm\u00f6glicht. Die entsprechende Arbeitsgruppe bei der MCA k\u00fcmmert sich dabei um die Standardisierung der Schnittstellen.<\/p>\n<p>Man hat dabei einen pragmatischen Ansatz gew\u00e4hlt. Anstatt einen allgemeinen Ansatz zu w\u00e4hlen, der alle m\u00f6glichen Szenarien abdecken soll, hat man sich auf die in der Praxis typischen F\u00e4lle konzentriert und auf bestehende Software Schnittstellen aufgesetzt.<\/p>\n<p>Konkret bedeutet das Folgendes: OpenAMP unterscheidet zwischen einem Master- oder Host-Prozessor, dem die komplette Kontrolle unterliegt, und einem Remote-Prozessor. Auf dem Master-Prozessor l\u00e4uft typischerweise ein Linux, auf dem Remote-Prozessor ein RTOS oder ein Bare-Metal Programm. Als Interface-Komponente f\u00fcr das Lifecycle Management (LCM) wird\u00a0<em>remoteproc<\/em>\u00a0[9] verwendet, f\u00fcr die Interprozessor-Kommunikation (IPC) findet\u00a0<em>RPMsg<\/em>\u00a0[10] Verwendung. Beide Komponenten sind Bestandteil des Linux-Kernels ab Version 3.4. remoteproc und RPMsg setzen beide auf\u00a0<em>virtIO<\/em>\u00a0auf, ein Layer, der virtuellen Device-Treibern die direkte Kommunikation mit dem Host-OS oder einem Hypervisor erlaubt.<\/p>\n<p>Das gilt zwar f\u00fcr Linux auf der Host-Seite, aber nicht f\u00fcr ein auf Remote-Prozessor-Seite verwendetes RTOS. Deswegen ist es Aufgabe von OpenAMP, hier eine Implementierung zur Verf\u00fcgung zu stellen, die sich in ein RTOS einbinden l\u00e4sst.<\/p>\n<p>Zus\u00e4tzlich zu LCM und IPC kommt bei OpenAMP noch eine dritte Komponente hinzu. Ein auf dem Remote-Prozessor laufendes Programm soll schlie\u00dflich auch Ausgaben machen k\u00f6nnen, die man gerne zusammen mit den Ausgaben des Host-Prozessors in einem Terminal-Fenster sehen m\u00f6chte. Au\u00dferdem w\u00e4re es vorteilhaft, wenn der Remote-Prozessor (kontrollierten) Zugang zum File-System des Hosts h\u00e4tte, sei es, um Konfigurationsdateien zu lesen oder autonom auf Daten zugreifen zu k\u00f6nnen. Hierf\u00fcr gibt es eine Proxy-Infrastruktur, die I\/O- und File-Zugriffe des Remote-Prozessors \u00fcber den Host abwickelt.<\/p>\n<p>OpenAMP \u00fcbernimmt zwar einiges an Arbeit, ohne ein paar Vorarbeiten bei der Installation des Linux-Kernels kommt man aber nicht aus. Gl\u00fccklicherweise beschr\u00e4nken sich diese haupts\u00e4chlich auf das Hinzukonfigurieren von remoteproc und RPMsg (falls diese nicht sowieso schon aktiv sind) und das Hinzuf\u00fcgen von ein paar Eintr\u00e4gen im Device-Tree, die gemeinsam genutzte Speicherbereiche und Interrupts definieren und die Verbindung zu remoteproc herstellen.<\/p>\n<h2>Ein Beispiel<\/h2>\n<p>Anhand eines kleinen Beispiels soll gezeigt werden, wie sich OpenAMP aus Sicht des Anwenders darstellt. Das Beispiel ist ein Programm, das auf dem Remote-Prozessor eine FFT berechnet und dann die berechneten Daten zur\u00fcckschickt.<\/p>\n<p>\u00dcber die Datei\u00a0<em>firmware<\/em>\u00a0im Sysfs-Filesystem wird das Programm auf den Remoteprozessor geladen:<\/p>\n<p class=\"quellcode\"># echo fft_server &gt;<br \/>\n\/sys\/class\/remoteproc\/remoteproc0\/firmware<\/p>\n<p>Gestartet wird es dann auf \u00e4hnliche Weise durch Schreiben des Wertes &#8222;start&#8220; auf die Sysfs-Datei\u00a0<em>state<\/em>:<\/p>\n<p class=\"quellcode\"># echo start &gt; \/sys\/class\/remoteproc\/remoteproc0\/state<\/p>\n<p>Im User-Programm gestaltet sich die Kommunikation dann recht einfach. Das entsprechende RPMsg-Device wird ge\u00f6ffnet, und die FFT-Eingangsdaten werden hineingeschrieben. Anschlie\u00dfend werden die berechneten Ausgangsdaten ausgelesen.<\/p>\n<p class=\"quellcode\">int fd;<\/p>\n<p class=\"quellcode\">int input_data[512];<\/p>\n<p class=\"quellcode\">int output_data[512];<\/p>\n<p class=\"quellcode\">fd = open(&#8222;\/dev\/rpmsg0&#8220;, O_RDWR);<br \/>\nwrite(fd, input_data, sizeof(input_data));<\/p>\n<p class=\"quellcode\">\u2026<\/p>\n<p class=\"quellcode\">read(fd, output_data, sizeof(output_data));<\/p>\n<p>Das Programm auf dem Remote-Prozessor gestaltet sich etwas aufw\u00e4ndiger.<\/p>\n<p class=\"quellcode\">int output_data[512];<\/p>\n<p class=\"quellcode\">void rpmsg_read_cb(<\/p>\n<p class=\"quellcode\">\u00a0\u00a0\u00a0 struct rpmsg_channel *rp_chnl,<\/p>\n<p class=\"quellcode\">\u00a0\u00a0\u00a0 void *data, int len,<br \/>\nvoid *priv, unsigned long src)<br \/>\n{<\/p>\n<p class=\"quellcode\">\u00a0 calculate_fft(data, output_data);<br \/>\nrpmsg_send(rp_chnl, output_data, sizeof(output_data));<\/p>\n<p class=\"quellcode\">}<br \/>\n\u2026<\/p>\n<p class=\"quellcode\">struct hil_proc *hproc;<br \/>\nstruct rsc_table_info rsc_info;<\/p>\n<p class=\"quellcode\">\u2026<\/p>\n<p class=\"quellcode\">hproc = platform_create_proc(proc_id);<\/p>\n<p class=\"quellcode\">rsc_info.rsc_tab = get_resource_table((int)rsc_id,<\/p>\n<p class=\"quellcode\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &amp;rsc_info.size)<\/p>\n<p>remoteproc_resource_init(&amp;rsc_info, hproc,<br \/>\nrpmsg_channel_created,<br \/>\nrpmsg_channel_deleted,<\/p>\n<p class=\"quellcode\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 rpmsg_read_cb, &amp;proc, 0);<\/p>\n<p>\u00dcber\u00a0<em>remote_proc_resource_init<\/em>\u00a0wird die Callback-Funktion\u00a0<em>rpmsg_read_cb<\/em>\u00a0registriert, die beim Empfang von Daten angesprungen wird und dann den eigentlichen Service (hier Berechnung der FFT) \u00fcbernimmt.<\/p>\n<p>Abh\u00e4ngig von der Funktion, die das Programm auf dem Remote-Prozessor zu erf\u00fcllen hat, ist nat\u00fcrlich noch etwas mehr zu tun. Im User-Programm kann es auch empfehlenswert sein, das Abschicken der Eingangsdaten und das Empfangen der berechneten Daten durch Threads zu entkoppeln.<\/p>\n<h2>Was bekommt man nun als Anwender?<\/h2>\n<p>Die Sourcen f\u00fcr OpenAMP und Beispielprogramme werden \u00fcber GitHub zur Verf\u00fcgung gestellt [11]. Von Xilinx gibt es inzwischen eine Application-Note, die den Umgang mit OpenAMP beschreibt [12]. Au\u00dferdem stellt Xilinx in seinem Software Development Kit bereits Templates f\u00fcr OpenAMP Projekte zur Verf\u00fcgung. Von NXP gibt es eine ressourcensparende RPMsg-Implementierung (RPMsg-Lite), die ebenfalls \u00fcber GitHub zur Verf\u00fcgung gestellt wird [13]. Von Mentor Graphics gibt es inzwischen mit dem\u00a0<em>Mentor Embedded Multicore Framework<\/em>\u00a0die erste kommerzielle Implementation des OpenAMP-Standards [14].<\/p>\n<h2>Warum nicht OpenCL?<\/h2>\n<p>Wo man mit richtig vielen Cores (&gt; 1000) zu tun hat, also im Bereich der GPUs, existieren bereits Frameworks zur Verwaltung von Multicore-Architekturen. Diese sind entweder propriet\u00e4r (wie CUDA von NVIDIA) oder offen wie OpenCL der Khronos Group [15]. Man kann sich jetzt nat\u00fcrlich die Frage stellen, ob sich ein Framework wie OpenCL nicht auch f\u00fcr die oben beschriebenen AMP-Szenarien verwenden lie\u00dfe und warum man mit OpenAMP ein neues Framework geschaffen hat.<\/p>\n<p>OpenCL ist daf\u00fcr konzipiert worden, mit einer generischen Anzahl von Cores umgehen zu k\u00f6nnen. Mit OpenCL entwickelte Programme sollen auf unterschiedlichen Systemen laufen k\u00f6nnen, die unterschiedlich viele Prozessoren zur Verf\u00fcgung stellen. Abzufragen, wie viele Prozessoren das System hat, um daraufhin einen Algorithmus generisch zu verteilen, ist eine der ersten Aufgaben einer OpenCL-Initialisierung. Das f\u00fchrt zu einem m\u00e4chtigen, aber auch komplexen API. OpenAMP adressiert hingegen Systeme, die typischerweise einen oder vielleicht zwei Remote-Prozessoren zur Verf\u00fcgung stellen. Hier ist die Aufgabe des Remote-Prozessors klar umrissen und das Hardware-Setup von vornherein bekannt. Dadurch kann aber auch der Overhead wesentlich geringer ausfallen als in einer Umgebung, bei der beliebig viele Cores verwaltet werden m\u00fcssen. OpenAMP agiert dadurch wesentlich schlanker, was nicht zuletzt auch den Lernaufwand gegen\u00fcber OpenCL drastisch reduziert.<\/p>\n<h2>Wie geht es weiter?<\/h2>\n<p>Momentan h\u00e4lt OpenAMP bei den ersten Entwicklern Einzug. Die ersten Fragen nach Erweiterungen kommen auch bereits (&#8222;Wir h\u00e4tten gerne noch einen C++ Layer&#8220;). Manch einer, der bereits eine L\u00f6sung hat, wird sich auch mit der Adaption Zeit lassen. Mit OpenAMP steht jetzt aber erstmals ein Standard zur Verf\u00fcgung, auf dem man bei der Implementierung von AMP-Systemen aufsetzen kann, ohne selber wieder das Rad neu erfinden zu m\u00fcssen.<\/p>\n<h2>Quellenverzeichnis<\/h2>\n<p>[1]\u00a0<a href=\"https:\/\/www.nxp.com\/products\/microcontrollers-and-processors\/arm-based-processors-and-mcus\/i.mx-applications-processors\/i.mx-8-processors:IMX8-SERIES\" target=\"_blank\" rel=\"noopener\">https:\/\/www.nxp.com\/products\/microcontrollers-and-processors\/arm-based-processors-and-mcus\/i.mx-applications-processors\/i.mx-8-processors:IMX8-SERIES<\/a><\/p>\n<p>[2]\u00a0<a href=\"https:\/\/www.marvell.com\/embedded-processors\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.marvell.com\/embedded-processors\/<\/a><\/p>\n<p>[3]\u00a0<a href=\"https:\/\/www.xilinx.com\/products\/silicon-devices\/soc\/zynq-ultrascale-mpsoc.html\" target=\"_blank\" rel=\"noopener\">https:\/\/www.xilinx.com\/products\/silicon-devices\/soc\/zynq-ultrascale-mpsoc.html<\/a><\/p>\n<p>[4]\u00a0<a href=\"https:\/\/www.xilinx.com\/products\/silicon-devices\/soc\/zynq-7000.html\" target=\"_blank\" rel=\"noopener\">https:\/\/www.xilinx.com\/products\/silicon-devices\/soc\/zynq-7000.html<\/a><\/p>\n<p>[5]\u00a0<a href=\"https:\/\/www.nxp.com\/docs\/en\/fact-sheet\/LPC541XXFAMFS.pdf\" target=\"_blank\" rel=\"noopener\">https:\/\/www.nxp.com\/docs\/en\/fact-sheet\/LPC541XXFAMFS.pdf<\/a><\/p>\n<p>[6]\u00a0<a href=\"https:\/\/www.xilinx.com\/support\/documentation\/application_notes\/xapp1078-amp-linux-bare-metal.pdf\" target=\"_blank\" rel=\"noopener\">https:\/\/www.xilinx.com\/support\/documentation\/application_notes\/xapp1078-amp-linux-bare-metal.pdf<\/a><\/p>\n<p>[7]\u00a0<a href=\"https:\/\/www.multicore-association.org\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.multicore-association.org\/<\/a><\/p>\n<p>[8]\u00a0<a href=\"https:\/\/www.multicore-association.org\/workgroup\/oamp.php\" target=\"_blank\" rel=\"noopener\">https:\/\/www.multicore-association.org\/workgroup\/oamp.php<\/a><\/p>\n<p>[9]\u00a0<a href=\"https:\/\/www.kernel.org\/doc\/Documentation\/remoteproc.txt\" target=\"_blank\" rel=\"noopener\">https:\/\/www.kernel.org\/doc\/Documentation\/remoteproc.txt<\/a><\/p>\n<p>[10]\u00a0<a href=\"https:\/\/www.kernel.org\/doc\/Documentation\/rpmsg.txt\" target=\"_blank\" rel=\"noopener\">https:\/\/www.kernel.org\/doc\/Documentation\/rpmsg.txt<\/a><\/p>\n<p>[11]\u00a0<a href=\"https:\/\/github.com\/OpenAMP\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/OpenAMP<\/a><\/p>\n<p>[12]\u00a0<a href=\"https:\/\/www.xilinx.com\/support\/documentation\/sw_manuals\/xilinx2017_2\/ug1186-zynq-openamp-gsg.pdf\" target=\"_blank\" rel=\"noopener\">https:\/\/www.xilinx.com\/support\/documentation\/sw_manuals\/xilinx2017_2\/ug1186-zynq-openamp-gsg.pdf<\/a><\/p>\n<p>[13]\u00a0<a href=\"https:\/\/github.com\/NXPmicro\/rpmsg-lite\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/NXPmicro\/rpmsg-lite<\/a><\/p>\n<p>[14]\u00a0<a href=\"https:\/\/www.mentor.com\/embedded-software\/multicore\" target=\"_blank\" rel=\"noopener\">https:\/\/www.mentor.com\/embedded-software\/multicore<\/a><\/p>\n<p>[15]\u00a0<a href=\"https:\/\/www.khronos.org\/opencl\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.khronos.org\/opencl\/<\/a><\/p>\n<p><a title=\"OpenAMP - Endlich! (PDF) \" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/12\/fachinfo_ese_multicore_openamp_-_endlich__avnet_silica_storm.pdf\" target=\"_blank\" rel=\"noopener\"><strong>Beitrag als PDF downloaden<\/strong><\/a><\/p>\n<hr \/>\n<h2>Multicore &#8211; unsere Trainings &amp; Coachings<\/h2>\n<p><strong>Wollen Sie sich auf den aktuellen Stand der Technik bringen?<\/strong><\/p>\n<p>Dann informieren Sie sich\u00a0<a title=\"Trainings und Termine - Mikrocontroller\" href=\"https:\/\/www.microconsult.de\/alle-trainings-termine-komplettuebersicht\/\" target=\"_blank\" rel=\"noopener\"><strong>hier<\/strong>\u00a0<\/a>zu Schulungen\/ Seminaren\/ Trainings\/ Workshops und individuellen Coachings von MircoConsult zum Thema Multicore \/Mikrocontroller.<\/p>\n<p><strong>Training &amp; Coaching zu den weiteren Themen unseren Portfolios finden Sie\u00a0<a title=\"Training &amp; Beratung - alle Themen\" href=\"https:\/\/www.microconsult.de\/training-beratung\/\" target=\"_blank\" rel=\"noopener\">hier<\/a>.<\/strong><\/p>\n<hr \/>\n<h2>Multicore &#8211; Fachwissen<\/h2>\n<p>Wertvolles Fachwissen zum Thema Multicore \/Mikrocontroller steht\u00a0<a title=\"Multicore Fachwissen\" href=\"https:\/\/www.microconsult.de\/embedded-und-echtzeit-softwareentwicklung\/\" target=\"_blank\" rel=\"noopener\">hier\u00a0<\/a>f\u00fcr Sie zum kostenfreien Download bereit.<\/p>\n<p><a title=\"Multicore Fachwissen\" href=\"https:\/\/www.microconsult.de\/embedded-und-echtzeit-softwareentwicklung\/\" target=\"_blank\" rel=\"noopener\"><strong>Zu den Fachinformationen<\/strong><\/a><\/p>\n<p><strong>Fachwissen zu weiteren Themen unseren Portfolios finden Sie <a title=\"Fachinformationen\" href=\"https:\/\/www.microconsult.de\/fachwissen\/\" target=\"_blank\" rel=\"noopener\">hier<\/a>.<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ein Open-Source-Framework f\u00fcr asymmetrisches Multiprocessing Autor: Frank Storm, Avnet Silica Beitrag &#8211; Embedded Software Engineering Kongress 2017 Viele und unterschiedliche Prozessor-Cores sind in heutigen SoCs Standard. Wie man diese asynchron, also mit unterschiedlichen Betriebssystemen, betreibt und sie dann auch miteinander kommunizieren l\u00e4sst, leider nicht. Dies f\u00fchrt dazu, dass viele Anwender eigene L\u00f6sungen implementieren, die zeit- [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","inline_featured_image":false,"footnotes":""},"categories":[],"tags":[],"class_list":["post-7885","post","type-post","status-publish","format-standard","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>OpenAMP - endlich! - MicroConsult Academy GmbH<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.microconsult.de\/en\/openamp-finally\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"OpenAMP - endlich! - MicroConsult Academy GmbH\" \/>\n<meta property=\"og:description\" content=\"Ein Open-Source-Framework f\u00fcr asymmetrisches Multiprocessing Autor: Frank Storm, Avnet Silica Beitrag &#8211; Embedded Software Engineering Kongress 2017 Viele und unterschiedliche Prozessor-Cores sind in heutigen SoCs Standard. Wie man diese asynchron, also mit unterschiedlichen Betriebssystemen, betreibt und sie dann auch miteinander kommunizieren l\u00e4sst, leider nicht. Dies f\u00fchrt dazu, dass viele Anwender eigene L\u00f6sungen implementieren, die zeit- [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.microconsult.de\/en\/openamp-finally\/\" \/>\n<meta property=\"og:site_name\" content=\"MicroConsult Academy GmbH\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-29T06:31:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-13T07:20:39+00:00\" \/>\n<meta name=\"author\" content=\"weissblau media\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"weissblau media\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/openamp-endlich\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/openamp-endlich\\\/\"},\"author\":{\"name\":\"weissblau media\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#\\\/schema\\\/person\\\/b6d4c4ae959b068fbe8d9416ed019a0a\"},\"headline\":\"OpenAMP &#8211; endlich!\",\"datePublished\":\"2025-11-29T06:31:32+00:00\",\"dateModified\":\"2026-02-13T07:20:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/openamp-endlich\\\/\"},\"wordCount\":1943,\"commentCount\":0,\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.microconsult.de\\\/openamp-endlich\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/openamp-endlich\\\/\",\"url\":\"https:\\\/\\\/www.microconsult.de\\\/openamp-endlich\\\/\",\"name\":\"OpenAMP - endlich! - MicroConsult Academy GmbH\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#website\"},\"datePublished\":\"2025-11-29T06:31:32+00:00\",\"dateModified\":\"2026-02-13T07:20:39+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#\\\/schema\\\/person\\\/b6d4c4ae959b068fbe8d9416ed019a0a\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/openamp-endlich\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.microconsult.de\\\/openamp-endlich\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/openamp-endlich\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.microconsult.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"OpenAMP &#8211; endlich!\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#website\",\"url\":\"https:\\\/\\\/www.microconsult.de\\\/\",\"name\":\"MicroConsult Academy GmbH\",\"description\":\"Professionelle Schulungen, Beratung und Projektunterst\u00fctzung\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.microconsult.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#\\\/schema\\\/person\\\/b6d4c4ae959b068fbe8d9416ed019a0a\",\"name\":\"weissblau media\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g\",\"caption\":\"weissblau media\"},\"sameAs\":[\"https:\\\/\\\/www.microconsult.de\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"OpenAMP - finally! - MicroConsult Academy GmbH","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.microconsult.de\/en\/openamp-finally\/","og_locale":"en_GB","og_type":"article","og_title":"OpenAMP - endlich! - MicroConsult Academy GmbH","og_description":"Ein Open-Source-Framework f\u00fcr asymmetrisches Multiprocessing Autor: Frank Storm, Avnet Silica Beitrag &#8211; Embedded Software Engineering Kongress 2017 Viele und unterschiedliche Prozessor-Cores sind in heutigen SoCs Standard. Wie man diese asynchron, also mit unterschiedlichen Betriebssystemen, betreibt und sie dann auch miteinander kommunizieren l\u00e4sst, leider nicht. Dies f\u00fchrt dazu, dass viele Anwender eigene L\u00f6sungen implementieren, die zeit- [&hellip;]","og_url":"https:\/\/www.microconsult.de\/en\/openamp-finally\/","og_site_name":"MicroConsult Academy GmbH","article_published_time":"2025-11-29T06:31:32+00:00","article_modified_time":"2026-02-13T07:20:39+00:00","author":"weissblau media","twitter_card":"summary_large_image","twitter_misc":{"Written by":"weissblau media","Estimated reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.microconsult.de\/openamp-endlich\/#article","isPartOf":{"@id":"https:\/\/www.microconsult.de\/openamp-endlich\/"},"author":{"name":"weissblau media","@id":"https:\/\/www.microconsult.de\/#\/schema\/person\/b6d4c4ae959b068fbe8d9416ed019a0a"},"headline":"OpenAMP &#8211; endlich!","datePublished":"2025-11-29T06:31:32+00:00","dateModified":"2026-02-13T07:20:39+00:00","mainEntityOfPage":{"@id":"https:\/\/www.microconsult.de\/openamp-endlich\/"},"wordCount":1943,"commentCount":0,"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.microconsult.de\/openamp-endlich\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.microconsult.de\/openamp-endlich\/","url":"https:\/\/www.microconsult.de\/openamp-endlich\/","name":"OpenAMP - finally! - MicroConsult Academy GmbH","isPartOf":{"@id":"https:\/\/www.microconsult.de\/#website"},"datePublished":"2025-11-29T06:31:32+00:00","dateModified":"2026-02-13T07:20:39+00:00","author":{"@id":"https:\/\/www.microconsult.de\/#\/schema\/person\/b6d4c4ae959b068fbe8d9416ed019a0a"},"breadcrumb":{"@id":"https:\/\/www.microconsult.de\/openamp-endlich\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.microconsult.de\/openamp-endlich\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.microconsult.de\/openamp-endlich\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.microconsult.de\/"},{"@type":"ListItem","position":2,"name":"OpenAMP &#8211; endlich!"}]},{"@type":"WebSite","@id":"https:\/\/www.microconsult.de\/#website","url":"https:\/\/www.microconsult.de\/","name":"MicroConsult Academy GmbH","description":"Professional training, consulting and project support","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.microconsult.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Person","@id":"https:\/\/www.microconsult.de\/#\/schema\/person\/b6d4c4ae959b068fbe8d9416ed019a0a","name":"weissblau media","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/secure.gravatar.com\/avatar\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g","caption":"weissblau media"},"sameAs":["https:\/\/www.microconsult.de"]}]}},"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/posts\/7885","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/comments?post=7885"}],"version-history":[{"count":6,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/posts\/7885\/revisions"}],"predecessor-version":[{"id":11703,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/posts\/7885\/revisions\/11703"}],"wp:attachment":[{"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/media?parent=7885"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/categories?post=7885"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/tags?post=7885"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}