mirror of
https://jihulab.com/mr-one/openpilot.git
synced 2026-10-28 05:23:46 +08:00
69 lines
1.5 KiB
C
69 lines
1.5 KiB
C
#pragma once
|
|
|
|
#include "board/drivers/drivers.h"
|
|
|
|
#define DEBUG_BUFFER_SIZE 0x400U
|
|
|
|
static char debug_buffer[DEBUG_BUFFER_SIZE];
|
|
static volatile uint16_t debug_write_ptr = 0;
|
|
static volatile uint16_t debug_read_ptr = 0;
|
|
|
|
bool debug_get_char(char *elem) {
|
|
bool ret = false;
|
|
|
|
ENTER_CRITICAL();
|
|
if (debug_write_ptr != debug_read_ptr) {
|
|
if (elem != NULL) *elem = debug_buffer[debug_read_ptr];
|
|
debug_read_ptr = (debug_read_ptr + 1U) % DEBUG_BUFFER_SIZE;
|
|
ret = true;
|
|
}
|
|
EXIT_CRITICAL();
|
|
|
|
return ret;
|
|
}
|
|
|
|
static void putch(const char a) {
|
|
ENTER_CRITICAL();
|
|
uint16_t next_write_ptr = (debug_write_ptr + 1U) % DEBUG_BUFFER_SIZE;
|
|
if (next_write_ptr == debug_read_ptr) {
|
|
// Drop the oldest byte when the buffer is full.
|
|
debug_read_ptr = (debug_read_ptr + 1U) % DEBUG_BUFFER_SIZE;
|
|
}
|
|
debug_buffer[debug_write_ptr] = a;
|
|
debug_write_ptr = next_write_ptr;
|
|
EXIT_CRITICAL();
|
|
}
|
|
|
|
void print(const char *a) {
|
|
for (const char *in = a; *in; in++) {
|
|
if (*in == '\n') putch('\r');
|
|
putch(*in);
|
|
}
|
|
}
|
|
|
|
static void puthx(uint32_t i, uint8_t len) {
|
|
const char c[] = "0123456789abcdef";
|
|
for (int pos = ((int)len * 4) - 4; pos > -4; pos -= 4) {
|
|
putch(c[(i >> (unsigned int)(pos)) & 0xFU]);
|
|
}
|
|
}
|
|
|
|
void puth(unsigned int i) {
|
|
puthx(i, 8U);
|
|
}
|
|
|
|
static void hexdump(const void *a, int l) {
|
|
if (a != NULL) {
|
|
for (int i=0; i < l; i++) {
|
|
if ((i != 0) && ((i & 0xf) == 0)) print("\n");
|
|
puthx(((const unsigned char*)a)[i], 2U);
|
|
print(" ");
|
|
}
|
|
}
|
|
print("\n");
|
|
}
|
|
|
|
static inline void puth4(unsigned int i) {
|
|
puthx(i, 4U);
|
|
}
|