Dies ist auf einer Mikrocontroller-Plattform, so RAM-Nutzung ist wichtig.Erklären Sie zwei verschiedene Strukturgrößen
Ich habe eine nette kleine Bibliothek, die ich für Ringpuffer verwende. Für den Ringpuffer, erkläre ich eine Struktur typedef:
typedef struct buffer {
uint8_t data[BUFFER_LENGTH];
uint16_t newest_index;
uint16_t oldest_index;
BufferStatus status;
} Buffer;
Normalerweise brauche ich nur eine davon pro Anwendung, so dass die BUFFER_LENGTH
auf einen bestimmten Wert definiert, ist keine große Sache, aber ich habe eine Anwendung, die erfordert zwei von ihnen ... eine von relativ kurzer Länge (32 Bytes) und eine von relativ langer Länge (256 Bytes).
Gibt es eine einfache Technik, die ich verwenden kann, die malloc()
nicht beinhaltet, die mir erlauben würde, zwei Variablen von zwei verschiedenen Längen zu deklarieren?
Die denken nur, dass ich mit so weit gekommen sind, um die Daten in der Struktur ein Zeiger, erklären das Array zu machen, wenn ich die Puffer deklarieren, und die Pufferlänge zum typedef Buffer hinzu:
typedef struct buffer {
uint8_t dataPtr*;
uint16_t length;
uint16_t newest_index;
uint16_t oldest_index;
BufferStatus status;
} Buffer;
uint8_t dataBuf1[256]
uint8_t dataBuf2[32]
Buffer buf1, buf2;
buf1.dataPtr = dataBuf1;
buf1.length = 256;
buf2.dataPtr = dataBuf2;
buf2.length = 32;
Das wird funktionieren, aber gibt es eine bessere Lösung?
Die Deklaration der Struktur erfordert keinen zusätzlichen Speicherplatz, sie benötigt keinen Platz, bis Sie sie instanziieren. Da Sie beide brauchen, erklären Sie beide einfach. – KevinDTimm
@KevinDTimm Vielen Dank für das Betrachten. Wenn ich "Buffer buf1" und "Buffer buf2" deklariere, dann teilt mein Compiler allen die volle 'BUFFER_LENGTH' zu. Dies wird funktionell funktionieren, aber wird viel mehr RAM verwenden, als ich interessiert bin. – slightlynybbled
Ja, ich sehe das (besonders nachdem ich @ die Antwort von WeatherVan angeschaut habe). Ich war in meiner Interpretation des Problems – KevinDTimm