{"id":404,"date":"2026-07-12T12:04:05","date_gmt":"2026-07-12T12:04:05","guid":{"rendered":"https:\/\/straehl-engineering.ch\/?page_id=404"},"modified":"2026-07-12T12:13:59","modified_gmt":"2026-07-12T12:13:59","slug":"baremetal-task-scheduler","status":"publish","type":"page","link":"https:\/\/straehl-engineering.ch\/?page_id=404","title":{"rendered":"BareMetal Task Scheduler"},"content":{"rendered":"\n<h2 class=\"wp-block-heading is-style-text-subtitle is-style-text-subtitle--1\">Statische Tasks<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Statische Tasks werden in einem Array als Konstante definiert. Jeder Eintrag enth\u00e4lt eine init Funktion, eine Main-Loop Funktion und den Tasknamen f\u00fcr die Darstellung in Statistiken.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Dynamische Tasks<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Genau so sind die dynamischen Tasks definiert. Eine konfigurierbare Anzahl von Tasks k\u00f6nnen in einem dynamischen Array im RAM hinzugef\u00fcgt oder entfernt werden. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ein typisches Beispiel eines dynamischen Tasks w\u00e4re, das im Hintergrund Speichern von Daten in einem EEPROM. Der Task kann sich selber l\u00f6schen, wenn das Flaschen beendet wurde.<\/p>\n\n\n<!-- Task Scheduler Grafik mit interaktiven Effekten -->\n<div class=\"scheduler-container\">\n    <figure class=\"wp-block-image size-full custom-interactive-img\">\n        <img loading=\"lazy\" decoding=\"async\" width=\"880\" height=\"480\" src=\"https:\/\/straehl-engineering.ch\/wp-content\/uploads\/2026\/07\/K640_BareMetalTaskSchedulerGemini_Generated_Image_TaskScheduler.jpg\" \n             alt=\"Bare-Metal Task Scheduler Architektur\" \n             class=\"wp-image-405\" \n             onclick=\"openSchedulerLightbox(this.src)\"\n             oncontextmenu=\"return false;\" srcset=\"https:\/\/straehl-engineering.ch\/wp-content\/uploads\/2026\/07\/K640_BareMetalTaskSchedulerGemini_Generated_Image_TaskScheduler.jpg 880w, https:\/\/straehl-engineering.ch\/wp-content\/uploads\/2026\/07\/K640_BareMetalTaskSchedulerGemini_Generated_Image_TaskScheduler-300x164.jpg 300w, https:\/\/straehl-engineering.ch\/wp-content\/uploads\/2026\/07\/K640_BareMetalTaskSchedulerGemini_Generated_Image_TaskScheduler-768x419.jpg 768w\" sizes=\"auto, (max-width: 880px) 100vw, 880px\" \/>\n    <\/figure>\n<\/div>\n\n<!-- Lightbox Pop-up (F\u00fcr maximale Bildgr\u00f6\u00dfe optimiert) -->\n<div id=\"schedulerLightbox\" class=\"scheduler-lightbox\" onclick=\"closeSchedulerLightbox()\" oncontextmenu=\"return false;\">\n    <span class=\"lightbox-close\">&times;<\/span>\n    <div class=\"lightbox-scroll-container\">\n        <img class=\"lightbox-content\" id=\"lightboxImg\">\n    <\/div>\n<\/div>\n\n<!-- Styling f\u00fcr Effekte und maximale Lightbox-Gr\u00f6\u00dfe -->\n<style>\n\/* 1. Mouse-Over Effekt auf der Homepage *\/\n.custom-interactive-img img {\n    transition: transform 0.3s ease, box-shadow 0.3s ease;\n    cursor: zoom-in;\n    -webkit-user-drag: none;\n    user-select: none;\n}\n\n.custom-interactive-img img:hover {\n    transform: scale(1.02);\n    box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);\n}\n\n\/* 2. Lightbox Pop-up Styling (Maximale Ausnutzung) *\/\n.scheduler-lightbox {\n    display: none;\n    position: fixed;\n    z-index: 99999;\n    left: 0;\n    top: 0;\n    width: 100%;\n    height: 100%;\n    background-color: rgba(10, 15, 20, 0.92); \/* Dunkler, edler Hintergrund *\/\n    backdrop-filter: blur(8px);\n    opacity: 0;\n    transition: opacity 0.25s ease;\n}\n\n.scheduler-lightbox.show {\n    display: block;\n    opacity: 1;\n}\n\n\/* Scroll-Container, falls das Bild breiter als der Monitor ist *\/\n.lightbox-scroll-container {\n    width: 100%;\n    height: 100%;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    overflow: auto;\n    padding: 20px;\n    box-sizing: border-box;\n}\n\n\/* Das Bild darf sich nun voll entfalten (wie bei den Stack-Grafiken) *\/\n.lightbox-content {\n    max-width: 98%; \/* Nutzt nahezu die gesamte Bildschirmbreite *\/\n    max-height: 92vh; \/* Verhindert das Abschneiden in der H\u00f6he *\/\n    width: auto;\n    height: auto;\n    object-fit: contain;\n    border-radius: 4px;\n    box-shadow: 0 10px 40px rgba(0,0,0,0.7);\n    transform: scale(0.95);\n    transition: transform 0.25s ease;\n}\n\n.scheduler-lightbox.show .lightbox-content {\n    transform: scale(1);\n}\n\n\/* Schlie\u00dfen-Button (X) *\/\n.lightbox-close {\n    position: fixed;\n    top: 20px;\n    right: 35px;\n    color: #fff;\n    font-size: 45px;\n    font-weight: 300;\n    cursor: pointer;\n    z-index: 100000;\n    transition: color 0.2s, transform 0.2s;\n}\n\n.lightbox-close:hover {\n    color: #007acc; \/* Akzentfarbe beim Hovern des X *\/\n    transform: scale(1.1);\n}\n\n\/* Optimierung f\u00fcr mobile Ger\u00e4te *\/\n@media (max-width: 768px) {\n    .lightbox-scroll-container {\n        align-items: flex-start; \/* Erlaubt sauberes Scrollen auf Smartphones *\/\n    }\n    .lightbox-content {\n        max-width: 140%; \/* Erlaubt leichtes Hineinzoomen auf Mobilger\u00e4ten *\/\n        width: 140%;\n    }\n    .lightbox-close {\n        top: 10px;\n        right: 20px;\n        font-size: 40px;\n    }\n}\n<\/style>\n\n<!-- JavaScript f\u00fcr die Steuerung -->\n<script>\nfunction openSchedulerLightbox(src) {\n    var lightbox = document.getElementById(\"schedulerLightbox\");\n    var lightboxImg = document.getElementById(\"lightboxImg\");\n    lightboxImg.src = src;\n    lightbox.classList.add(\"show\");\n    document.body.style.overflow = \"hidden\"; \/* Hintergrund-Scrollen deaktivieren *\/\n}\n\nfunction closeSchedulerLightbox() {\n    var lightbox = document.getElementById(\"schedulerLightbox\");\n    lightbox.classList.remove(\"show\");\n    document.body.style.overflow = \"auto\"; \/* Hintergrund-Scrollen aktivieren *\/\n}\n\n\/\/ Schlie\u00dfen mit der ESC-Taste\ndocument.addEventListener('keydown', function(e) {\n    if (e.key === 'Escape') {\n        closeSchedulerLightbox();\n    }\n});\n<\/script>\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Statische Tasks Statische Tasks werden in einem Array als Konstante definiert. Jeder Eintrag enth\u00e4lt eine init Funktion, eine Main-Loop Funktion und den Tasknamen f\u00fcr die Darstellung in Statistiken. Dynamische Tasks Genau so sind die dynamischen Tasks definiert. Eine konfigurierbare Anzahl von Tasks k\u00f6nnen in einem dynamischen Array im RAM hinzugef\u00fcgt oder entfernt werden. Ein typisches [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-404","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/straehl-engineering.ch\/index.php?rest_route=\/wp\/v2\/pages\/404","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/straehl-engineering.ch\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/straehl-engineering.ch\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/straehl-engineering.ch\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/straehl-engineering.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=404"}],"version-history":[{"count":3,"href":"https:\/\/straehl-engineering.ch\/index.php?rest_route=\/wp\/v2\/pages\/404\/revisions"}],"predecessor-version":[{"id":408,"href":"https:\/\/straehl-engineering.ch\/index.php?rest_route=\/wp\/v2\/pages\/404\/revisions\/408"}],"wp:attachment":[{"href":"https:\/\/straehl-engineering.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=404"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}