 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
marko Član



Pridružen-a: Sre 07 Jan 2004 15:14 Prispevkov: 755 Aktiv.: 3.18
|
Objavljeno: Tor Okt 22, 2013 10:28 am Naslov sporočila: AVR - izvajanje programa z zunanjega pomnilnika |
|
|
Živjo,
Imam idejo, da bi lahko za neko napravo, vsak sam izdeloval svoje module. Ko govorim sam, imam v mislih, da bi programer sam razvijal nek modul, ki dobi na vhod tega modula vse podatke, ki mu jih naprava ponudi, izhod pa je potem nekaj kar naprava naredi. Vsak modul bi se registriral v glavnem programu, ta glavni program pa bi vse te module potem izvajal.
Kolikor vem, AVR AT90 (uporabljam CAN128) ne podpira izvajanje z zunanjega pomnilnika, zato bi bilo treba naredit neko drugo foro, vendar z bootloaderji in podobnimi zadevami nimam veliko izkušenj. Rad pa bi, da je to nekako ločeno, da z updatom jedra, ne moreš pokvarit vseh teh naloženih modulov. To nalaganje modulov bi tudi bilo enkratno in bi se zapisalo v ta zunanji pomnilnik (ali pa kam drugam - permanentno)
Ima kdo kako idejo? |
|
Nazaj na vrh |
|
 |
int47 Član


Pridružen-a: Pon 15 Dec 2003 0:10 Prispevkov: 2105 Aktiv.: 8.86 Kraj: Ljubljana
|
Objavljeno: Sre Okt 23, 2013 12:34 pm Naslov sporočila: |
|
|
Kolikor vem, 8 bit Atmelov AVR lahko izvaja program le iz internega programskega pomnilnika.
Če bi rad izvajal program, ali skripto iz zunanjega pomnilnika, napiši interpreter.
Ne bo najhitrejše, vendar je pri uporabi izbranega uC to edina možnost, če hočeš zagotoviti, da posamezni modul nima polnega dostopa do HW in ne more spreminjati registrov, ki niso njegovi.
Če bi rad izvajal nativno kodo, bi bilo treba modul skopirati v programski pomnilnik. Če je teh modulov več, v modulu ne smejo biti uporabljeni absolutni naslovi za programske skoke v modulu in uporabljeni RAM. Ker ima vsak modul polni dostop do HW, je težko zaznati in verjetno nemogoče preprečiti spreminjanje lokacij/registrov, ki ne pripadajo določenemu modulu.
Delno lahko zaščitiš samo programski pomnilnik, da ga lahko spreminja le bootloader.
Delno, ker modul še vedno lahko izvede skok v bootloader del programa, ki vsebuje SPM ukaz. |
|
Nazaj na vrh |
|
 |
mucek Član


 
Pridružen-a: Tor 01 Avg 2006 10:47 Prispevkov: 5538 Aktiv.: 24.02 Kraj: Domzale
|
Objavljeno: Sre Okt 23, 2013 3:30 pm Naslov sporočila: |
|
|
Mogoče preprosta ideja:
V flash kontrolerja dodaj bootloader za SD kartico in ob vsakem resetu preberi (in izvajaj) program iz SD kartice. Omejitev zna postati omejeno število zapisovanj FLASHa - ali pa tudi ne, odvisno od tega, kako pogosto misliš, da se bo zadevo odklapljalo in priklapljalo ...
LP, g _________________ ...lahko pa se tudi motim ... |
|
Nazaj na vrh |
|
 |
marko Član



Pridružen-a: Sre 07 Jan 2004 15:14 Prispevkov: 755 Aktiv.: 3.18
|
Objavljeno: Sre Okt 23, 2013 4:04 pm Naslov sporočila: |
|
|
Jedro se ne bi smelo spreminjati, torej bi moral celotno kodo dati v ta bootloader? Ni tam omejena količina podatkov?
Interpreter je sicer zanimiva ideja, ampak definirat sintakso, ki bi bila dovolj dodelana in hitra, je cela znanost, da ne omenim parsanje vseh teh stavkov in variant. Za en ubog AVR pomoje no-go.
Nekako najbolje bi bilo, da bi ob registriranju modula, glavni program kar v svoj flash dodal kodo modula in se zapomnil na katerem naslovu je. Ob klicu modula, bi se potem skliceval na ta naslov.
Vsi moduli, ki bi se naredili, pa ne bi smeli imeti absolutnih naslovov. Je to sploh izvedljivo v višjem jeziku? (da ne bi ravno asm-ja kucali programerji) |
|
Nazaj na vrh |
|
 |
int47 Član


Pridružen-a: Pon 15 Dec 2003 0:10 Prispevkov: 2105 Aktiv.: 8.86 Kraj: Ljubljana
|
Objavljeno: Sre Okt 23, 2013 5:35 pm Naslov sporočila: |
|
|
Interpreter se je uporabljal že na prvih "hišnih računalnikih" s počasnejšim procesorjem in manj ROM-a, kot ga imaš na voljo.
Če bi rad naredil nekaj podobnega, kot npr web server s CGI razširitvami, ali mini OS, ki poganja aplikacije, izbrani uC ni najbolj primeren.
Tvoj "core" je lahko večji od boot. V boot delu se mora nahajat samo tisti del kode, ki uporablja SPM ukaz in koda za recovery, če gre pri nadgradnji kaj narobe. FLASH update procedura mora biti dovolj pametna, da ne piše po delu FLASH-a, kjer se nahaja core.
Rabiš tudi nek mehanizem, po katerem boot loader prepozna, da sistem ne deluje praviklno, oz. ga lahko prisiliš, da namesto v core skoči v recovery rutino.
Lahko bi pri nalaganju uporabil object datoteko. Linkbi izvedla update aplikacija za PC, ali bootloader, ko bi iz sistema pridobil ustrezne podatke.
Če se bodo moduli pogosto menjali, bo lahko problem fragmentacija pomnilnika.
edit:
Kako bo v času razvoja izvedeno razhroščevanje modulov?
Če se cel sistem preneha odzivat zato, ker je en modul pisal po tujih lokacijah, bo precej težko najti napako. Ne veš niti tega, v katerem modulu je prišlo do napake. |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 11 dni
Powered by phpBB © 2001, 2005 phpBB Group
|