Hallo,
ich habe folgendes Problem:
Ich möchte uint32_t integer Variablen in ein uint8_t Array schreiben.
Die Variablen werden einem struct zugeordnet und bekommen dort einen
Namen. Der Variablenwert wird als Zeiger auf die jeweilige Variable in
der structur hinterlegt.
Das Füllen des uint8_t Arrays möchte ich nun über den in dem struct
hinterlegten pointer machen (siehe Code).
1 | struct uint32_t_variable
|
2 | {
|
3 | char* name[10];
|
4 | uint32_t* ptr;
|
5 | };
|
6 |
|
7 | struct uint32_t_variable uint32_t_variablen[] =
|
8 | {
|
9 | {"Zähler 1", &cnt},
|
10 | {"Zähler 2", &cnt2}
|
11 | };
|
12 | uint8_t nmbr_of_uint32_t_variables = sizeof(uint32_t_variablen)/sizeof(*uint32_t_variablen);
|
mit der Funktion void MP_update_array(void) möchte ich nun das Array
tx_value_buffer updaten. wie folgt:
1 | void MP_update_array(void){
|
2 | uint8_t *pos = tx_value_buffer;
|
3 | for(int i = 0; i < nmbr_of_uint32_t_variables; i++){
|
4 | uint32_t* value = uint32_t_variablen[i].ptr;
|
5 | *pos = *value >> 24;
|
6 | pos++;
|
7 | *pos = *value >> 16;
|
8 | pos++;
|
9 | *pos = *value >> 8;
|
10 | pos++;
|
11 | *pos = *value;
|
12 | pos++;
|
13 | }
|
14 | }
|
Leider wird mir hier in das Array eine sehr hohe Zahl (vermutlich die
Speicheradressen?) geschrieben. Wenn ich *pos = &cnt; anstelle von *pos
= *value; schreibe wird mir der richtige Wert ins Array geschrieben. Das
riecht stark nach einem Fehler in meinem struct aber was mache ich
falsch? Ich verzweifle.
Das ganze läuft in der STM32CubeIDE auf einem STM32G0 Kern.