uarte malloc if buffer is not in SRAM
This commit is contained in:
parent
4015023e01
commit
1782ceab35
@ -203,7 +203,14 @@ size_t common_hal_busio_uart_write(busio_uart_obj_t *self, const uint8_t *data,
|
||||
nrfx_uarte_tx_abort(&self->uarte);
|
||||
}
|
||||
|
||||
(*errcode) = nrfx_uarte_tx(&self->uarte, data, len);
|
||||
// EasyDMA can only access SRAM
|
||||
uint8_t * tx_buf = (uint8_t*) data;
|
||||
if ( !nrfx_is_in_ram(data) ) {
|
||||
tx_buf = (uint8_t *) gc_alloc(len, false, false);
|
||||
memcpy(tx_buf, data, len);
|
||||
}
|
||||
|
||||
(*errcode) = nrfx_uarte_tx(&self->uarte, tx_buf, len);
|
||||
_VERIFY_ERR(*errcode);
|
||||
(*errcode) = 0;
|
||||
|
||||
@ -214,6 +221,10 @@ size_t common_hal_busio_uart_write(busio_uart_obj_t *self, const uint8_t *data,
|
||||
#endif
|
||||
}
|
||||
|
||||
if ( !nrfx_is_in_ram(data) ) {
|
||||
gc_free(tx_buf);
|
||||
}
|
||||
|
||||
return len;
|
||||
#endif
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user