Forum: Mikrocontroller und Digitale Elektronik C30 Compiler Bitfeld mit fester Adressierung


von CManiac (Gast)


Lesenswert?

Hallo,

im Thread vorher wurde mir erklärt wie ich mit dem C30 C-Compiler(16Bit 
PIC24F) ein Bitfeld deklariere.

Jetzt habe ich eine weitere Problematik, bei der ihr mir hoffentlich 
helfen könnt.

Es wird in meinem Programm eine feste Adressierung benötigt,
deswegen gehe ich wie folgt vor:
1
UWORD eineVariable __attribute__ ((address(0x800))); //auf Adresse 800hex

wie kann ich jetzt ein Bitfeld festadressieren?

habe folgendes Probiert, das hat der Compiler aber abgewiesen:
1
struct bar {
2
  unsigned char A:1;
3
  unsigned char B:1;
4
  unsigned char C:1;
5
};
6
struct bar y __attribute__ ((address(0x899 ));

Danke euch schonmal im Vorraus!!!

Gruß
CManiac

von (prx) A. K. (prx)


Lesenswert?

Einmal mehr: siehe Microchips Include-Files. Die verwenden ebenfalls 
Bitfelder für I/O-Register.

von CManiac (Gast)


Lesenswert?

Hallo,

hatte es aus den Headerfiles nicht rauslesen können, deswegen habe ich 
hier nachgefragt....

:-(

von (prx) A. K. (prx)


Lesenswert?

Der allgemein übliche Weg auf allen Maschinen, der zudem ohne spezielle 
Compilererweiterungen auskommt, ist:
  (*(struct bar *)0x899)

von CManiac (Gast)


Lesenswert?

Danke dir.

Könntest du mir das mit meinem Beispiel demonstrieren mit der 
Deklaration und dem struct?

von (prx) A. K. (prx)


Lesenswert?

Und ich dachte doch glatt, das hätte ich fast schon getan. Also dann 
halt:
1
#define y (*(struct bar *)0x899)
Ich würde es allerdings nicht grad "y" nennen.

von CManiac (Gast)


Lesenswert?

Habe nur eine generelle Frage,

da ich mich gerade in die Geschichte mit den Compilerdirektiven von dem 
GCC einarbeite (habe vorher auf 8051 Basis [Keil] programmiert).

Wenn ich das über define mache, dann kann ich aber die Variable nicht 
ins Watchfenster übernehmen, richtig?

Würdest du, es generell mit define Anweisungen machen, oder über die 
__attribute (adress) Anweisung???

Der Nachteil von define wäre wohl, das der Compiler es nicht überwacht, 
da man direkt adressiert, oder?

Danke schonmal vorab :-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.