mbv: debugging the async app

This commit is contained in:
2025-06-27 12:58:43 -07:00
parent e4936abb53
commit e7b38fb560
8 changed files with 339 additions and 33 deletions

View File

@@ -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);
}