Podmíněnej překlad Atmel Ax51
Moderátor: Moderátoři
Podmíněnej překlad Atmel Ax51
Byl jsem donucen se asi po 8 letech vrátit k úpravě nějakýho programovýho balíku v regulaci s Atmelem 89C52. Potřeboval bych v tom udělat podmíněnej překlad aby pouze pro ladění posílal obsah registrů po sériový lince a po odladění se to zase podmíněným překladem přeložilo bez toho odesílání. Vyhrabal jsem dokonce od použitýho macroasembleru AX51 manuál, kde na podmíněnej překlad je funkce:
%iIF(výraz)THEN(text1)ELSE(text2)FI
Má to makat, že pokud je (výraz)=1, se vloží (text1) a při (výraz)=0, se vloží (text2). No a to FI je ukončení funkce.
Používám jen text1, text2 je prázdnej. Šel jsem na to jako u jinejch ASM, na začátku programu nadefinoval:
LADENI EQU 1 ;zapnuti laděni (0=vypnuti)
a pak kde to bylo potřeba vlastní kód odeslání, třeba:
%IF (LADENI) THEN (mov a,r0
mov p1,a
.......) FI
Přeložím a všude výpis "Illegal expresion" což je v chybovníku "špatně zapsaný výraz". Pokud zadám:
%IF (1) THEN (mov a,r0
mov p1,a
.......) FI
tak to maká, jak má. Jenže to je jaksi k prdu, potřebuju to definovat globálně přes jméno. Pokud ale vyzkouším, jakou hodnotu má LADENI, tak je opravdu 1.
Pokud není LADENI v zavorkách, tak to zase hlásí "Mising delimiter"
Netušíte někdo, co dělám blbe? U jinech Makroasembleru to maká a tady nevím proč.
Díky
Jirka
Dík za pokus.
Jirka
IF LADENI=1
...bla, bla...
ENDIF
Trochu práce dá že se všechny definice a volání makra musej opravit.
Sice tam píšou, že po direktivě $MPL by měl umět i Intelácký makra, ale všechno mezi dvěna % se vynechává. Kdoví, jestli to je vůbec Inteláckej zápis....
Původní definice byla:
%*DEFINE(POSLI_NA(PORT,DATA))
(MOV A,#%DATA
MOV DPTR,#%PORT
MOVX @DPTR,A)
A volání:
%POSLI_NA(PB8255,0FFH)
No a u Kielu definice je:
POSLI_NA MACRO PORT,CO
MOV A,#PORT
MOV DPTR,#CO
MOVX @DPTR,A
ENDM
A volání:
POSLI_NA PB8255,0FFH
Akorát zde nejde použít jako u toho původního lokální symbol DATA, nejspíš je globálně rezervovanej.
No vypadá to na všeobecnou spokojenost a navíc si konečně můžu na 51 zablbnout v C.
Díky za pomoc.
Jirka
- ZdenekHQ
- Významný člen
- Příspěvky: 25519
- Registrován: 21 črc 2006, 00:00
- Bydliště: skoro Brno
- Kontaktovat uživatele:
Podmíněnej překlad je věc překladače, co kus, to originál, já teď používám ASEM-51 Copyright (c) 1994, 1996, 2002 by W.W. Heinz .
22000 řádků JSA má přeloženo asi za půl vteřiny, běží pod WIN98 i XP.
Podmíněnej překlad vypadá nějak takto :
Kód: Vybrat vše
; 10. Conditional Assembly:
; -------------------------
; The most important meta instructions for conditional assembly are
; introduced in this section. The general controls $WARNING and $ERROR,
; and the predefined symbols ??ASEM_51 and ??VERSION are also shown here,
; because the make sense in conjunction with conditional assembly only.
; a.) The IF, IFN, ELSE, and ENDIF meta instructions:
IF NOTEQ1
DB 'string 1',0
ELSE
IFN EQUAL2
DB 'string 2',0
ELSE
DB 'string 3',0
ENDIF
ENDIF
; b.) The IFDEF and IFNDEF meta instructions:
IFDEF GHOST
DB 'haunting',0
ELSE
DB 'nothing',0
IFNDEF VAMPIRE
DB 'boring',0
ELSE
DB 'sucking',0
ENDIF
ENDIF
; c.) The predefined symbols ??ASEM_51 and ??VERSION,
; and the general controls $WARNING and $ERROR:
IFDEF ??ASEM_51 ;product identification
IF ??VERSION < 0130H ;version number
;display a user-defined warning:
$WARNING(Warning: ASEM-51 version 1.3 (or later)) required.)
ENDIF
ELSE
;fire a user-defined error message:
$ERROR(Fatal: Assembler is not ASEM-51!)
ENDIF
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?]
Ty příklady zápisu podmíněnýho překladu jsou u Kielu úplně stejný.
Jirka