私は Atmel AVR ATmega328p チップを使用しており、作成したファイル fifobuffer.h の FifoBuffer クラスを使用して、さまざまな長さの複数のリング バッファーを作成しようとしています...
class FifoBuffer {
private:
uint8_t buf_head; // Head position, where next character is to be added
uint8_t buf_tail; // Tail position, when next character is to be removed
uint8_t buf_size; // Size of buffer in number of characters
uint8_t *buffer; // Declare buffer pointer
public:
FifoBuffer (uint8_t); // Constructor declaration
uint8_t get () { return buffer[2]; }
void put (uint8_t character) { }
void empty () { }
uint8_t count () { return 10; }
uint8_t head () { return buf_head; }
uint8_t tail () { return buf_tail; }
uint8_t size () { return buf_size; }
};
// Constructor
//
FifoBuffer::FifoBuffer (uint8_t buffer_length) {
buf_head = 0;
buf_tail = 0;
buf_size = buffer_length;
buffer = new uint8_t [buffer_length];
buffer[1] = 20; // Test
buffer[2] = 16; // Test
buffer[3] = 32; // Test
}
私のmain.cppファイルには...
...
void *operator new(size_t s) { return malloc(s); }
void *operator new[](size_t s) { return malloc(s); }
void operator delete(void *m) { free(m); }
void operator delete[](void *m) { free(m); }
#include "fifobuffer.h"
...
FifoBuffer tty_rx_buf(64);
FifoBuffer tty_tx_buf(64);
uint8_t ttt = tty_rx_buf.get();
show_8_bits (ttt, 'n');
ttt = tty_rx_buf.size();
show_8_bits (ttt, 'n');
...
これですべてが準拠し、.get()
16 が.size()
返され、64 が返されます。しかし、リング バッファー コンストラクターの呼び出しに 64 のサイズを選択しても 10 のサイズを選択しても、プログラムのサイズ (プログラム メモリ使用量: 1194 バイト、データ メモリ使用量: 11 バイト) は変わらないことがわかりました。リング バッファー コンストラクター呼び出しを 1 回だけ行うと、メモリ使用量がそれぞれ 1178 バイトと 11 バイトに変わります。
buffer = new uint8_t [buffer_length]
行が buffer_length バイトを実際に割り当てていないことが心配です。
私の懸念は正当なものですか?これを行うより良い方法はありますか?はい、私はこれが初めてです。