Cache the USB_DeviceState variable internally in the library core when multiple checks are required in a single loop iteration, to reduce compiled code size.

This commit is contained in:
Dean Camera 2010-10-06 10:16:02 +00:00
parent 93793679c9
commit 3ae9e6042f
6 changed files with 30 additions and 23 deletions

View file

@ -8,13 +8,14 @@ uint8_t TEMPLATE_FUNC_NAME (void* Buffer,
while (Length)
{
if (Endpoint_IsSETUPReceived())
return ENDPOINT_RWCSTREAM_HostAborted;
uint8_t USB_DeviceState_LCL = USB_DeviceState;
if (USB_DeviceState == DEVICE_STATE_Unattached)
if (USB_DeviceState_LCL == DEVICE_STATE_Unattached)
return ENDPOINT_RWCSTREAM_DeviceDisconnected;
else if (USB_DeviceState == DEVICE_STATE_Suspended)
else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended)
return ENDPOINT_RWCSTREAM_BusSuspended;
else if (Endpoint_IsSETUPReceived())
return ENDPOINT_RWCSTREAM_HostAborted;
if (Endpoint_IsOUTReceived())
{
@ -30,9 +31,11 @@ uint8_t TEMPLATE_FUNC_NAME (void* Buffer,
while (!(Endpoint_IsINReady()))
{
if (USB_DeviceState == DEVICE_STATE_Unattached)
uint8_t USB_DeviceState_LCL = USB_DeviceState;
if (USB_DeviceState_LCL == DEVICE_STATE_Unattached)
return ENDPOINT_RWCSTREAM_DeviceDisconnected;
else if (USB_DeviceState == DEVICE_STATE_Suspended)
else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended)
return ENDPOINT_RWCSTREAM_BusSuspended;
}

View file

@ -11,17 +11,17 @@ uint8_t TEMPLATE_FUNC_NAME (const void* Buffer,
while (Length || LastPacketFull)
{
if (Endpoint_IsSETUPReceived())
return ENDPOINT_RWCSTREAM_HostAborted;
if (Endpoint_IsOUTReceived())
break;
uint8_t USB_DeviceState_LCL = USB_DeviceState;
if (USB_DeviceState == DEVICE_STATE_Unattached)
if (USB_DeviceState_LCL == DEVICE_STATE_Unattached)
return ENDPOINT_RWCSTREAM_DeviceDisconnected;
else if (USB_DeviceState == DEVICE_STATE_Suspended)
else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended)
return ENDPOINT_RWCSTREAM_BusSuspended;
else if (Endpoint_IsSETUPReceived())
return ENDPOINT_RWCSTREAM_HostAborted;
else if (Endpoint_IsOUTReceived())
break;
if (Endpoint_IsINReady())
{
uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint();
@ -40,9 +40,11 @@ uint8_t TEMPLATE_FUNC_NAME (const void* Buffer,
while (!(Endpoint_IsOUTReceived()))
{
if (USB_DeviceState == DEVICE_STATE_Unattached)
uint8_t USB_DeviceState_LCL = USB_DeviceState;
if (USB_DeviceState_LCL == DEVICE_STATE_Unattached)
return ENDPOINT_RWCSTREAM_DeviceDisconnected;
else if (USB_DeviceState == DEVICE_STATE_Suspended)
else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended)
return ENDPOINT_RWCSTREAM_BusSuspended;
}