/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
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



Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409073
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste