mikrocontroller.net

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


Autor: CManiac (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
UWORD eineVariable __attribute__ ((address(0x800))); //auf Adresse 800hex

wie kann ich jetzt ein Bitfeld festadressieren?

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

Danke euch schonmal im Vorraus!!!

Gruß
CManiac

Autor: A. K. (prx)
Datum:

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

Autor: CManiac (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

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

:-(

Autor: A. K. (prx)
Datum:

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

Autor: CManiac (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke dir.

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

Autor: A. K. (prx)
Datum:

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

Autor: CManiac (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.