Forum: Mikrocontroller und Digitale Elektronik struct mit bitfield


von Neubi (Gast)


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

von Frickler (Gast)


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.

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.