Kérdés:
Miért van óra az arduinomban?
n0tis
2016-02-04 18:00:14 UTC
view on stackexchange narkive permalink

Természetesen tudom, hogy hasznos a késés idejének szabályozása, de van-e más felhasználás?

16 MHz-es órával a programom minden sora 1/16000000 másodpercet vesz igénybe, igaz?

még egy nagyon-nagyon nagy sor is csak 1/16000000 másodpercet vesz igénybe?

8MHz-es órával minden sor az idő dupláját veszi igénybe, igaz? Tehát az egész "fő hurok" is kétszeres időt vesz igénybe, igaz?

Összekevered a C utasításokat és a gépi (összeszerelési) utasításokat. De még ha közvetlenül az összeállításban is írtál, ennek jó hasznát találhatod, mert a program NEM lineáris. Úgy értem, megszakítja, ahogy a neve is sugallja, megszakítja a normál kódfolyamot egy másik utasítás végrehajtásával, majd folytatja. Tehát talán az egyik és a következő sor között kénytelen végrehajtani az ISR-t, ami nagyon hosszú lehet
Ha a chipjét nyolc milliherczen állítja be, akkor a legegyszerűbb kódsor is örökké tart. Azt javaslom, hogy használjon egy órát a ** mega ** hertz tartományban (MHz).
Az egyes gépi utasítások végrehajtásához szükséges ciklusok számát az [Instruction Set Manual] tartalmazza (http://www.atmel.com/images/atmel-0856-avr-instruction-set-manual.pdf).
Rohadtul mennem kellene aludni;), szerkesztve köszönöm
Kettő válaszokat:
Majenko
2016-02-04 18:19:51 UTC
view on stackexchange narkive permalink

Miért van óra az arduinomban?

Mert így működnek a számítógépek és mikrovezérlők stb.

Egy 16 MHz-es óra, a programom minden sora 1/16000000 másodpercet vesz igénybe, igaz?

Nem.

még egy nagyon nagyon nagy sor is csak 1 / 16000000 másodperc?

Nem.

Az óra meghatározza, hogy a gépi kód utasításai milyen sebességgel kerülnek letöltésre és végrehajtásra. A legtöbb utasítás 1 órás ciklust vesz igénybe, de néhány további időt is igénybe vesz.

A C kód egy sora tetszőleges számú szerelési utasításba állítható össze, amelyek aztán konvertálódnak gépi kódokká (nyers számok). Ez lehet 1 szerelési útmutatótól a több ezer szerelési utasításig, attól függően, hogy a vonal mit csinál.

8mhz-es órával minden sor az idő dupláját veszi igénybe, igaz? Tehát az egész "főhurok" is kétszeres időt vesz igénybe, igaz?

A chip minden műveletét az óra vezérli. Ha az óra a sebesség fele, akkor a chip fele sebességgel működik, így minden művelet kétszer annyi időt vesz igénybe, igen.

is megszakítja.
Kisebb nitpick: "... bárhol 0 szerelési útmutatótól ..." legyen, még optimalizáló nélkül is, de még inkább optimalizálás után.
Ne keverd össze a szegény fiút. Elég nehéz dolga van, ahogy van.
@Majenko: a zavart szükségszerűség. Ez nehéz.
@intelfx "IT"? Ez a programozás, nem az informatika ....
@BalinKingOfMoria: FYI. a rendszerek programozása az informatika szigorú részhalmaza :)
@intelfx Utánanézett, igazad van ... Tanulj valami újat minden nap! Köszönöm :)
AMADANON Inc.
2016-02-05 03:12:07 UTC
view on stackexchange narkive permalink

Nem válaszolt @ Majenko bejegyzésében: Igen, 8MHz-es órával minden sor az idő dupláját veszi igénybe. Kivéve, ha a vonal olyasmire vár, ami nem óra vezérelt - pl. külső bemenet.

A @ Majenko válasz mellett a CPU-nak van egy órája is, amely biztosítja az utasítások teljes körűségét, még a következő lépés megkezdése előtt. A CPU sok tranzisztorból áll (találtam egy referenciát, amely azt jelezte, hogy az AtMega az alacsony millió közötti tartományban van, adjon vagy vegyen nagyságrendet).

Egy ciklus alatt az áram átáramlik a chipen, be- és kikapcsolva a tranzisztorokat, ennek eredményeként több tranzisztort kapcsol be / ki, és így tovább a vonalon. Amíg ez megtörténik, a chip egyes részei "rossz" értékkel bírnak - ezt úgy gondolhatja, hogy a számítás felénél tart (hozzáadta az egy oszlopot és a 10-es oszlopot, és hamarosan elindul a 100-as oszlop). Nem akarja, hogy ez befolyásolja a külvilágot, ezért (például) a kimeneti csapok reteszelődnek - bármilyen értéken tartják őket -, amíg az utasítás nem fejeződik be. Az utasítás kitöltése mennyi időbe telik, de a legrosszabb körülmények között a gyártó dolgozza ki a leglassabb utasítást.

Az AtMega (amely az Arduino lapkája) esetében Atmel (aki a chipet tervezte) kijelentette, hogy ez 1/20 000 000 másodperc - ez 20 MHz.

Ne feledje, hogy nem minden mikroprocesszor hajtja végre az összes utasítást ciklusonként egy utasítással - egyes utasítások 1, 2 vagy 10 ciklust vehetnek igénybe. A csővezetékkezelés még bonyolultabbá teszi a dolgokat - egy processzor elvégezheti a munka egy részét (például beolvassa a következő utasítást) egy ciklusban, a következőben hajthatja végre - de amíg az 1. utasítást végrehajtja, a következő utasítást is be tudja szerezni. Ehhez esetleg kitalálnia kell, hogy melyik utasítás következik (a "goto" gépkód-ekvivalense esetén - ilyen a hurkoknál használatos), és ha rosszul tippel, akkor meg kell birkóznia hogy; dobja ki a lekérett utasítást, és keresse meg a következőt, elvesztve egy ciklust.

A Wikipedia oldalán az utasítások csővezetékéről egy példa látható egy RISC chip csövezésre 5 szakaszban - utasításletöltés , utasítás dekódolása, végrehajtása, memória hozzáférés és visszaírás. Tehát a végrehajtás bizonyos szakaszában 5 utasítással rendelkezhet, átfedésben. Az "írási" szakaszig az utasításoknak nincs valódi hatása. Gondolhat erre mint futószalagra - 7 percbe telik, amíg egy widgetet összeállít, de 5 szakaszra bontható, a leghosszabb szakasz 2 percet vesz igénybe. Két percenként minden egyes részben elkészült widgetet a futószalag a következő állomásra mozgat. Két percenként kap egy widgetet - Az "óra" csak olyan gyorsan pipálhat, mint a leglassabb lépés. Ha gyorsabban nyomja ki a modult, akkor a "szűk keresztmetszet" egyre több modult sorba állít.

Az AVR nagyon sekély vezetékkel rendelkezik: csak be kell tölteni és végrehajtani. Ezután a feltételes ugrások vagy egy ciklust (ugrást nem végeztek), vagy két ciklust (ugrás megtett) vesznek igénybe.
További bonyodalom: a gyorsítótár hiányzik.
Sok dolgot nem említettem: gyorsítótár (bármilyen típusú), többszálas, többmagos ... valószínűleg már túl mélyrehatóan elmélyültem a bejegyzésemben.


Ezt a kérdést és választ automatikusan lefordították angol nyelvről.Az eredeti tartalom elérhető a stackexchange oldalon, amelyet köszönünk az cc by-sa 3.0 licencért, amely alatt terjesztik.
Loading...