Preliminary addition of static memory allocations for packet buffers.
Fixed(?) DDS frequency calculation on-chip.
This commit is contained in:
		
							parent
							
								
									d2dc9adbc0
								
							
						
					
					
						commit
						80a1741575
					
				
							
								
								
									
										23
									
								
								AFSK.cpp
								
								
								
								
							
							
						
						
									
										23
									
								
								AFSK.cpp
								
								
								
								
							| 
						 | 
				
			
			@ -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);
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			@ -423,6 +436,9 @@ void AFSK::PacketBuffer::freePacket(Packet *p) {
 | 
			
		|||
  if(!p)
 | 
			
		||||
    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
								
								
								
								
							
							
						
						
									
										8
									
								
								AFSK.h
								
								
								
								
							| 
						 | 
				
			
			@ -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;
 | 
			
		||||
  };
 | 
			
		||||
  
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										2
									
								
								DDS.cpp
								
								
								
								
							
							
						
						
									
										2
									
								
								DDS.cpp
								
								
								
								
							| 
						 | 
				
			
			@ -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);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue