mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik struct mit bitfield


Autor: Neubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,

möchte gerne 3 register mit jeweils 32bits jeweils einzeln ansprechen 
können und würd ganz gern ein struct mit bitfeldern verwenden (speicher 
sparen)

typedef struct
{
  // R0
  unsigned r0_31_unused             :  1;
  unsigned int_val                  : 16;
  unsigned fract_val                : 12;
  unsigned r0_ctrl                  :  3;

  // R1
  unsigned r1_31_28_unused          :  4;
  unsigned prescaler                :  1;
  unsigned phase_val                : 12;
  unsigned modulus_val              : 12;
  unsigned r1_ctrl                  :  3;

  // R2
  unsigned r2_31_unused             :  1;
  unsigned noise_mode               :  2;
  unsigned mux_out                  :  3;
  unsigned ref_doubler_en           :  1;
  unsigned ref_divider_en           :  1;
  unsigned r_divider                : 10;
  unsigned double_buf_en            :  1;
  unsigned charge_pump_current      :  4;
  unsigned lock_detect_fract_en     :  1;
  unsigned lock_detect_precision_en :  1;
  unsigned phase_detect_polarity    :  1;
  unsigned power_down               :  1;
  unsigned charge_pump_threestate   :  1;
  unsigned counter_reset            :  1;
  unsigned r2_ctrl                  :  3;

} t_adf4350_regs;

t_adf4350_regs test;
void test_init(void)
{
  test.r2_31_unused = 1;
  test.r2_ctrl      = 3;
}



... wenn ich jetzt testweise einige bits setze, steht nur müll im 
speicher (00 00 00 00, 00 00 00 00, 01 00 00 60)


kann das so funktionieren, bzw. was mach ich falsch?


thx
neubi

Autor: Frickler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Abgesehen davon, dass Du jedes Register in eine eigene struct packen 
solltest, stimmt das Ergebnis doch.

Hint: interpretiere die Bytes des Speicherinhalt den Du hingeschrieben 
hast mal von rechts nach links.

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.