HAL_AVR: switched to 8 bit mask

max buffer size is now 256. This makes serial faster
This commit is contained in:
Andrew Tridgell 2013-01-10 16:29:34 +11:00
parent 03b26c7d6d
commit 130aaae168
2 changed files with 9 additions and 9 deletions

View File

@ -61,8 +61,8 @@ void AVRUARTDriver::begin(uint32_t baud, uint16_t rxSpace, uint16_t txSpace) {
if (0 == txSpace) if (0 == txSpace)
txSpace = _txBuffer->mask + 1; txSpace = _txBuffer->mask + 1;
if (rxSpace == (_rxBuffer->mask + 1) && if (rxSpace == (_rxBuffer->mask + 1U) &&
txSpace == (_txBuffer->mask + 1)) { txSpace == (_txBuffer->mask + 1U)) {
// avoid re-allocating the buffers if possible // avoid re-allocating the buffers if possible
need_allocate = false; need_allocate = false;
*_ucsrb &= ~(_portEnableBits | _portTxBits); *_ucsrb &= ~(_portEnableBits | _portTxBits);
@ -179,7 +179,7 @@ void AVRUARTDriver::flush(void) {
} }
size_t AVRUARTDriver::write(uint8_t c) { size_t AVRUARTDriver::write(uint8_t c) {
uint16_t i; uint8_t i;
if (!_open) // drop bytes if not open if (!_open) // drop bytes if not open
return 0; return 0;
@ -212,7 +212,7 @@ size_t AVRUARTDriver::write(uint8_t c) {
bool AVRUARTDriver::_allocBuffer(Buffer *buffer, uint16_t size) bool AVRUARTDriver::_allocBuffer(Buffer *buffer, uint16_t size)
{ {
uint16_t mask; uint8_t mask;
uint8_t shift; uint8_t shift;
// init buffer state // init buffer state
@ -224,7 +224,7 @@ bool AVRUARTDriver::_allocBuffer(Buffer *buffer, uint16_t size)
// Note that we ignore requests for more than BUFFER_MAX space. // Note that we ignore requests for more than BUFFER_MAX space.
for (shift = 1; (1U << shift) < min(_max_buffer_size, size); shift++) for (shift = 1; (1U << shift) < min(_max_buffer_size, size); shift++)
; ;
mask = (1 << shift) - 1; mask = (1U << shift) - 1;
// If the descriptor already has a buffer allocated we need to take // If the descriptor already has a buffer allocated we need to take
// care of it. // care of it.

View File

@ -64,8 +64,8 @@ public:
/// ///
/// Public so the interrupt handlers can see it /// Public so the interrupt handlers can see it
struct Buffer { struct Buffer {
volatile uint16_t head, tail; ///< head and tail pointers volatile uint8_t head, tail; ///< head and tail pointers
uint16_t mask; ///< buffer size mask for pointer wrap uint8_t mask; ///< buffer size mask for pointer wrap
uint8_t *bytes; ///< pointer to allocated buffer uint8_t *bytes; ///< pointer to allocated buffer
}; };
private: private:
@ -119,7 +119,7 @@ private:
/// @note if we could bring the max size down to 256, the mask and head/tail /// @note if we could bring the max size down to 256, the mask and head/tail
/// pointers in the buffer could become uint8_t. /// pointers in the buffer could become uint8_t.
/// ///
static const uint16_t _max_buffer_size = 512; static const uint16_t _max_buffer_size = 256;
}; };
extern AP_HAL_AVR::AVRUARTDriver::Buffer __AVRUARTDriver__rxBuffer[]; extern AP_HAL_AVR::AVRUARTDriver::Buffer __AVRUARTDriver__rxBuffer[];
@ -131,7 +131,7 @@ extern AP_HAL_AVR::AVRUARTDriver::Buffer __AVRUARTDriver__txBuffer[];
ISR(_RXVECTOR, ISR_BLOCK) \ ISR(_RXVECTOR, ISR_BLOCK) \
{ \ { \
uint8_t c; \ uint8_t c; \
uint16_t i; \ uint8_t i; \
\ \
/* read the byte as quickly as possible */ \ /* read the byte as quickly as possible */ \
c = _UDR; \ c = _UDR; \