Du musst sowohl den Zeiger auf die struct als auch die Länge der struct
mit übergeben, dann kann deine Funktion die Inhalte übergeben.
Der Prototyp sieht dann so aus:
1 | void writeParam(void* param, size_t size, uint32_t address);
|
Innerhalb von writeParam() darfst du dann natürlich nirgends mehr ein
"struct1" oder so stehen haben. Das heißt, deine temporäre Struktur
kannst du irgendwie so zusammenbauen:
1 | void writeParam(void* param, size_t size, uint32 address)
|
2 | {
|
3 | __attribute__((packed)) struct s_write
|
4 | {
|
5 | uint16 checkSumme;
|
6 | uint16 free;
|
7 | uint8_t param[];
|
8 | };
|
9 |
|
10 | size_t writesz = size + 4;
|
11 | struct s_write* write = (struct s_write*)alloca(writesz);
|
12 |
|
13 | memcpy(&write->param, param, size);
|
14 | write->free = 0xFFFF;
|
15 | write->checkSumme = calcChecksumme((uint8_t*)param, size);
|
16 |
|
17 | eepromWrite(adress, (uint8*)write, writesz)
|
18 | }
|
Bugs sind meine, ich hab den Code hier im Forum geschrieben. Betrachte
es als Ideengrundlage. :-)