{"id":951,"date":"2017-11-10T11:17:23","date_gmt":"2017-11-10T09:17:23","guid":{"rendered":"http:\/\/medtech-ingenieur.de\/?p=951"},"modified":"2021-08-06T14:45:25","modified_gmt":"2021-08-06T13:45:25","slug":"cache-auf-einem-mikrocontroller-was-es-zu-beachten-gibt","status":"publish","type":"post","link":"https:\/\/medtech-ingenieur.de\/en\/cache-auf-einem-mikrocontroller-was-es-zu-beachten-gibt\/","title":{"rendered":"Cache on a microcontroller \u2013 What you need to consider"},"content":{"rendered":"<p>Wir haben vor kurzem f\u00fcr einen Kunden eine Firmwareerweiterung programmiert, welche der Anwendung erm\u00f6glicht Daten auf dem Mikrocontrollerflash zu speichern und zu lesen. Die Firmware l\u00e4uft auf einem PIC32MZ, welcher mit einem Daten- und einem Instruktionscache ausgestattet ist. Wer schon mal versucht hat Software f\u00fcr einen PC mit Multi-Core CPU zu parallelisieren wei\u00df, dass die Caches hierbei eine wichtige Rolle spielen. Greifen &#8211; z.B. in einer Schleife &#8211; alle Kerne gleichzeitig auf denselben Cache zu, wird der Code hierdurch langsamer anstatt schneller. Paradoxerweise je langsamer, je mehr Kerne man einsetzt. Der PIC32MZ hat allerdings nur eine Single-Core CPU. Man sollte also erwarten, dass diese Probleme hier nicht auftreten.<\/p>\n<p>Tats\u00e4chlich kann der Einsatz eines Cache die Ausf\u00fchrungszeit bei Mikrocontrollern deutlich beschleunigen, da Zugriffszeiten auf den RAM und vor allem auf den Flash deutlich h\u00f6her sind als die Zugriffszeiten auf den Cache. Der Instruktionscache des PIC32MZ ist 16kB gro\u00df. Theoretisch k\u00f6nnte bei kleineren Programmen der gesamte Programmflash gecached werden. Da sich die CPU so Instruktionen fast ausschlie\u00dflich aus dem Cache holt, kann ein Programm \u00a0\u00a0dementsprechend schneller ablaufen. Ein Ausf\u00fchren des Codes aus dem RAM ist demnach kaum n\u00f6tig.<\/p>\n<p>Trotz aller Vorteile gibt es jedoch bei Einsatz eines Caches einiges zu beachten. Vor allem wenn Daten am Cache vorbei geschrieben und gelesen werden. Dies passiert immer dann, wenn nicht die CPU den Vorgang ausf\u00fchrt, sondern eine Hardwareinstanz. Hierbei kann es sich zum Beispiel um den DMA- oder den Flashcontroller handeln. Stellen wir uns als Beispiel folgendes Szenario vor: Eine Anwendung, welche auf einem PIC32MZ l\u00e4uft, soll regelm\u00e4\u00dfig Daten auf dem Flash abspeichern. Um die Lebenszeit des Flashs zu verl\u00e4ngern, werden alte Daten nicht bei jedem Schreibvorgang gel\u00f6scht, sondern stattdessen solange auf einen freien Speicherbereich geschrieben, bis der gesamte Speicher voll ist. Die Anwendung muss also bevor neue Daten geschrieben werden k\u00f6nnen, zuerst den Speicher auslesen um einen freie Stelle zu finden. Die Daten beinhalten eine CRC (cyclic redundancy check) welche \u00fcber den kompletten Datensatz (mit Ausnahme der CRC selber) gerechnet wurde. Berechnet nun die Anwendung die CRC \u00fcber den gerade geschriebenen Speicherbereich und vergleicht diese mit der geschriebenen CRC auf dem Flash, wird die Anwendung feststellen, dass die CRCs nicht identisch sind.<\/p>\n<p>Bei der Berechnung der CRC ergibt sich in diesem Beispiel folgendes Problem: Bei der Suche nach einem freien Speicherplatz wurde der Mikrocontrollerflash zun\u00e4chst gelesen. Die Daten wurden daf\u00fcr zun\u00e4chst in den Cache \u00fcbertragen. Da die Adressen, an denen die Daten gespeichert wurden, nun zumindest teilweise im Cache vorhanden sind, wird die CPU versuchen bei der Berechnung der CRC m\u00f6glichst viele Daten aus dem Cache zu lesen. Die Daten im Cache sind allerdings zu diesem Zeitpunkt nicht mehr aktuell, da der Flashcontroller bereits die entsprechenden Adressen beschrieben hat. Aus diesem Grund kann die Anwendung die korrekte CRC nicht berechnen.<br \/>\n<div class=\"table-scrollable\">\r\n<table style=\"min-width: 300px;\">\r\n<tbody>\r\n<tr>\r\n<td colspan=\"2\" bgcolor=\"#FFFFFF\">\r\n<h4><center><strong>Ihr Ansprechpartner:<\/strong><\/center><\/h4>\r\n<\/td>\r\n<\/tr>\r\n<tr>\r\n<td style=\"text-align: center;\" bgcolor=\"#f9f9f9\"><strong><span style=\"color: #2c2ccc;\">M.Sc. Bj\u00f6rn Schmitz<\/span><\/strong><span style=\"color: #2c2ccc;\">, Software Entwickler<\/span> <br \/>E-Mail: <a href=\"mailto:schmitz@medtech-ingenieur.de\">schmitz@medtech-ingenieur.de<\/a> <br \/>Tel.:\u00a0\u00a0<a href=\"tel:+499131691240\">+49 9131 691 240<\/a><\/td>\r\n<td style=\"background-image: url('https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2015\/02\/Bj%C3%B6rnSchmitz-150x150.jpg'); background-repeat: no-repeat; background-position: top; background-size: cover;\" bgcolor=\"#f9f9f9\" width=\"70px\">\u00a0<\/td>\r\n<\/tr>\r\n<tr>\r\n<td colspan=\"2\" bgcolor=\"#FFFFFF\">\r\n<center><p>Ben\u00f6tigen Sie Unterst\u00fctzung bei der Entwicklung Ihres Medizinger\u00e4ts? Wir helfen gerne! Die MEDtech Ingenieur GmbH bietet Hardware-Entwicklung, Software-Entwicklung, Systems Engineering, Mechanik-Entwicklung und Beratung aus einer Hand. Nehmen Sie Kontakt mit uns auf.<\/p>\r\n<center><a class=\"large blue button\" href=\"https:\/\/medtech-ingenieur.de\/kontakt\/\">Kontakt aufnehmen<\/a><\/center><br\/><\/center>\r\n<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div><br \/>\nDie Abbildung unten zeigt (vereinfacht) die Implementierung der Caches beim PIC32MZ. Die Abbildung wurde dem Microchip Application Note <em>AN1600<\/em> entnommen. DMA- und Flashcontroller wurden nachtr\u00e4glich farbig markiert. Wie in der Abbildung zu erkennen ist, schreiben diese v\u00f6llig unabh\u00e4ngig vom Cache Daten auf den Flash. So kann es passieren, dass Daten im RAM oder im Flash aktueller sind als Daten im Cache. Au\u00dferdem k\u00f6nnte es prinzipiell passieren, das Daten welche mit DMA auf den RAM geschrieben wurden, anschlie\u00dfend bei einem Cache <em>flush<\/em> \u00fcberschrieben werden.<\/p>\n<figure id=\"attachment_961\" aria-describedby=\"caption-attachment-961\" style=\"width: 596px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2017\/11\/PIC32MZ-Cache-Implementierung-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-961\" src=\"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2017\/11\/PIC32MZ-Cache-Implementierung-1-289x300.png\" alt=\"\" width=\"596\" height=\"619\" srcset=\"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2017\/11\/PIC32MZ-Cache-Implementierung-1-289x300.png 289w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2017\/11\/PIC32MZ-Cache-Implementierung-1-768x796.png 768w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2017\/11\/PIC32MZ-Cache-Implementierung-1-100x104.png 100w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2017\/11\/PIC32MZ-Cache-Implementierung-1-150x155.png 150w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2017\/11\/PIC32MZ-Cache-Implementierung-1-200x207.png 200w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2017\/11\/PIC32MZ-Cache-Implementierung-1-300x311.png 300w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2017\/11\/PIC32MZ-Cache-Implementierung-1-450x466.png 450w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2017\/11\/PIC32MZ-Cache-Implementierung-1-600x622.png 600w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2017\/11\/PIC32MZ-Cache-Implementierung-1.png 827w\" sizes=\"auto, (max-width: 596px) 100vw, 596px\" \/><\/a><figcaption id=\"caption-attachment-961\" class=\"wp-caption-text\">Cache Implementierung beim PIC32MZ. Quelle: <em>Microchip Applicaiton Note AN1600 &#8211; Using L1 Cache on PIC32MZ Devices<\/em><\/figcaption><\/figure>\n<p>&nbsp;<\/p>\n<p>Um dies zu verhindern, hat der Programmierer mehrere M\u00f6glichkeiten. Eine M\u00f6glichkeit w\u00e4re es ein Softwarereset nach jedem Schreibvorgang durchzuf\u00fchren. Nach einem Neustart ist der Cache leer und muss daher neu geladen werden. Diese M\u00f6glichkeit ist in der Regel nat\u00fcrlich nicht praktikabel.<\/p>\n<p>Sinnvoller w\u00e4re es nach jedem Schreibvorgang auf dem Flash eine Cache<em> invalidation<\/em> durchzuf\u00fchren, die geschriebenen Adressen also als \u201eung\u00fcltig\u201c zu erkl\u00e4ren. So m\u00fcssen die entsprechenden Adressen beim n\u00e4chsten Lesevorgang neu gecached werden. Vor jedem DMA Transfer sollte ein Cache <em>flush <\/em>durchgef\u00fchrt werden. Hierbei wird der Cache geleert und die gegenw\u00e4rtig gecachten Daten werden auf den RAM zur\u00fcckgeschrieben. So kann sichergestellt werden, dass wirklich nur aktuelle Daten durch den DMA \u00fcbertragen werden. Mit Cache <em>flush<\/em> und Cache <em>invalidation<\/em> lassen sich schon die meisten Probleme l\u00f6sen. Wichtig ist allerdings, dass beides vor dem Schreibvorgang passiert. W\u00fcrde die Anwendung auf das Ende eines Flashzugriffs warten und anschlie\u00dfend eine Cache <em>invalidation<\/em> ausf\u00fchren, k\u00f6nnten bei einem Kontextwechsel veraltete Daten aus dem Cache gelesen werden. So ein Kontextwechsel k\u00f6nnte zum Beispiel durch einen Interrupt erfolgen.<\/p>\n<p>Eine M\u00f6glichkeit grunds\u00e4tzlich zu verhindern, und gleichzeitig Cache <em>invalidation<\/em> und Cache <em>flush<\/em> \u2013 welche ggf. \u00fcberfl\u00fcssig seien k\u00f6nnen \u2013 zu vermeiden, ist es Daten direkt in einem Bereich abzulegen, welche nicht gecached werden. Der PIC32MZ bietet hierf\u00fcr zwei virtuell getrennte Adressr\u00e4ume an, von denen einer gecached und einer nicht gecached wird. Dies ist im Bild weiter unten dargestellt, welches dem PIC32MZ Datenblatt entnommen wurde. Wie zu erkennen ist, teilen sich die Adressbereiche KSEG0 und KSEG1 den gleichen physikalischen Adressraum und decken jeweils den kompletten Flash und den kompletten RAM ab. W\u00e4hrend Daten in KSEG0 jedoch gecached werden, werden Daten in KSEG1 nicht gecached. Es ist also m\u00f6glich, durch geeignete Adressierung, ein Cachen von Daten zu verhindern. Um den Code lesbarer zu gestalten, ist es m\u00f6glich Daten direkt im KSEG1 Bereich anzulegen (standardm\u00e4\u00dfig werden Daten auf dem RAM in KSEG0 angelegt). Schreibt man:<\/p>\n<p>uint32_t _attribute__((coherent)) dataBuffer[100];<\/p>\n<p>wird das Array \u201cdataBuffer\u201c in KSEG1 angelegt. DMA Transfers aus oder in das Array k\u00f6nnen demnach gefahrlos durchgef\u00fchrt werden. Werden Daten vom Flash gelesen kann deren physikalische Adresse einfach in eine KSEG1 Adresse konvertiert werden, um zu verhindern, dass die Daten aus dem Cache gelesen werden.<\/p>\n<figure id=\"attachment_954\" aria-describedby=\"caption-attachment-954\" style=\"width: 469px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2017\/11\/Speicher-Pic32MZ.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-954\" src=\"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2017\/11\/Speicher-Pic32MZ-180x300.png\" alt=\"\" width=\"469\" height=\"782\" srcset=\"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2017\/11\/Speicher-Pic32MZ-180x300.png 180w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2017\/11\/Speicher-Pic32MZ-768x1279.png 768w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2017\/11\/Speicher-Pic32MZ-615x1024.png 615w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2017\/11\/Speicher-Pic32MZ-100x167.png 100w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2017\/11\/Speicher-Pic32MZ-150x250.png 150w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2017\/11\/Speicher-Pic32MZ-200x333.png 200w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2017\/11\/Speicher-Pic32MZ-300x500.png 300w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2017\/11\/Speicher-Pic32MZ-450x749.png 450w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2017\/11\/Speicher-Pic32MZ-600x999.png 600w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2017\/11\/Speicher-Pic32MZ.png 771w\" sizes=\"auto, (max-width: 469px) 100vw, 469px\" \/><\/a><figcaption id=\"caption-attachment-954\" class=\"wp-caption-text\">Speicherorganisation des PIC32MZ. Quelle: Datenblatt des PIC32 MZ, <em>PIC32MZ Embedded Connectivity with Floating Point Unit (EF) Family (DS60001320D)<\/em><\/figcaption><\/figure>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h3>Fazit<\/h3>\n<p>Caches auf Mikrocontrollern stellen heute keine Seltenheit mehr da. Neben Mikrocontrollern der PIC32MZ Serie verwenden diese auch Mikrocontroller, welche auf dem ARM Cortex-M7 basieren. Aus diesem Grund sollten sich heutzutage auch (oder vielleicht sogar vor allem) Embedded Entwickler mit der Funktionsweise von Caches auseinandersetzen. Trotz m\u00f6glicher Fehlerquellen bieten Caches auf einem Mikrocontroller viele Vorteile, da die Zugriffszeiten auf Daten und Programmspeicher deutlich reduziert werden kann.<\/p>\n<p>Die hier erkl\u00e4rten Methoden beziehen sich zwar alle auf den PIC32MZ, sind aber zum gr\u00f6\u00dften Teil auch auf andere Mikrocontroller mit Cache zu \u00fcbertragen. In der Regel stellen die Hersteller der Mikrocontroller Informationen dar\u00fcber zur Verf\u00fcgung, was bei Verwendung des Caches zu beachten ist. Analog zum oben bereits erw\u00e4hnten Application Note von Microchip, bietet zum Beispiel ST ein \u00e4hnliches Dokument an (AN4839, Level 1 cache on STM32F7 Series).<\/p>\n<p>Nat\u00fcrlich gibt es zum Thema Cache viel mehr Theorie als in diesen Blogeintrag passen w\u00fcrde. Aus diesem Grund sind einige Punkte sehr vereinfacht dargestellt. Neben Kommentaren freue ich mich daher auch \u00fcber Erg\u00e4nzungen zu meinem Text.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wir haben vor kurzem f\u00fcr einen Kunden eine Firmwareerweiterung programmiert, welche der Anwendung erm\u00f6glicht Daten auf dem Mikrocontrollerflash zu speichern und zu lesen. Die Firmware l\u00e4uft auf einem PIC32MZ, welcher mit einem Daten- und einem Instruktionscache ausgestattet ist. Wer schon mal versucht hat Software f\u00fcr einen PC mit Multi-Core CPU zu parallelisieren wei\u00df, dass die [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":3778,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,6],"tags":[18,20,21,19],"class_list":["post-951","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hardware-entwicklung","category-software","tag-cache","tag-microchip","tag-mikrocontroller","tag-pic","post-wrapper","thrv_wrapper"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Cache auf einem Mikrocontroller \u2013 Was es zu beachten gibt - MEDtech Ingenieur 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:\/\/medtech-ingenieur.de\/en\/cache-auf-einem-mikrocontroller-was-es-zu-beachten-gibt\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Cache auf einem Mikrocontroller \u2013 Was es zu beachten gibt - MEDtech Ingenieur GmbH\" \/>\n<meta property=\"og:description\" content=\"Wir haben vor kurzem f\u00fcr einen Kunden eine Firmwareerweiterung programmiert, welche der Anwendung erm\u00f6glicht Daten auf dem Mikrocontrollerflash zu speichern und zu lesen. Die Firmware l\u00e4uft auf einem PIC32MZ, welcher mit einem Daten- und einem Instruktionscache ausgestattet ist. Wer schon mal versucht hat Software f\u00fcr einen PC mit Multi-Core CPU zu parallelisieren wei\u00df, dass die [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/medtech-ingenieur.de\/en\/cache-auf-einem-mikrocontroller-was-es-zu-beachten-gibt\/\" \/>\n<meta property=\"og:site_name\" content=\"MEDtech Ingenieur GmbH\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/medtechIngenieur\" \/>\n<meta property=\"article:published_time\" content=\"2017-11-10T09:17:23+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-08-06T13:45:25+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2017\/11\/microchip-23313_960_720.png\" \/>\n\t<meta property=\"og:image:width\" content=\"819\" \/>\n\t<meta property=\"og:image:height\" content=\"720\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Bj\u00f6rn Schmitz\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@MedtechIng\" \/>\n<meta name=\"twitter:site\" content=\"@MedtechIng\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Bj\u00f6rn Schmitz\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/cache-auf-einem-mikrocontroller-was-es-zu-beachten-gibt\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/cache-auf-einem-mikrocontroller-was-es-zu-beachten-gibt\\\/\"},\"author\":{\"name\":\"Bj\u00f6rn Schmitz\",\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/#\\\/schema\\\/person\\\/d8d57dae1a037203802f980694210c96\"},\"headline\":\"Cache auf einem Mikrocontroller \u2013 Was es zu beachten gibt\",\"datePublished\":\"2017-11-10T09:17:23+00:00\",\"dateModified\":\"2021-08-06T13:45:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/cache-auf-einem-mikrocontroller-was-es-zu-beachten-gibt\\\/\"},\"wordCount\":1218,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/cache-auf-einem-mikrocontroller-was-es-zu-beachten-gibt\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/medtech-ingenieur.de\\\/wp-content\\\/uploads\\\/2017\\\/11\\\/microchip-23313_960_720.png\",\"keywords\":[\"Cache\",\"Microchip\",\"Mikrocontroller\",\"Pic\"],\"articleSection\":[\"Hardware\",\"Software\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/medtech-ingenieur.de\\\/cache-auf-einem-mikrocontroller-was-es-zu-beachten-gibt\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/cache-auf-einem-mikrocontroller-was-es-zu-beachten-gibt\\\/\",\"url\":\"https:\\\/\\\/medtech-ingenieur.de\\\/cache-auf-einem-mikrocontroller-was-es-zu-beachten-gibt\\\/\",\"name\":\"Cache auf einem Mikrocontroller \u2013 Was es zu beachten gibt - MEDtech Ingenieur GmbH\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/cache-auf-einem-mikrocontroller-was-es-zu-beachten-gibt\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/cache-auf-einem-mikrocontroller-was-es-zu-beachten-gibt\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/medtech-ingenieur.de\\\/wp-content\\\/uploads\\\/2017\\\/11\\\/microchip-23313_960_720.png\",\"datePublished\":\"2017-11-10T09:17:23+00:00\",\"dateModified\":\"2021-08-06T13:45:25+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/cache-auf-einem-mikrocontroller-was-es-zu-beachten-gibt\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/medtech-ingenieur.de\\\/cache-auf-einem-mikrocontroller-was-es-zu-beachten-gibt\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/cache-auf-einem-mikrocontroller-was-es-zu-beachten-gibt\\\/#primaryimage\",\"url\":\"https:\\\/\\\/medtech-ingenieur.de\\\/wp-content\\\/uploads\\\/2017\\\/11\\\/microchip-23313_960_720.png\",\"contentUrl\":\"https:\\\/\\\/medtech-ingenieur.de\\\/wp-content\\\/uploads\\\/2017\\\/11\\\/microchip-23313_960_720.png\",\"width\":819,\"height\":720},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/cache-auf-einem-mikrocontroller-was-es-zu-beachten-gibt\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\\\/\\\/medtech-ingenieur.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Cache auf einem Mikrocontroller \u2013 Was es zu beachten gibt\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/#website\",\"url\":\"https:\\\/\\\/medtech-ingenieur.de\\\/\",\"name\":\"MEDtech Ingenieur GmbH\",\"description\":\"Ingenieursdienstleister f\u00fcr Medizintechnik\",\"publisher\":{\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/#organization\"},\"alternateName\":\"MEDtech\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/medtech-ingenieur.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/#organization\",\"name\":\"MEDtech Ingenieur\",\"alternateName\":\"MEDtech\",\"url\":\"https:\\\/\\\/medtech-ingenieur.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/medtech-ingenieur.de\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/logo-700x700-1.png\",\"contentUrl\":\"https:\\\/\\\/medtech-ingenieur.de\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/logo-700x700-1.png\",\"width\":700,\"height\":700,\"caption\":\"MEDtech Ingenieur\"},\"image\":{\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/medtechIngenieur\",\"https:\\\/\\\/x.com\\\/MedtechIng\",\"https:\\\/\\\/www.instagram.com\\\/medtech.ingenieure\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/37871229\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/#\\\/schema\\\/person\\\/d8d57dae1a037203802f980694210c96\",\"name\":\"Bj\u00f6rn Schmitz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/220b9f0a28245f1734df66dc6a1279c867b612a6f80e83450554b93475740ff1?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/220b9f0a28245f1734df66dc6a1279c867b612a6f80e83450554b93475740ff1?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/220b9f0a28245f1734df66dc6a1279c867b612a6f80e83450554b93475740ff1?s=96&d=mm&r=g\",\"caption\":\"Bj\u00f6rn Schmitz\"},\"description\":\"Seit Juli 2017 geh\u00f6re ich zum MEDtech-Ingenieur Team und bin hier vor allem als Firmwareentwickler t\u00e4tig. Schon in k\u00fcrzester Zeit konnte ich an vielen spannenden Projekten aus dem Bereich Medizintechnik, aber auch aus anderen Bereichen mitwirken.\",\"sameAs\":[\"https:\\\/\\\/www.medtech-ingenieur.de\"],\"url\":\"https:\\\/\\\/medtech-ingenieur.de\\\/en\\\/author\\\/bjoern\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Cache auf einem Mikrocontroller \u2013 Was es zu beachten gibt - MEDtech Ingenieur 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:\/\/medtech-ingenieur.de\/en\/cache-auf-einem-mikrocontroller-was-es-zu-beachten-gibt\/","og_locale":"en_US","og_type":"article","og_title":"Cache auf einem Mikrocontroller \u2013 Was es zu beachten gibt - MEDtech Ingenieur GmbH","og_description":"Wir haben vor kurzem f\u00fcr einen Kunden eine Firmwareerweiterung programmiert, welche der Anwendung erm\u00f6glicht Daten auf dem Mikrocontrollerflash zu speichern und zu lesen. Die Firmware l\u00e4uft auf einem PIC32MZ, welcher mit einem Daten- und einem Instruktionscache ausgestattet ist. Wer schon mal versucht hat Software f\u00fcr einen PC mit Multi-Core CPU zu parallelisieren wei\u00df, dass die [&hellip;]","og_url":"https:\/\/medtech-ingenieur.de\/en\/cache-auf-einem-mikrocontroller-was-es-zu-beachten-gibt\/","og_site_name":"MEDtech Ingenieur GmbH","article_publisher":"https:\/\/www.facebook.com\/medtechIngenieur","article_published_time":"2017-11-10T09:17:23+00:00","article_modified_time":"2021-08-06T13:45:25+00:00","og_image":[{"width":819,"height":720,"url":"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2017\/11\/microchip-23313_960_720.png","type":"image\/png"}],"author":"Bj\u00f6rn Schmitz","twitter_card":"summary_large_image","twitter_creator":"@MedtechIng","twitter_site":"@MedtechIng","twitter_misc":{"Written by":"Bj\u00f6rn Schmitz","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/medtech-ingenieur.de\/cache-auf-einem-mikrocontroller-was-es-zu-beachten-gibt\/#article","isPartOf":{"@id":"https:\/\/medtech-ingenieur.de\/cache-auf-einem-mikrocontroller-was-es-zu-beachten-gibt\/"},"author":{"name":"Bj\u00f6rn Schmitz","@id":"https:\/\/medtech-ingenieur.de\/#\/schema\/person\/d8d57dae1a037203802f980694210c96"},"headline":"Cache auf einem Mikrocontroller \u2013 Was es zu beachten gibt","datePublished":"2017-11-10T09:17:23+00:00","dateModified":"2021-08-06T13:45:25+00:00","mainEntityOfPage":{"@id":"https:\/\/medtech-ingenieur.de\/cache-auf-einem-mikrocontroller-was-es-zu-beachten-gibt\/"},"wordCount":1218,"commentCount":0,"publisher":{"@id":"https:\/\/medtech-ingenieur.de\/#organization"},"image":{"@id":"https:\/\/medtech-ingenieur.de\/cache-auf-einem-mikrocontroller-was-es-zu-beachten-gibt\/#primaryimage"},"thumbnailUrl":"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2017\/11\/microchip-23313_960_720.png","keywords":["Cache","Microchip","Mikrocontroller","Pic"],"articleSection":["Hardware","Software"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/medtech-ingenieur.de\/cache-auf-einem-mikrocontroller-was-es-zu-beachten-gibt\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/medtech-ingenieur.de\/cache-auf-einem-mikrocontroller-was-es-zu-beachten-gibt\/","url":"https:\/\/medtech-ingenieur.de\/cache-auf-einem-mikrocontroller-was-es-zu-beachten-gibt\/","name":"Cache auf einem Mikrocontroller \u2013 Was es zu beachten gibt - MEDtech Ingenieur GmbH","isPartOf":{"@id":"https:\/\/medtech-ingenieur.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/medtech-ingenieur.de\/cache-auf-einem-mikrocontroller-was-es-zu-beachten-gibt\/#primaryimage"},"image":{"@id":"https:\/\/medtech-ingenieur.de\/cache-auf-einem-mikrocontroller-was-es-zu-beachten-gibt\/#primaryimage"},"thumbnailUrl":"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2017\/11\/microchip-23313_960_720.png","datePublished":"2017-11-10T09:17:23+00:00","dateModified":"2021-08-06T13:45:25+00:00","breadcrumb":{"@id":"https:\/\/medtech-ingenieur.de\/cache-auf-einem-mikrocontroller-was-es-zu-beachten-gibt\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/medtech-ingenieur.de\/cache-auf-einem-mikrocontroller-was-es-zu-beachten-gibt\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/medtech-ingenieur.de\/cache-auf-einem-mikrocontroller-was-es-zu-beachten-gibt\/#primaryimage","url":"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2017\/11\/microchip-23313_960_720.png","contentUrl":"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2017\/11\/microchip-23313_960_720.png","width":819,"height":720},{"@type":"BreadcrumbList","@id":"https:\/\/medtech-ingenieur.de\/cache-auf-einem-mikrocontroller-was-es-zu-beachten-gibt\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/medtech-ingenieur.de\/"},{"@type":"ListItem","position":2,"name":"Cache auf einem Mikrocontroller \u2013 Was es zu beachten gibt"}]},{"@type":"WebSite","@id":"https:\/\/medtech-ingenieur.de\/#website","url":"https:\/\/medtech-ingenieur.de\/","name":"MEDtech Ingenieur GmbH","description":"Engineering service provider for medical technology","publisher":{"@id":"https:\/\/medtech-ingenieur.de\/#organization"},"alternateName":"MEDtech","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/medtech-ingenieur.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/medtech-ingenieur.de\/#organization","name":"MEDtech Engineer","alternateName":"MEDtech","url":"https:\/\/medtech-ingenieur.de\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/medtech-ingenieur.de\/#\/schema\/logo\/image\/","url":"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2024\/01\/logo-700x700-1.png","contentUrl":"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2024\/01\/logo-700x700-1.png","width":700,"height":700,"caption":"MEDtech Ingenieur"},"image":{"@id":"https:\/\/medtech-ingenieur.de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/medtechIngenieur","https:\/\/x.com\/MedtechIng","https:\/\/www.instagram.com\/medtech.ingenieure\/","https:\/\/www.linkedin.com\/company\/37871229\/"]},{"@type":"Person","@id":"https:\/\/medtech-ingenieur.de\/#\/schema\/person\/d8d57dae1a037203802f980694210c96","name":"Bj\u00f6rn Schmitz","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/220b9f0a28245f1734df66dc6a1279c867b612a6f80e83450554b93475740ff1?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/220b9f0a28245f1734df66dc6a1279c867b612a6f80e83450554b93475740ff1?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/220b9f0a28245f1734df66dc6a1279c867b612a6f80e83450554b93475740ff1?s=96&d=mm&r=g","caption":"Bj\u00f6rn Schmitz"},"description":"I&#039;ve been part of the MEDtech engineering team since July 2017, primarily working as a firmware developer. In a very short time, I&#039;ve been able to work on many exciting projects in the medical technology field, as well as in other areas.","sameAs":["https:\/\/www.medtech-ingenieur.de"],"url":"https:\/\/medtech-ingenieur.de\/en\/author\/bjoern\/"}]}},"_links":{"self":[{"href":"https:\/\/medtech-ingenieur.de\/en\/wp-json\/wp\/v2\/posts\/951","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/medtech-ingenieur.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/medtech-ingenieur.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/medtech-ingenieur.de\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/medtech-ingenieur.de\/en\/wp-json\/wp\/v2\/comments?post=951"}],"version-history":[{"count":14,"href":"https:\/\/medtech-ingenieur.de\/en\/wp-json\/wp\/v2\/posts\/951\/revisions"}],"predecessor-version":[{"id":5872,"href":"https:\/\/medtech-ingenieur.de\/en\/wp-json\/wp\/v2\/posts\/951\/revisions\/5872"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/medtech-ingenieur.de\/en\/wp-json\/wp\/v2\/media\/3778"}],"wp:attachment":[{"href":"https:\/\/medtech-ingenieur.de\/en\/wp-json\/wp\/v2\/media?parent=951"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/medtech-ingenieur.de\/en\/wp-json\/wp\/v2\/categories?post=951"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/medtech-ingenieur.de\/en\/wp-json\/wp\/v2\/tags?post=951"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}