Stránka 1 z 1
mapa paměti
Napsal: 16 úno 2008, 20:18
od Aqarel
zdravím, potřeboval bych software, který by dokázal z asm kódu pro 8051 vytáhnout použitá paměťova místa z celého programu. dále při symbolickém pojmenování: x equ 20h ;promená x , program vytáhne adresu(20h), název(x), komentář(proměnná x). Ušetřilo by mi to hodně času a zbytečných chyb. Ideálně kdyby program vygeneroval textovou tabulku s obsazením paměti do textového souboru. Existuje něco takového nebo mi nezbyde než si to naprogramovat sám?
Napsal: 16 úno 2008, 22:41
od Hill
Tys asi ještě s assemblerem nedělal, viď?
Jinak bys věděl, že jde o jazyk symbolických adres, který při překladu do strojového kódu ty symboly nahradí adresami skutečnými a symboly se nikam neukládají.
Ve zdrojovém kódu se při překladu vytvoří tabulka skutečných adres, ale to je také naposledy, co ji lze vidět. Do procesoru se už pálí s adresami z té tabulky. Bez symbolických názvů.
Při zpětném překladu se ti v instrukcích skoků a volání a v definicích objeví místo symbolu adresa, které byl symbol přiřazen.
Na tobě je, dát těm adresám jména - disassembler je nemá kde vyčíst.
Stejně jako komentáře, kterými si při psaní programu ulehčuješ orientaci, procesor na nic nepotřebuje a jen by tam překážely, proto se nepřekládají a neukládají.
Jednoduše - takový software neexistuje. Leda křišťálová koule.
Napsal: 16 úno 2008, 23:49
od Aqarel
s asseblerem pracuji pár měsiců, asi jsem se špatně vyjádřil. Když píši program(trochu složitější) ztrácím rychle přehled, která paměťová místa jsem využil, proto se ptám na program, který by mi dokázal vypsat využití uživatelské paměti - 30h až 7Fh, bitově adresovatelného prostoru 20h - 2Fh a portů z NEzkompilovaného programu(pro mcu atmel 89s51/52...). Zatím to dělám ručně, ale až příliš mě to zdržuje a je velká šance, že se přepíšu a způsobím si zbytečné komplikace.
Ukázka výpisu paměti:
Kód: Vybrat vše
|........|...............|...................................................|
|P3.0 |- |RXD - RS232 |
|P3.1 |- |TXD - RS232 |
|P3.2 |PULS_C |Pulsy z inkrementálního snímače spojky |
|P3.3 |NC |nezapojeno |
|P3.4 |DIR_C |Směr posunu spojky |
|P3.5 |NC |nezapojeno |
|P3.6 |SEN_C2 |Pravý dorazový senzor spojky |
|P3.7 |SEN_C1 |Levý dorazový senzor spojky |
|........|...............|...................................................|
|nastavení pohoné jednotky |
|20h.0 |EnMov |0/1 - robot nejede/jede |
|20h.1 |DirMov |0/1 - pohyb robota dozadu/vpýed |
|20h.2 |EnClu |0/1 - spojka(clutch) - vykonej akci ne/ano |
|20h.3 |LClu |0/1 - nastav spojku doleva ne/ano |
Napsal: 17 úno 2008, 08:42
od Hill
Tak ti nevím: všechny kompilátory pro Z80 na konci překladu vypsaly tabulku se seznamem návěští a adres, jen vytisknout nebo uložit.
Že by to kompilátory pro 2051 neuměly, když tu tabulku stejně potřebují?
Zkus najít jiný kompilátor na
www.kvetakov.net
Napsal: 24 úno 2008, 23:39
od mtajovsky
Použijte, co radi Hill. Ta tabulka se obvykle nazývá mapa linkování a sestavuje ji linker, pokud se mu zadá příslušný přepínač. K obsazování paměti používejte direktovy kompilátoru, používejte relativní segmenty pro kód, absolutní jen tam, kde je to nezbytné - startovací rutina. Je to již docela dlouho, co jsem v asm51 dělal, ale myslím, že je možno symbolicky direktivami kompilátoru popsat obsazení veškeré paměti - i bitové a potom se to vše objeví v mapě.
Napsal: 25 úno 2008, 13:57
od Aqarel
pro editaci používám pspad a tam mám nastavený zatím cass51(zkoušel jsem i asm51 ale ani jeden to nejspíš neumí) jako kompilátor, protokol o překladu se mi vypíše dolů do logu a lze nastavit spuštění dalšího programu jehož log se automaticky otevře v další záložce, což by měla byt ta mapa paměti, začal jsem si psát proto zatím program sám, aspoň splní všechny mé pořžadavky

, po dopsaní dám na program odkaz třeba to pomůže i někomu jinýmu,