Deploying to gh-pages from @ Klipper3d/klipper@d3c4ba4839 🚀
This commit is contained in:
@@ -823,8 +823,8 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="Exclude_Object.md" class="md-nav__link">
|
||||
None
|
||||
<a href="Exclude_Object.html" class="md-nav__link">
|
||||
Objektumok kizárása
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@@ -1389,7 +1389,7 @@
|
||||
<h2 id="mikrokontroller-kodfolyamat">Mikrokontroller kódfolyamat<a class="headerlink" href="#mikrokontroller-kodfolyamat" title="Permanent link">¶</a></h2>
|
||||
<p>A mikrokontroller kódjának végrehajtása az architektúra specifikus kódban kezdődik (pl. <strong>src/avr/main.c</strong>), amely végül a <strong>src/sched.c</strong>-ban található sched_main() parancsot hívja meg. A sched_main() kód a DECL_INIT() makróval jelölt összes függvény futtatásával kezdődik. Ezután a DECL_TASK() makróval megjelölt függvények ismételt futtatására kerül sor.</p>
|
||||
<p>Az egyik fő feladatfüggvény a command_dispatch(), amely a <strong>src/command.c</strong> fájlban található. Ezt a függvényt a kártyaspecifikus bemeneti/kimeneti kódból (pl. <strong>src/avr/serial.c</strong>, <strong>src/generic/serial_irq.c</strong>) hívjuk meg, és a bemeneti folyamban található parancsokhoz tartozó parancsfüggvényeket futtatja. A parancsfüggvények deklarálása a DECL_COMMAND() makróval történik (további információkért lásd a <a href="Protocol.html">protokol</a> dokumentumot).</p>
|
||||
<p>A (task, init) és parancsfüggvények mindig engedélyezett megszakításokkal futnak (szükség esetén azonban ideiglenesen letilthatják a megszakításokat). Ezek a függvények soha nem tarthatnak szünetet, nem késleltethetnek, és nem végezhetnek olyan munkát, amely néhány mikroszekundumnál tovább tart. Ezek a függvények a munkát meghatározott időpontokra ütemezik időzítők segítségével.</p>
|
||||
<p>A feladat-, init- és parancsfüggvények mindig engedélyezett megszakításokkal futnak (szükség esetén azonban ideiglenesen letilthatják a megszakításokat). Ezeknek a függvényeknek kerülniük kell a hosszú szüneteket, késleltetéseket, vagy olyan munkát kell végezniük, amely jelentős ideig tart. (A hosszú késleltetések ezekben a "task" függvényekben más "taskok" ütemezési zavarát eredményezik. A 100us-nál hosszabb késleltetések észrevehetővé válhatnak, az 500us-nál hosszabb késleltetésű parancsok újraküldése, a 100ms-nál hosszabb késleltetések pedig watchdog újraindításokat eredményezhetnek.) Ezek a funkciók időzítőkkel ütemezik a munkát meghatározott időpontokra.</p>
|
||||
<p>Az időzítő függvények ütemezése a sched_add_timer() meghívásával történik (a <strong>src/sched.c</strong> fájlban található). Az ütemező kód gondoskodik arról, hogy az adott függvényt a kért időben hívja meg. Az időzítő megszakítások kezelése kezdetben egy architektúra-specifikus megszakításkezelőben történik (pl. <strong>src/avr/timer.c</strong>), amely a <strong>src/sched.c</strong>-ban található sched_timer_dispatch() funkciót hívja. Az időzítő megszakítása az ütemező időzítő függvények végrehajtásához vezet. Az időzítő függvények mindig megszakítások kikapcsolásával futnak. Az időzítőfüggvényeknek mindig néhány mikroszekundumon belül kell befejeződniük. Az időzítő esemény befejezésekor a függvény dönthet úgy, hogy átütemezi magát.</p>
|
||||
<p>Hiba észlelése esetén a kód meghívhatja a shutdown() funkciót (egy makró, amely a <strong>src/sched.c</strong>-ben található sched_shutdown() funkciót hívja). A shutdown() meghívása a DECL_SHUTDOWN() makróval jelölt összes függvény futtatását eredményezi. A leállítási függvények mindig megszakítások letiltásával futnak.</p>
|
||||
<p>A mikrokontroller funkcióinak nagy része az általános célú bemeneti/kimeneti érintkezőkkel (GPIO) való munkát foglalja magában. Annak érdekében, hogy az alacsony szintű architektúra specifikus kódot elvonatkoztassuk a magas szintű feladatkódtól, minden GPIO eseményt architektúra specifikus burkolatokban valósítunk meg (pl. <strong>src/avr/gpio.c</strong>). A kódot a gcc's "-flto -fwhole-program" optimalizálással fordítottuk, amely kiváló munkát végez a függvények sorolásában a fordítási egységeken keresztül, így a legtöbb ilyen apró GPIO függvény sorolva van a hívóikban, és nincs futásidejű költsége a használatuknak.</p>
|
||||
|
||||
Reference in New Issue
Block a user