ups, habe drei kleine Fehler korrigiert:
"char *v" in "unsigned char *v"
"void function (ts_value * value)" in "void function ( const ts_value *
value)"
"ptr_value = pgm_read_word ( &value->v );" in "ptr_value = (unsigned
char *) pgm_read_word ( &value->v );"
1 | typedef struct
|
2 | {
|
3 | prog_char x; // char im Flash
|
4 | prog_char y; // char im Flash
|
5 | unsigned char *v; // Zeiger im Flash auf char im RAM
|
6 | } ts_value;
|
7 |
|
8 | unsigned char uc_value = 3; // hier hin zeigt *v
|
9 | // struct im Flash
|
10 | ts_value PROGMEM value = { 1, 2, &uc_value };
|
11 |
|
12 | void function ( const ts_value *value )
|
13 | {
|
14 | unsigned char * PROGMEM ptr_value;
|
15 | // hole Adresse im Flash => Zeiger auf SRAM
|
16 | ptr_value = (unsigned char *) pgm_read_word ( &value->v );
|
17 |
|
18 | if ( *ptr_value == 1 ) // s.o.: uc_value = 3;
|
19 | {
|
20 | //code wird ausgeführt
|
21 | }
|
22 | *ptr_value = 4; // Variable im SRAM soll geändert werden: geht nicht
|
23 | }
|
Wie bekomme ich es hin, dass ich die Variable im RAM über der Zeiger im
Flash verändern kann?