struct mit bitfield

Gast #1884196
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
Gast #1884219
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren