Avr bootloader a kérdések és válaszok

Ahogy rakodó, hogy megbizonyosodjon arról, hogy a kérelem nem változik?

Újraindítás után, csomagtartó, általában teszi az átmenetet a kérelmet. De hogy lehet benne, hogy a kereset elfogadható, hogy a program megsérült, ami kell végrehajtani kezdeni? Mi történik, ha egy korábbi kísérlet, hogy frissítse a program összeomlik a közepén a letöltés? Ebben az esetben a sok lehetséges óvintézkedést, amit tehet. Íme néhány közülük:

Lehet egy bootloader kód futtatása beágyazott kód az alkalmazásban?

Azt mondják: „Nem, nem, természetesen nem 100% -os.”
Bár ez technikailag lehetséges, de a válasz mindig - „Nem”. A rendszerindító lesz sokkal megbízhatóbb, ha nulla az alkalmazástól függően. A fő cél a rakodó - törli, és programozza át az alkalmazást. Nem akarjuk, hogy a hívások alkalmazás kódját területeken, miközben törli annak tartalmát.
Bad gyakorlatban is tekinthető, hogy a kódot kapcsolódó rakodó a RWW részben. Nincs teljes bizonyítás eljárás, vagy védelmet a véletlen törlés ellen, és átprogramozása ezen a területen. Egy teljes törlés RWW és rakodó potenciálisan használhatatlanná válnak.

Tud-e a kérelem kódot kód végrehajtását épített bootloader?

Igen, ez elég egyszerű. Különösen, ha a kódot megosztása nem férnek hozzá a globális változók. Csak ne próbálja elérni a közös kód létrehozásával bootloader és az alkalmazás bináris fájlként. Ez a legjobb építeni őket külön-külön, és használja mutató a teljes funkció kódot.

Számos módja van, hogy állítsa be a folytatásban asztalra. Ez sokkal kényelmesebb be, mint egy külön kis összeállítási fájl:

Szükség lehet egy zászló, hogy megakadályozzák a linker próbálkozások, hogy dobja el az ugrás tábla, amikor nem piacképes. Ez akkor lehetséges, ha -ffunction-szakaszok fordító zászló együtt zászlókkal linker --gc-szakaszok és --relax. Ezért, ha nem biztos, hogy minden esetben, nem árt hozzá:

Miért globális változók nem állnak rendelkezésre az általános funkciója?

Mivel van két teljesen különböző bináris fájl, akkor minden lesz saját memória kiosztás. Pozíció globális változók alkalmazása semmilyen módon nem kapcsolódnak egymáshoz az álláspontok a globális változók
rakodó.
Tegyük fel, hogy a teljes funkcióját betöltő tévesen olvas és ír egy globális változót közvetlenül.
Ha a boot betöltő otlinkovan helyet a globális változók valójában nehéz volt kódolva a végrehajtható kódot. Amikor a rakodó lefut, a megfelelő helyzetben, és minden rendben. De amikor az alkalmazás elindításakor, ami ugyanaz a funkciója, mint az kódolva pozícióját a globális térben meglehetősen rossz. Ez létrehoz egy hibás helyzetet, hiszen amikor egy alkalmazás végrehajtása, a memória allokáció eltér az elosztó memória rakodó. Így nem lehet közvetlenül hozzáférni a globális változók a közös feladatokat anélkül, hogy a potenciális veszélyt a megsemmisítése az adatokat az alkalmazásban.

Ha valamilyen oknál fogva nem tudja átadni a paraméter a teljes funkció, lásd. Kérdés 17. szám alatti.

Lehet az IRS használni az alkalmazás beépített downloader?

Ezután meg kell adni obrabochik megszakítás az alkalmazásban. Ez a kezelő maga nem tesz semmit - elvégzi feltétel nélküli ugrást függvényében - megszakítás kezelő rakodó. Például:

Hogyan szervezzük hozzáférés globális adatok megosztott felvezető ISR?

Lehetséges, hogy helyet takaríthat meg a boot loader kezelhető felvezető ISR?

Igen, gyakran úgy, hogy mentheti 100 vagy több byte a bootloader. Ez vonatkozik a szokásos alkalmazások, de ezek a megtakarítások a rakodó jelentősebb, mint az alkalmazás. Egyes architektúrák AVR már 40 vagy több megszakítások, amelyek mindegyike megkapja a megszakítási vektort táblázata 4 byte. Akkor nemcsak jelentősen pénzt takarít meg, hanem, hogy újra fel nem használt vektor átmenetet az általános funkciók (tárgyalt kérdés számát 14).

Az első bejegyzés a megszakítás asztal - visszaáll vektor. Homlokrakodók és alkalmazások gyakran használják a reset vektor végrehajtható soha elejétől kezdődik a firmware-t. Még ha a reset vektor jelenleg nincs szükség, szükséges lehet a jövőben, például, miután valaki új változó PROGMEM. Tehát ahelyett, hogy teljesen eltávolítja megszakítás táblázat a rakodó, akkor jobb, csak azért, hogy csökkentsék azt. Minimum megszakítás táblázat felírható a következőképpen:

Ez a táblázat csak a reset vektor, amely függvénye __init környezetben a teljesítmény (ez valami, ami az alapértelmezett újraindítás vektor). Feltételezve, hogy a JMP helyettesíthető RJMP, mi megszakítási vektort a 2 byte-os. Add hozzá ezt a .s fájlt egy húr ASRC a Makefile.

A jobb módja, hogy lecseréli az alapértelmezett vektor tábla, hogy egy speciális linker script. Először is meg kell tanulni, mi történik linker script AVR. Elméletileg a linker script kell elnevezett AVR építészet. De kiderül, néha nem, tehát megtalálni a script akkor nevezd át a mappát, amely tartalmazza azt (leggyakrabban C: \ WinAVR \ avr \ lib \ ldscripts a Windows, és az / usr / local / avr / lib / ldscripts Unix -szerű OS), majd fordítsd újra. A linker fog panaszkodni „fájl nem nyitható meg linker script ldscripts / avr3.x». Azt fogja mondani, a megfelelő szkript fájl nevét. Állítsa vissza az eredeti nevét, a könyvtárak és másolja a fájlt talált a projekt könyvtárban. Ezután adjuk hozzá a következő sort a Makefile a hely, ahol minden a Flake Linker:

DOBJA hozzá egy sort, és cserélje «vektorok», a szakasz neve:

Kapcsolódó cikkek