stm32f4: Add for-loop guard for transmit_packet xfers < 4 chars.
This commit is contained in:
		| @@ -428,9 +428,15 @@ static void transmit_packet(xfer_ctl_t * xfer, USB_OTG_INEndpointTypeDef * in_ep | |||||||
|   // Buffer might not be aligned to 32b, so we need to force alignment |   // Buffer might not be aligned to 32b, so we need to force alignment | ||||||
|   // by copying to a temp var. |   // by copying to a temp var. | ||||||
|   uint8_t * base = (xfer->buffer + xfer->queued_len); |   uint8_t * base = (xfer->buffer + xfer->queued_len); | ||||||
|   for(uint16_t i = 0; i < to_xfer_size_aligned; i += 4) { |  | ||||||
|     uint32_t tmp = base[i] | (base[i + 1] << 8) | (base[i + 2] << 16) | (base[i + 3] << 24); |   // This for loop always runs at least once- skip if less than 4 bytes | ||||||
|     (* tx_fifo) = tmp; |   // to send off. | ||||||
|  |   if(to_xfer_size >= 4) { | ||||||
|  |     for(uint16_t i = 0; i < to_xfer_size_aligned; i += 4) { | ||||||
|  |       uint32_t tmp = base[i] | (base[i + 1] << 8) | \ | ||||||
|  |         (base[i + 2] << 16) | (base[i + 3] << 24); | ||||||
|  |       (* tx_fifo) = tmp; | ||||||
|  |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   // Do not read beyond end of buffer if not divisible by 4. |   // Do not read beyond end of buffer if not divisible by 4. | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 William D. Jones
					William D. Jones