Remove redundant type information for bitfield elements, other than the signed/unsignedness of the element.

Change type of USB_SelectedPipe and USB_SelectedEndpoint for the AVR32 UC3 architecture to uint32_t to reduce the compiled code size.
This commit is contained in:
Dean Camera 2011-04-10 06:43:02 +00:00
parent d08116b02f
commit 852b5e612d
18 changed files with 195 additions and 183 deletions

View file

@ -99,7 +99,7 @@
#define pgm_read_byte(x) *x
#define memcmp_P(...) memcmp(__VA_ARGS__)
#define memcpy_P(...) memcpy(__VA_ARGS__)
// ==================================================
// =================================================
typedef uint32_t uint_reg_t;
@ -159,6 +159,8 @@
* be set as a breakpoint in the resulting code. Useful for debugging purposes, where the optimiser
* removes/reorders code to the point where break points cannot reliably be set.
*
* \note This macro is not available for all architectures.
*
* \ingroup Group_Debugging
*/
#define JTAG_DEBUG_POINT() __asm__ __volatile__ ("NOP" ::)
@ -166,27 +168,17 @@
/** Defines an explicit JTAG break point in the resulting binary via the assembly \c BREAK statement. When
* a JTAG is used, this causes the program execution to halt when reached until manually resumed.
*
* \note This macro is not available for all architectures.
*
* \ingroup Group_Debugging
*/
#define JTAG_DEBUG_BREAK() __asm__ __volatile__ ("BREAK" ::)
#if !defined(pgm_read_ptr) || defined(__DOXYGEN__)
/** Reads a pointer out of PROGMEM space on the AVR8 architecture. This is currently a wrapper for the
* avr-libc \c pgm_read_ptr() macro with a \c void* cast, so that its value can be assigned directly
* to a pointer variable or used in pointer arithmetic without further casting in C. In a future
* avr-libc distribution this will be part of the standard API and will be implemented in a more formal
* manner.
*
* \param[in] Addr Address of the pointer to read.
*
* \return Pointer retrieved from PROGMEM space.
*/
#define pgm_read_ptr(Addr) (void*)pgm_read_word(Addr)
#endif
/** Macro for testing condition "x" and breaking via \ref JTAG_DEBUG_BREAK() if the condition is false.
*
* \param[in] Condition Condition that will be evaluated,
* \note This macro is not available for all architectures.
*
* \param[in] Condition Condition that will be evaluated.
*
* \ingroup Group_Debugging
*/
@ -198,6 +190,8 @@
*
* The output takes the form "{FILENAME}: Function {FUNCTION NAME}, Line {LINE NUMBER}: Assertion {Condition} failed."
*
* \note This macro is not available for all architectures.
*
* \param[in] Condition Condition that will be evaluated,
*
* \ingroup Group_Debugging
@ -205,6 +199,22 @@
#define STDOUT_ASSERT(Condition) MACROS{ if (!(x)) { printf_P(PSTR("%s: Function \"%s\", Line %d: " \
"Assertion \"%s\" failed.\r\n"), \
__FILE__, __func__, __LINE__, #Condition); } }MACROE
#if !defined(pgm_read_ptr) || defined(__DOXYGEN__)
/** Reads a pointer out of PROGMEM space on the AVR8 architecture. This is currently a wrapper for the
* avr-libc \c pgm_read_ptr() macro with a \c void* cast, so that its value can be assigned directly
* to a pointer variable or used in pointer arithmetic without further casting in C. In a future
* avr-libc distribution this will be part of the standard API and will be implemented in a more formal
* manner.
*
* \note This macro is not available for all architectures.
*
* \param[in] Address Address of the pointer to read.
*
* \return Pointer retrieved from PROGMEM space.
*/
#define pgm_read_ptr(Addr) (void*)pgm_read_word(Address)
#endif
#endif
/** Forces GCC to use pointer indirection (via the device's pointer register pairs) when accessing the given
@ -231,8 +241,8 @@
* Interrupt handlers written using this macro may still need to be registered with the microcontroller's
* Interrupt Controller (if present) before they will properly handle incoming interrupt events.
*
* \note This is supplied on some architectures where the standard library does not include a valid
* definition. If an existing definition exists, the definition here will be ignored.
* \note This macro is only supplied on some architectures, where the standard library does not include a valid
* definition. If an existing definition exists, the alternative definition here will be ignored.
*
* \ingroup Group_GlobalInt
*

View file

@ -272,12 +272,12 @@
*/
typedef struct
{
unsigned char Command : 4; /**< Upper nibble of the MIDI command being sent or received in the event packet. */
unsigned char CableNumber : 4; /**< Virtual cable number of the event being sent or received in the given MIDI interface. */
unsigned Command : 4; /**< Upper nibble of the MIDI command being sent or received in the event packet. */
unsigned CableNumber : 4; /**< Virtual cable number of the event being sent or received in the given MIDI interface. */
uint8_t Data1; /**< First byte of data in the MIDI event. */
uint8_t Data2; /**< Second byte of data in the MIDI event. */
uint8_t Data3; /**< Third byte of data in the MIDI event. */
uint8_t Data1; /**< First byte of data in the MIDI event. */
uint8_t Data2; /**< Second byte of data in the MIDI event. */
uint8_t Data3; /**< Third byte of data in the MIDI event. */
} ATTR_PACKED MIDI_EventPacket_t;
/* Disable C linkage for C++ Compilers: */

View file

@ -289,23 +289,23 @@
*/
typedef struct
{
uint8_t ResponseCode;
uint8_t ResponseCode;
uint8_t SegmentNumber;
uint8_t SegmentNumber;
unsigned char SenseKey : 4;
unsigned char Reserved : 1;
unsigned char ILI : 1;
unsigned char EOM : 1;
unsigned char FileMark : 1;
unsigned SenseKey : 4;
unsigned Reserved : 1;
unsigned ILI : 1;
unsigned EOM : 1;
unsigned FileMark : 1;
uint8_t Information[4];
uint8_t AdditionalLength;
uint8_t CmdSpecificInformation[4];
uint8_t AdditionalSenseCode;
uint8_t AdditionalSenseQualifier;
uint8_t FieldReplaceableUnitCode;
uint8_t SenseKeySpecific[3];
uint8_t Information[4];
uint8_t AdditionalLength;
uint8_t CmdSpecificInformation[4];
uint8_t AdditionalSenseCode;
uint8_t AdditionalSenseQualifier;
uint8_t FieldReplaceableUnitCode;
uint8_t SenseKeySpecific[3];
} ATTR_PACKED SCSI_Request_Sense_Response_t;
/** \brief Mass Storage Class SCSI Inquiry Structure.
@ -318,35 +318,35 @@
*/
typedef struct
{
unsigned char DeviceType : 5;
unsigned char PeripheralQualifier : 3;
unsigned DeviceType : 5;
unsigned PeripheralQualifier : 3;
unsigned char Reserved : 7;
unsigned char Removable : 1;
unsigned Reserved : 7;
unsigned Removable : 1;
uint8_t Version;
uint8_t Version;
unsigned char ResponseDataFormat : 4;
unsigned char Reserved2 : 1;
unsigned char NormACA : 1;
unsigned char TrmTsk : 1;
unsigned char AERC : 1;
unsigned ResponseDataFormat : 4;
unsigned Reserved2 : 1;
unsigned NormACA : 1;
unsigned TrmTsk : 1;
unsigned AERC : 1;
uint8_t AdditionalLength;
uint8_t Reserved3[2];
uint8_t AdditionalLength;
uint8_t Reserved3[2];
unsigned char SoftReset : 1;
unsigned char CmdQue : 1;
unsigned char Reserved4 : 1;
unsigned char Linked : 1;
unsigned char Sync : 1;
unsigned char WideBus16Bit : 1;
unsigned char WideBus32Bit : 1;
unsigned char RelAddr : 1;
unsigned SoftReset : 1;
unsigned CmdQue : 1;
unsigned Reserved4 : 1;
unsigned Linked : 1;
unsigned Sync : 1;
unsigned WideBus16Bit : 1;
unsigned WideBus32Bit : 1;
unsigned RelAddr : 1;
uint8_t VendorID[8];
uint8_t ProductID[16];
uint8_t RevisionID[4];
uint8_t VendorID[8];
uint8_t ProductID[16];
uint8_t RevisionID[4];
} ATTR_PACKED SCSI_Inquiry_Response_t;
/* Disable C linkage for C++ Compilers: */

View file

@ -91,6 +91,7 @@
} Config; /**< Config data for the USB class interface within the device. All elements in this section
* <b>must</b> be set or the interface will fail to enumerate and operate correctly.
*/
struct
{
// No state information for this class

View file

@ -39,7 +39,7 @@
uint8_t USB_ControlEndpointSize = ENDPOINT_CONTROLEP_DEFAULT_SIZE;
#endif
volatile uint8_t USB_SelectedEndpoint = ENDPOINT_CONTROLEP;
volatile uint32_t USB_SelectedEndpoint = ENDPOINT_CONTROLEP;
volatile uint8_t* USB_EndpointFIFOPos[ENDPOINT_TOTAL_ENDPOINTS];
bool Endpoint_ConfigureEndpoint_Prv(const uint8_t Number,

View file

@ -155,7 +155,7 @@
const uint32_t UECFGXData);
/* External Variables: */
extern volatile uint8_t USB_SelectedEndpoint;
extern volatile uint32_t USB_SelectedEndpoint;
extern volatile uint8_t* USB_EndpointFIFOPos[];
#endif

View file

@ -37,7 +37,7 @@
uint8_t USB_ControlPipeSize = PIPE_CONTROLPIPE_DEFAULT_SIZE;
volatile uint8_t USB_SelectedPipe = PIPE_CONTROLPIPE;
volatile uint32_t USB_SelectedPipe = PIPE_CONTROLPIPE;
volatile uint8_t* USB_PipeFIFOPos[PIPE_TOTAL_PIPES];
bool Pipe_ConfigurePipe(const uint8_t Number,

View file

@ -102,7 +102,7 @@
#define PIPE_HSB_ADDRESS_SPACE_SIZE (64 * 1024UL)
/* External Variables: */
extern volatile uint8_t USB_SelectedPipe;
extern volatile uint32_t USB_SelectedPipe;
extern volatile uint8_t* USB_PipeFIFOPos[];
#endif

View file

@ -55,6 +55,7 @@
* - IR Remote to Keyboard decoder: http://netzhansa.blogspot.com/2010/04/our-living-room-hi-fi-setup-needs-mp3.html
* - LED Panel controller: http://projects.peterpolidoro.net/caltech/panelscontroller/panelscontroller.htm
* - LUFA powered DDR dance mat (French): http://logicien-parfait.fr/dokuwiki/doku.php?id=projet:ddr_repair
* - MIDI Theremin: http://baldwisdom.com/usb-midi-controller-theremin-style-on-arduino-uno/
* - Motherboard BIOS flasher: http://www.coreboot.org/InSystemFlasher
* - Multi-button Joystick (French): http://logicien-parfait.fr/dokuwiki/doku.php?id=projet:joystick
* - Nikon wireless camera remote control (Norwegian): http://hekta.org/~hpe1119/