From f547eb36080dacf275cd94fc3ddfb4c618c587fa Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Tue, 25 Aug 2009 14:30:42 +0000 Subject: [PATCH] Optimized Endpoint_Read_Word_* and Pipe_Read_Word_* macros to reduce compiled size. Fixed Programmer's Notepad project file to reflect new location of AVRISP project. --- LUFA.pnproj | 2 +- LUFA/Drivers/USB/LowLevel/Endpoint.h | 24 ++++++++++++++++-------- LUFA/Drivers/USB/LowLevel/Pipe.h | 24 ++++++++++++++++-------- LUFA/ManPages/ChangeLog.txt | 1 + Projects/AVRISP/AVRISP.c | 2 +- 5 files changed, 35 insertions(+), 18 deletions(-) diff --git a/LUFA.pnproj b/LUFA.pnproj index 56f1fd65c8..14cb60fde0 100644 --- a/LUFA.pnproj +++ b/LUFA.pnproj @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/LUFA/Drivers/USB/LowLevel/Endpoint.h b/LUFA/Drivers/USB/LowLevel/Endpoint.h index 977c63cfb1..652ee80426 100644 --- a/LUFA/Drivers/USB/LowLevel/Endpoint.h +++ b/LUFA/Drivers/USB/LowLevel/Endpoint.h @@ -511,12 +511,16 @@ static inline uint16_t Endpoint_Read_Word_LE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint16_t Endpoint_Read_Word_LE(void) { - uint16_t Data; + union + { + uint16_t Word; + uint8_t Bytes[2]; + } Data; - Data = UEDATX; - Data |= (((uint16_t)UEDATX) << 8); + Data.Bytes[0] = UEDATX; + Data.Bytes[1] = UEDATX; - return Data; + return Data.Word; } /** Reads two bytes from the currently selected endpoint's bank in big endian format, for OUT @@ -529,12 +533,16 @@ static inline uint16_t Endpoint_Read_Word_BE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint16_t Endpoint_Read_Word_BE(void) { - uint16_t Data; + union + { + uint16_t Word; + uint8_t Bytes[2]; + } Data; - Data = (((uint16_t)UEDATX) << 8); - Data |= UEDATX; + Data.Bytes[1] = UEDATX; + Data.Bytes[0] = UEDATX; - return Data; + return Data.Word; } /** Writes two bytes to the currently selected endpoint's bank in little endian format, for IN diff --git a/LUFA/Drivers/USB/LowLevel/Pipe.h b/LUFA/Drivers/USB/LowLevel/Pipe.h index 3931f85301..beee2eb85a 100644 --- a/LUFA/Drivers/USB/LowLevel/Pipe.h +++ b/LUFA/Drivers/USB/LowLevel/Pipe.h @@ -566,12 +566,16 @@ static inline uint16_t Pipe_Read_Word_LE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint16_t Pipe_Read_Word_LE(void) { - uint16_t Data; + union + { + uint16_t Word; + uint8_t Bytes[2]; + } Data; - Data = UPDATX; - Data |= (((uint16_t)UPDATX) << 8); + Data.Bytes[0] = UPDATX; + Data.Bytes[1] = UPDATX; - return Data; + return Data.Word; } /** Reads two bytes from the currently selected pipe's bank in big endian format, for OUT @@ -584,12 +588,16 @@ static inline uint16_t Pipe_Read_Word_BE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint16_t Pipe_Read_Word_BE(void) { - uint16_t Data; + union + { + uint16_t Word; + uint8_t Bytes[2]; + } Data; - Data = (((uint16_t)UPDATX) << 8); - Data |= UPDATX; + Data.Bytes[1] = UPDATX; + Data.Bytes[0] = UPDATX; - return Data; + return Data.Word; } /** Writes two bytes to the currently selected pipe's bank in little endian format, for IN diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt index 6c4fea5688..981ff1ded1 100644 --- a/LUFA/ManPages/ChangeLog.txt +++ b/LUFA/ManPages/ChangeLog.txt @@ -24,6 +24,7 @@ * - Added explicit attribute masks to the device mode demos' descriptors * - Added return values to the CDC and MIDI class driver transmit functions * - Added extra masks to the SPI driver, changed SPI_Init() so that the clock polarity and sample modes can be set + * - Optimized Endpoint_Read_Word_* and Pipe_Read_Word_* macros to reduce compiled size * * Fixed: * - Fixed possible lockup in the CDC device class driver, when the host sends data that is a multiple of the diff --git a/Projects/AVRISP/AVRISP.c b/Projects/AVRISP/AVRISP.c index d4ae910f63..ce16aebfa8 100644 --- a/Projects/AVRISP/AVRISP.c +++ b/Projects/AVRISP/AVRISP.c @@ -84,7 +84,7 @@ void SetupHardware(void) ADC_StartReading(VTARGET_ADC_CHANNEL | ADC_RIGHT_ADJUSTED | ADC_REFERENCE_AVCC); #endif - /* Millisecond timer initialization for timeout checking */ + /* Millisecond timer initialization for timeouts and delays */ OCR0A = ((F_CPU / 64) / 1000); TCCR0A = (1 << WGM01); TCCR0B = ((1 << CS01) | (1 << CS00));