저는 Atmel AVR ATmega328p 칩을 사용하고 있으며 다양한 길이의 FifoBuffer 클래스를 사용하여 여러 개의 링 버퍼를 생성하려고합니다. 생성 된 파일 fifobuffer.h에서 .. . AVR 클래스 생성자에 메모리를 할당합니다.
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 년. 그러나 프로그램의 크기 (프로그램 메모리 사용량 : 1194 바이트, 데이터 메모리 사용량 : 11 바이트)는 링 버퍼 생성자 호출에 대해 64 또는 10 크기를 선택하는지에 관계없이 변경되지 않습니다. 단 하나의 링 버퍼 생성자 호출을 만들 때 메모리 사용은 각각 1178 바이트와 11 바이트로 변경됩니다.
buffer = new uint8_t [buffer_length]
라인이 실제로 buffer_length 바이트를 할당하지 않는다고 걱정됩니다.
내 관심사가 보증되어 있습니까? 이 작업을 수행하는 더 좋은 방법이 있습니까? 예, 저는 이것에 대해 새로운 것입니다.
이 호출은 무엇입니까? 마이크로 컨트롤러 용 코드를 작성할 때 기본적으로 malloc을 얻지 못한다. malloc 구현을 제공하는 라이브러리를 사용하고 있습니까? –
'는'자주 AVR 프로그램의 malloc'없이 사용하지 않고 작성된 불구하고''으로 malloc()가()' –
angelatlarge
예 내가 사용하는 라이브러리는 #이 사용법 #include // ## 포함되어 있습니다 # test #include # 포함 # 포함 –
jwhitney