Panda38 Profesionál


Založen: 18.9.2012 Příspěvky: 399 Bydliště: Praha, Most
|
Zaslal: 16 březen 2013, 9:32 Předmět: |
|
|
Nemůže to být statické pole (protože by byla proměnlivá velikost struktury), musí se použít dynamicky alokovaná pole:
kód: | typedef struct{
unsigned char* RAM_READ;
unsigned char* RAM_WRITE;
}MEMORY_MAP;
MEMORY_MAP slave_jednotka_1..... slave_jednotka_n
|
Při inicializaci struktury se vytvoří pole pomocí malloc:
slave_jednotka_n->RAM_READ = (unsigned char*)malloc(n*sizeof(unsigned char));
slave_jednotka_n->RAM_WRITE = (unsigned char*)malloc(n*sizeof(unsigned char));
Při rušení struktury se musí pole zrušit pomocí free:
free(slave_jednotka_n->RAM_READ);
free(slave_jednotka_n->RAM_WRITE);
K prvkům pole se pak přistupuje jako k statickému poli:
slave_jednotka_n->RAM_READ[i]
Taková struktura pak může být součástí jiných struktur, velikost polí je modifikovatelná.
Jiná alternativa - spíš se tato problematika řeší jinak. Aby se nemusela pole alokovat (jednak manažer paměti spotřebovává pro bloky nějakou paměť navíc a jednak je s tím obtížná manipulace), tak se použijí větší pole, pro max. velikost, a ztracená paměť se oželí (jinak se s tím pracuje stejně, jako s menším polem, nevadí že má rezervu):
kód: | #define MAP_MAX 10
typedef struct{
unsigned char RAM_READ[MAP_MAX];
unsigned char RAM_WRITE[MAP_MAX];
}MEMORY_MAP;
MEMORY_MAP slave_jednotka_1..... slave_jednotka_n
|
|
|