Ja toho Tisnovskyho taky obdivuju. Nechapu, jak nekdo muze rozumet skoro vsemu od fraktalu pres Javu a historii pocitacu az po ARM. A stve me, ze jsem tak linej, minimalne tak tretina tech clanku by stala za precteni a dukladne zamysleni, vyzkouseni... Akorat po 8 hodinach v praci a se 3 detmi uz na to nemam cas a kdyz cas je, tak neni sila :-(
Nevite nekdo o existenci ARM7 MCU, ktery by mel konfigurovatelnou base adresu nejake oblasti RAM a soucasne korektne hodil vyjimku, kdyz se pokusim o execute nebo data access do prostoru, ktery neni obsazen? Dulezite je, aby ta remapovatelna RAMka nebyla jedinou RAMkou v MCU.
Tato feature by umoznovala velmi snadno obejit limitaci mnoha MCU ve velikosti flash pameti, vytvorila by se tou RAM vlastne jakasi "cache", do ktere by se nacetl obsah z jine (pomale) pameti, baseadresa by se posunula na aktualni vyctenou pozici, a s tim by se dalo nasledne normalne pracovat. Takove reseni by sice bylo brutalne pomale, ovsem to mnoha aplikacim nevadi (to co ma bezet rychle by mohlo zustat v interni flash). Toto by resila obsluha vyjimky, takze pro "uzivatele" by ta externi pamet byla zcela transparentni, i kdyz velmi pomala :-). Jakmile by se sahlo do oblasti ktera aktualne neni vyctena, hodilo by to vyjimku, handler by nacetl opet novy segment, prehodil baseaddr, a jelo by se dal.
Pro mnoho ucelu je ARM(9) se SDRAM controllerem nepouzitelne reseni, mit moznost u ARM7 odsypat napr. 2MB kodu/dat do SPI flash 25xxx a ten potom takhle pouzivat by resilo spoustu potizi.
Swap to uplne neni, protoze smyslem neni ta data cpat zpet do flashky, ale jen je cist. Ale jinak souhlas. MMU na low-end low-cost ARM7 neni nikde, stejne jako SDR/DDR controller. Navic plnohodnotne MMU je na tento ucel zbytecne.
Konkretni ucel: potrebujeme udelat tester do ruky, ktery by implementoval diagnostiku na auta (konkretne jde napr. o tento produkt: www.obdtester.com/focom ). Problemem tam je, ze toho kodu je potreba docela dost, stejne tak dat. Pokud by tam sel napr. ARM9 + SDRAM tak nejsme diky cinskym vyrobkum (plagiatum) absolutne konkurenceschopni.
Tech aplikaci kde dojde flashka protoze kod se rozroste je ale urcite obrovske mnozstvi...
Asi vam nakonec nezbyde nic jineho a budete muset softwarove implementovat overlaye.
Ale nejspis by to slo udelat i komfortne. Nikdy jsem to nedelal ale mam pocit ze se linkeru da nejak naznacit aby, kdyz vola overlaid funkci, nejdriv skocil do wrapperu, ktery zkontroluje zda je funkce pritomna a pripadne ji nacetl (za predpokladu ze ji zkompilujete jako position independent (coz u ARMu vzhledek k relativnimu adresovani neni zadna ztrata) a ze je dost RAMky aby se do ni funkce vesla).
Ale stejne je to otrava takhle to delat.
Ovsem program to musi byt asi obrovsky, kdyz vam nestaci 256KB flasky co ma AT91SAM7S256.
1 MB flash dle mych vypoctu je stale malo. Tedy, pokud by se striktne oddelila data a kod, tak uz by to asi stacilo, ovsem co ten MCU bude stat? Navic tam potrebujeme USB + CAN.
Takovy FiCOM ( www.obdtester.com/ficom ) ma cca 800kB dat jen pro dekodovani chybovych kodu ridicich jednotek. A to je to jen jedna jazykova verze.
Jak budeme konkurovat cinanum, kteri problem mimo jine resi tak, ze v externi pameti maji veskery kod a kdyz potrebuji jeho nejakou cast, tak prehraji CELOU flashku MCU (z externi flash) a skoci do ni? Pocet prepisu flash u nich nikdo neresi, asi to berou tak, ze kdyz "se to rozbije" po vice nez mesici, tak to musi byt chyba zakaznika :-).
Pak je tu varianta MCU + externí NOR Flash.
Nebo to udělejte jako tenhle šílenec - na MCU z interní flashe pustit nějaký interpreter/emulátor, který bude tahat interpretovaný kód z externí flashe.
Když Cortex M3, tak 1 MB Flash má např. STM32F205ZGT6 za nějakých 300+, ale nějak se mi nechce zdát, že byste měl 1 MB čistého kódu pro Cortex M3 - to spíš bude mix s daty. Buď bych a) striktně oddělil kód od dat a data nějakým vhodným způsobem segmentoval a držel na ext. Flash (NOR, SD karta apod. řešení) - segmenty pak tahal do SRAM, nebo b) bych se poohlédl po ARM/Cortexu s řadičem SDRAM (snad TI - LuminarM aj.) a při startupu vše potřebné (třeba celý image) přetáh z Flash do SDRAM.
Toto se dá řešit i čistě softwarově, kde kód překladač generuje tak, aby si ta správná data v softwarově spravované keši program zajistil.
Je to poměrně zajímavá oblast, nějaké info se dá najít např.
na http://aces.snu.ac.kr/Center_for_Manycore_Programming/Publications.html v článcích týkající se
"Explicitly-Managed Memory Hierarchies".
Jinak ale pro praktické použití to moc není, protože by to překladač pro danou achitekturu musel umět a implementace nebude úplně triviální:)