stm32f4: Add for-loop guard for transmit_packet xfers < 4 chars.
This commit is contained in:
parent
28ccc8bd0b
commit
5645d44127
|
@ -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.
|
||||||
|
|
Loading…
Reference in New Issue