arm: async echo app

This commit is contained in:
2022-05-16 20:56:25 -07:00
parent 30d9a2d7c8
commit 932b8d4582
25 changed files with 3043 additions and 29 deletions

38
arm/trace.cc Normal file
View File

@@ -0,0 +1,38 @@
#include "trace.h"
#include <algorithm>
#include "itoa.h"
#include "lock.h"
#include "uart.h"
namespace tracing {
namespace {
constexpr size_t kTraceBufferSize = 256;
std::array<TraceEvent, kTraceBufferSize> buffer;
size_t write_ptr = 0;
} // namespace
void trace(int raw_event) { trace(static_cast<TraceEvent>(raw_event)); }
void trace(TraceEvent event) {
InterruptLock lock;
buffer[write_ptr] = event;
write_ptr = (write_ptr + 1) % buffer.size();
}
void dump() {
std::rotate(buffer.begin(), buffer.begin() + write_ptr, buffer.end());
char number[] = "00000000\r\n";
for (TraceEvent event : buffer) {
itoa(static_cast<int>(event), number);
UartSendCrash(number);
}
}
} // namespace tracing