Preliminary addition of static memory allocations for packet buffers.

Fixed(?) DDS frequency calculation on-chip.
This commit is contained in:
Stephen Olesen 2015-07-02 01:24:55 -06:00
parent d2dc9adbc0
commit 80a1741575
3 changed files with 29 additions and 6 deletions

View File

@ -24,6 +24,10 @@ volatile unsigned long lastRx = 0;
#define T_BIT ((unsigned int)(9600/1200))
#ifdef PACKET_PREALLOCATE
SimpleFIFO<AFSK::Packet *,PPOOL_SIZE> preallocPool;
#endif
void AFSK::Encoder::process() {
// Check what clock pulse we're on
if(bitClock == 0) { // We are onto our next bit timing
@ -396,11 +400,16 @@ AFSK::Packet *AFSK::PacketBuffer::getPacket() volatile {
void AFSK::Packet::init(unsigned short dlen) {
//data = (unsigned char *)buf;
ready = 0;
freeData = 1; //freeData;
#ifdef PACKET_PREALLOCATE
freeData = 0;
maxLen = 128; // Put it here instead
#else
freeData = 1;
dataPtr = (uint8_t *)malloc(dlen+16);
maxLen = dlen; // Put it here instead
#endif
type = PACKET_STATIC;
len = 0; // We had a length, but don't put it here.
maxLen = dlen; // Put it here instead
dataPtr = (uint8_t *)malloc(dlen+16);
dataPos = dataPtr;
readPos = dataPtr;
fcs = 0xffff;
@ -411,7 +420,11 @@ AFSK::Packet *AFSK::PacketBuffer::makePacket(unsigned short dlen) {
AFSK::Packet *p;
ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
//Packet *p = findPooledPacket();
#ifdef PACKET_PREALLOCATE
p = preallocPool.dequeue();
#else
p = new Packet(); //(Packet *)malloc(sizeof(Packet));
#endif
if(p) // If allocated
p->init(dlen);
}
@ -421,8 +434,11 @@ AFSK::Packet *AFSK::PacketBuffer::makePacket(unsigned short dlen) {
// Free a packet struct, mainly convenience
void AFSK::PacketBuffer::freePacket(Packet *p) {
if(!p)
return;
return;
ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
#ifdef PACKET_PREALLOCATE
preallocPool.enqueue(p);
#else
p->free();
/*unsigned char i;
for(i = 0; i < PPOOL_SIZE; ++i)
@ -431,6 +447,7 @@ void AFSK::PacketBuffer::freePacket(Packet *p) {
if(i < PPOOL_SIZE)
pStatus &= ~(1<<i);*/
delete p;
#endif
}
}

8
AFSK.h
View File

@ -14,6 +14,7 @@
#define PACKET_BUFFER_SIZE 2
#define PACKET_STATIC 0
//#define PACKET_PREALLOCATE
// This is with all the digis, two addresses, framing and full payload
// Two more bytes are added for HDLC_ESCAPEs
@ -105,7 +106,12 @@ public:
return (fcs == 0xF0B8);
}
private:
uint8_t *dataPtr, *dataPos, *readPos;
#ifdef PACKET_PREALLOCATE
uint8_t dataPtr[128];
#else
uint8_t *dataPtr;
#endif
uint8_t *dataPos, *readPos;
unsigned short fcs;
};

View File

@ -73,7 +73,7 @@ void DDS::setFrequency(unsigned short freq) {
}
} else {
// BUG: Step rate isn't properly calculated here, it gets the wrong frequency
stepRate = (freq/(refclk+DDS_REFCLK_OFFSET)) * pow(2,ACCUMULATOR_BITS);
stepRate = pow(2,ACCUMULATOR_BITS)*freq / (refclk+DDS_REFCLK_OFFSET);
}
}