mbv: debugging the async app
This commit is contained in:
@@ -27,6 +27,8 @@ std::array<std::byte, kUartTxBufferSize> tx_buffer = {};
|
||||
RingBuffer tx_ring_buffer{.buffer = tx_buffer};
|
||||
|
||||
XUartLite* uart0 = &uart0_inst;
|
||||
|
||||
bool sending;
|
||||
} // namespace
|
||||
|
||||
void InitUarts() {
|
||||
@@ -35,9 +37,12 @@ void InitUarts() {
|
||||
XUartLite_SetSendHandler(uart0, HandleUartTxFromIsr, nullptr);
|
||||
XUartLite_SetRecvHandler(uart0, HandleUartRxFromIsr, nullptr);
|
||||
XUartLite_EnableInterrupt(uart0);
|
||||
|
||||
sending = false;
|
||||
}
|
||||
|
||||
void UartWriteCrash(std::span<const std::byte> data) {
|
||||
XUartLite_DisableInterrupt(uart0);
|
||||
while (data.size() > 0) {
|
||||
while (XUartLite_IsSending(uart0)) {
|
||||
}
|
||||
@@ -48,6 +53,7 @@ void UartWriteCrash(std::span<const std::byte> data) {
|
||||
}
|
||||
while (XUartLite_IsSending(uart0)) {
|
||||
}
|
||||
XUartLite_EnableInterrupt(uart0);
|
||||
}
|
||||
|
||||
async::task<> UartWrite(std::span<const std::byte> data) {
|
||||
@@ -79,10 +85,11 @@ async::task<> UartWriteLoop(
|
||||
|
||||
{
|
||||
InterruptLock lock;
|
||||
if (!XUartLite_IsSending(uart0)) {
|
||||
if (!sending) {
|
||||
tracing::trace(tracing::TraceEvent::kUartSend);
|
||||
XUartLite_Send(uart0, tx_ring_buffer.RawReadPointer(),
|
||||
tx_ring_buffer.ContiguousAvailableData());
|
||||
sending = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -139,11 +146,13 @@ async::task<buffer> UartRead(int size) {
|
||||
}
|
||||
|
||||
void HandleUartTxFromIsr(void*, unsigned int transmitted) {
|
||||
sending = false;
|
||||
tx_ring_buffer.Pop(transmitted);
|
||||
if (tx_ring_buffer.AvailableData() > 0) {
|
||||
tracing::trace(tracing::TraceEvent::kUartSend);
|
||||
XUartLite_Send(uart0, tx_ring_buffer.RawReadPointer(),
|
||||
tx_ring_buffer.ContiguousAvailableData());
|
||||
sending = true;
|
||||
}
|
||||
async::resume(AwaitableType::kUartTx);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user