definice externi konstanty v C
Hynek Sladky
econf@centrum.cz
Úterý Prosinec 4 13:23:43 CET 2007
Jak uz jsem psal:
extern unsigned char konst_maska;
se pouzije jako odkaz na promennou, nikoli jako vlastni konstanta.
Tj. provede se cosi jako
ld e,(konst_maska)
or e
misto rovnou pouziti (cehoz bych chtel dosahnout):
or konst_maska
Otazka tedy zustava: jak rict kompilatoru, ze dany identifikator je
externe definovana konstanta (nikoli externe definovana konstantni
promenna)?
Hynek Sladky
Miroslav Sinko wrote:
> ako som uz pisal:
>
> extern typ meno_konstanty;
>
> Je to pre kompilator informacia, ze premenna tohto mena a typu existuje
> v inom module (zdrojak, lib, obj). Teda kompilator sa o nu dalej
> nestara, az linker.
>
> miro
>
>
>
> --- Hynek Sladky <econf@centrum.cz> wrote:
>
>
>>Diky,
>>
>>jenze #define se zpracuje pri kompilaci, nikoli az pri linkovani, coz
>>
>>prave potrebuju.
>>
>>Linker umi to, co chci (viz priklad s assemblerem), ale nevim, jak v
>>C
>>napsat, aby to pak spravne slinkoval...
>>
>>Hynek Sladky
>>
>>
>>Richard Kaliciak wrote:
>>
>>>Dobry den,
>>>
>>>pouzite #define, napr.
>>>
>>>#define TIMER0PRESCALE 0x04 ///< timer 0 prescaler default
>>>
>>>nozete si vytvorit jeden subor hw_config.h, kde si definujete
>>
>>potrebne
>>
>>>veci a potom ho vsade #include-jete:
>>>
>>>----------------------------------
>>>#ifndef HW_CONFIG_H
>>>#define HW_CONFIG_H
>>>
>>>#define TIMER0PRESCALE 0x04 ///< timer 0 prescaler default
>>>
>>>#define LCD_CTRL_RS 0
>>>#define LCD_CTRL_RW 1
>>>#define LCD_CTRL_E 2
>>>
>>>#endif
>>>----------------------------------
>>>
>>>Richard Kaliciak
>>>
>>>
>>>Hynek Sladky schrieb:
>>>
>>>
>>>>Dobry den,
>>>>
>>>>jak definovat externi konstantu v C?
>>>>
>>>>Mam knihovni funkci, ktera (zavisle podle HW na kterem bezi)
>>
>>potrebuje
>>
>>>>slinkovat s ruznymi konstantami.
>>>>Napr.
>>>> NejakyReg |= konst_maska;
>>>>
>>>>pokud definuju
>>>>const unsigned char konst_maska=0x20;
>>>>tak se vytvori 8-bit promenna v casti pro kod.
>>>>
>>>>Pritom pokud bych pouzil assembler, tak toto mozne je:
>>>>XREF _konst_maska
>>>>in a,(NejakyReg)
>>>>or _konst_maska
>>>>out (NejakyReg),a
>>>>
>>>>Jenze pouzitim assembleru v C zdrojaku se zdrojak stava znacne
>>>>neprehlednym, tak bych to radsi udelal rovnou v C, pokud to je
>>
>>mozne...
Další informace o konferenci Hw-list