|
| Header fil i ICC Fra : René Jensen |
Dato : 26-02-05 22:16 |
|
hejsa gruppe
Vi har et problem i Imagecraft til HC12.. vi har en header fil hvor der er
lavet bit adresserer bare adressere på følgende måde i .h filen til
processoren og der hører en c fil med hvor der står "volatile ITCRSTR
_ITCR;"
man tager så c filem med i proktet og includere h filen.
problemet er:
Hvis der kun er en fil virker det. er der flere end en brokker den sig over
at _ITCR findes i forvejen. har i nogen ideer på hvordan man kan kommer uden
om det. (ps. header filen er fra codewarrior til hc12 og der køre det, den
er så skrevet om så den skulle passe).
Vi kunne jo bare lave defines på alle adresser. men det her er smatere da
man kan bit aadressere alle adresser på denne måde.
ideer søges
rene
kode fra h filen:
/*** ITCR - Interrupt Test Control Register; 0x00000015 ***/
typedef union {
byte Byte;
struct {
word ADR0 :1; /* Test
register select Bit 0 */
word ADR1 :1; /* Test
register select Bit 1 */
word ADR2 :1; /* Test
register select Bit 2 */
word ADR3 :1; /* Test
register select Bit 3 */
word WRTINT :1; /* Write to
the Interrupt Test Registers */
word :1;
word :1;
word :1;
} Bits;
struct {
word grpADR :4;
word :1;
word :1;
word :1;
word :1;
} MergedBits;
} ITCRSTR;
#pragma abs_address:0x0015+REG_BASE
extern volatile ITCRSTR _ITCR;
#pragma end_abs_address
//extern volatile ITCRSTR _ITCR @(REG_BASE + 0x00000015);
#define ITCR _ITCR.Byte
#define ITCR_ADR0 _ITCR.Bits.ADR0
#define ITCR_ADR1 _ITCR.Bits.ADR1
#define ITCR_ADR2 _ITCR.Bits.ADR2
#define ITCR_ADR3 _ITCR.Bits.ADR3
#define ITCR_WRTINT _ITCR.Bits.WRTINT
#define ITCR_ADR _ITCR.MergedBits.grpADR
#define ITCR_ADR0_MASK 1
#define ITCR_ADR1_MASK 2
#define ITCR_ADR2_MASK 4
#define ITCR_ADR3_MASK 8
#define ITCR_WRTINT_MASK 16
#define ITCR_ADR_MASK 15
#define ITCR_ADR_BITNUM 0
| |
--- (27-02-2005)
| Kommentar Fra : --- |
Dato : 27-02-05 09:39 |
|
> Vi har et problem i Imagecraft til HC12.. vi har en header fil hvor der er
> lavet bit adresserer bare adressere på følgende måde i .h filen til
> processoren og der hører en c fil med hvor der står "volatile ITCRSTR
> _ITCR;"
> man tager så c filem med i proktet og includere h filen.
Du kan prøve noget ala følgende i din .H fil:
#ifndef __jeres_h_fil
#define __jeres_h_fil
/** kopier indholdet af jeres .h fil ind her **/
#endif
Ovenstående vil gøre at compileren ikke inkluderer den samme header fil 2
gange (C compileren er i stor udstrækning one-pass compiler så den gemmer
ikke disse data af sig selv).
| |
Repzak (27-02-2005)
| Kommentar Fra : Repzak |
Dato : 27-02-05 13:18 |
|
>
> Du kan prøve noget ala følgende i din .H fil:
>
> #ifndef __jeres_h_fil
> #define __jeres_h_fil
>
> /** kopier indholdet af jeres .h fil ind her **/
>
> #endif
>
> Ovenstående vil gøre at compileren ikke inkluderer den samme header fil 2
> gange (C compileren er i stor udstrækning one-pass compiler så den gemmer
> ikke disse data af sig selv).
Hey
Det er allerede sket i forvejen....
Problemet ligger mere i den "opretter" en variabel på den abselutte adresse,
og den kan ikke oprettes igen....
Og den compiler hver fil for sig, det går fint, problemet kommer når de skal
linkes sammen og alle filerne har samme variabel på samme abselutte
adresse...
Mvh
Kasper (gruppemedlem)
| |
Mogens Hansen (27-02-2005)
| Kommentar Fra : Mogens Hansen |
Dato : 27-02-05 14:29 |
|
"---" <noone@example.com> wrote in message
news:4221aad2$0$301$edfadb0f@dread12.news.tele.dk...
[8<8<8<]
> #ifndef __jeres_h_fil
Generelt er navne der starter med _ forbeholdt implementering (compileren +
run-time bibliotek).
Derfor er det bedre med noget i retningen af:
#ifndef GUARD_JERES_H_FIL
Venlig hilsen
Mogens Hansen
| |
Repzak (27-02-2005)
| Kommentar Fra : Repzak |
Dato : 27-02-05 14:47 |
|
> Generelt er navne der starter med _ forbeholdt implementering (compileren
> + run-time bibliotek).
> Derfor er det bedre med noget i retningen af:
>
> #ifndef GUARD_JERES_H_FIL
Som jeg ser det, skal filen jo includeres i Hver C fil for den kan finde
det, og det ser ud til at køre, det er først i linkeren det går galt
Kasper
| |
Mogens Hansen (27-02-2005)
| Kommentar Fra : Mogens Hansen |
Dato : 27-02-05 16:08 |
|
"Repzak" <repzak@GEDhotmail.com> wrote in message
news:4221cf31$0$29284$14726298@news.sunsite.dk...
>> Generelt er navne der starter med _ forbeholdt implementering (compileren
>> + run-time bibliotek).
>> Derfor er det bedre med noget i retningen af:
>>
>> #ifndef GUARD_JERES_H_FIL
>
>
> Som jeg ser det, skal filen jo includeres i Hver C fil for den kan finde
> det, og det ser ud til at køre, det er først i linkeren det går galt
Jeg forstår ikke helt hvad du mener.
Det jeg foreslog var blot en navngivnings konvention som giver mindre chance
for navnesammenfald med hvad der måtte findes i compiler implementeringen.
Venlig hilsen
Mogens Hansen
| |
Repzak (27-02-2005)
| Kommentar Fra : Repzak |
Dato : 27-02-05 16:29 |
|
> Jeg forstår ikke helt hvad du mener.
Problemet ligger i vi har en helvedes lang header fil til en uC til en
compiler vi ikke har adgang til, og den vi bruger er der ikke frigivet en
header fil til...
den compiler vi bruger kan ikke lide den måde det er lavet på i den anden
header fil, hvor man laver en typedefinering af en union der indeholder en
byte og en struct af 8 bits...
dernæst opretter den en, for mig at se virtual variabel på den abselutte
adresse...
Det har vi fået konverteret, og det virker hvis man kun har ens sourcekode i
en C fil...
lige så snart man skal have det delt ud over 2 C filer, hvor header filen
skal includeres i begge for man kan bruge definationerne.
Når linkeren skal linke det sammen er der lavet en til flere variabler på
samme område med samme navn
men er begyndt at lave en ny, men det havde været mere fancy at have adgang
til alle bitene direkte...
Kasper
| |
Ivan Johansen (27-02-2005)
| Kommentar Fra : Ivan Johansen |
Dato : 27-02-05 21:43 |
|
René Jensen wrote:
> #pragma abs_address:0x0015+REG_BASE
> extern volatile ITCRSTR _ITCR;
> #pragma end_abs_address
Jeg kender ikke denne compilerudvidelse, men ud fra hvad du skriver vil
jeg tro at extern i dette tilfælde bliver ignoreret så _ITCR bliver
opfattet som en definition. Prøv i stedet kun at skrive
extern volatile ITCRSTR _ITCR;
i din header-fil og skriv
#pragma abs_address:0x0015+REG_BASE
extern volatile ITCRSTR _ITCR;
#pragma end_abs_address
i én C-fil (eventuelt uden extern). Så vil jeg tro at det virker da du
så kun har én definition.
Jeg vil for øvrigt komme med samme anbefaling som Mogens: Lad være at
starte et navn med en _ da det er reserveret til compileren.
Ivan Johansen
| |
Repzak (27-02-2005)
| Kommentar Fra : Repzak |
Dato : 27-02-05 23:11 |
|
>
> i én C-fil (eventuelt uden extern). Så vil jeg tro at det virker da du så
> kun har én definition.
Jae det er nok sandt, syntes bare det har været prøvet...
men skidt, vi lavede et lille VB program der kunne trække adresserne og
navnene ud og så har vi lavet definationerne på register niveu og lave
compiler makro til setbit/clearbit og checkbit
> Jeg vil for øvrigt komme med samme anbefaling som Mogens: Lad være at
> starte et navn med en _ da det er reserveret til compileren.
Har jeg set, men den ligger bare et _ mere på, men måske bliver den
forvirret et sted
Kasper
| |
|
|