mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-13 19:40:31 +03:00
CLI - prevent serial overflow (#14251)
use serialWriteBufBlocking for cli, busy-waiting if TX buffer is full
This commit is contained in:
parent
d63726f928
commit
b96c0b69cb
3 changed files with 14 additions and 1 deletions
|
@ -6896,7 +6896,7 @@ void cliEnter(serialPort_t *serialPort, bool interactive)
|
||||||
setPrintfSerialPort(cliPort);
|
setPrintfSerialPort(cliPort);
|
||||||
}
|
}
|
||||||
|
|
||||||
bufWriterInit(&cliWriterDesc, cliWriteBuffer, sizeof(cliWriteBuffer), (bufWrite_t)serialWriteBufShim, serialPort);
|
bufWriterInit(&cliWriterDesc, cliWriteBuffer, sizeof(cliWriteBuffer), (bufWrite_t)serialWriteBufBlockingShim, serialPort);
|
||||||
cliErrorWriter = cliWriter = &cliWriterDesc;
|
cliErrorWriter = cliWriter = &cliWriterDesc;
|
||||||
|
|
||||||
if (interactive) {
|
if (interactive) {
|
||||||
|
|
|
@ -129,8 +129,20 @@ void serialWriteBuf(serialPort_t *instance, const uint8_t *data, int count)
|
||||||
serialEndWrite(instance);
|
serialEndWrite(instance);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void serialWriteBufBlocking(serialPort_t *instance, const uint8_t *data, int count)
|
||||||
|
{
|
||||||
|
while (serialTxBytesFree(instance) < (uint32_t)count) /* NOP */;
|
||||||
|
serialWriteBuf(instance, data, count);
|
||||||
|
}
|
||||||
|
|
||||||
void serialWriteBufShim(void *instance, const uint8_t *data, int count)
|
void serialWriteBufShim(void *instance, const uint8_t *data, int count)
|
||||||
{
|
{
|
||||||
serialWriteBuf((serialPort_t *)instance, data, count);
|
serialWriteBuf((serialPort_t *)instance, data, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void serialWriteBufBlockingShim(void *instance, const uint8_t *data, int count)
|
||||||
|
{
|
||||||
|
serialWriteBufBlocking(instance, data, count);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -150,5 +150,6 @@ uint32_t serialGetBaudRate(serialPort_t *instance);
|
||||||
|
|
||||||
// A shim that adapts the bufWriter API to the serialWriteBuf() API.
|
// A shim that adapts the bufWriter API to the serialWriteBuf() API.
|
||||||
void serialWriteBufShim(void *instance, const uint8_t *data, int count);
|
void serialWriteBufShim(void *instance, const uint8_t *data, int count);
|
||||||
|
void serialWriteBufBlockingShim(void *instance, const uint8_t *data, int count);
|
||||||
void serialBeginWrite(serialPort_t *instance);
|
void serialBeginWrite(serialPort_t *instance);
|
||||||
void serialEndWrite(serialPort_t *instance);
|
void serialEndWrite(serialPort_t *instance);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue