1
0
Fork 0
mirror of https://github.com/iNavFlight/inav.git synced 2025-07-23 16:25:26 +03:00

Initial cut on debug trace facilities

This commit is contained in:
Konstantin Sharlaimov (DigitalEntity) 2018-01-26 12:05:00 +10:00
parent c31acda500
commit 2f677f007d
6 changed files with 79 additions and 7 deletions

View file

@ -15,14 +15,68 @@
* along with Cleanflight. If not, see <http://www.gnu.org/licenses/>. * along with Cleanflight. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include "stdint.h" #include <stdbool.h>
#include <stdint.h>
#include <stdarg.h>
#include <ctype.h>
#include "build/debug.h"
#include "debug.h" #include "common/printf.h"
#include "drivers/serial.h"
int16_t debug[DEBUG16_VALUE_COUNT]; #include "drivers/time.h"
uint8_t debugMode; #include "io/serial.h"
#ifdef DEBUG_SECTION_TIMES #ifdef DEBUG_SECTION_TIMES
timeUs_t sectionTimes[2][4]; timeUs_t sectionTimes[2][4];
#endif #endif
int16_t debug[DEBUG16_VALUE_COUNT];
uint8_t debugMode;
#if defined(USE_DEBUG_TRACE)
static serialPort_t * tracePort = NULL;
void debugTraceInit(void)
{
const serialPortConfig_t *portConfig = findSerialPortConfig(FUNCTION_DEBUG_TRACE);
if (!portConfig) {
return false;
}
tracePort = openSerialPort(portConfig->identifier, FUNCTION_DEBUG_TRACE, NULL, NULL, baudRates[BAUD_921600], MODE_TX, SERIAL_NOT_INVERTED);
if (!tracePort)
return;
DEBUG_TRACE_SYNC("Debug trace facilities initialized");
}
static void debugTracePutp(void *p, char ch)
{
(void)p;
serialWrite(tracePort, ch);
}
void debugTracePrintf(bool synchronous, const char *format, ...)
{
char timestamp[16];
if (!tracePort)
return;
// Write timestamp
tfp_sprintf(timestamp, "[%10d] ", micros());
serialPrint(tracePort, timestamp);
// Write message
va_list va;
va_start(va, format);
tfp_format(NULL, debugTracePutp, format, va);
if (synchronous) {
waitForSerialPortToFinishTransmitting(tracePort);
}
va_end(va);
// Write newline
serialPrint(tracePort, "\r\n");
}
#endif

View file

@ -57,3 +57,13 @@ typedef enum {
DEBUG_FLOW_RAW, DEBUG_FLOW_RAW,
DEBUG_COUNT DEBUG_COUNT
} debugType_e; } debugType_e;
#if defined(USE_DEBUG_TRACE)
void debugTraceInit(void);
void debugTracePrintf(bool synchronous, const char *format, ...);
#define DEBUG_TRACE(fmt, ...) debugTracePrintf(false, fmt, ##__VA_ARGS__)
#define DEBUG_TRACE_SYNC(fmt, ...) debugTracePrintf(true, fmt, ##__VA_ARGS__)
#else
#define DEBUG_TRACE(fmt, ...)
#define DEBUG_TRACE_SYNC(fmt, ...)
#endif

View file

@ -255,6 +255,12 @@ void init(void)
serialInit(feature(FEATURE_SOFTSERIAL), SERIAL_PORT_NONE); serialInit(feature(FEATURE_SOFTSERIAL), SERIAL_PORT_NONE);
#endif #endif
#if defined(USE_DEBUG_TRACE)
// Debug trace uses serial output, so we only can init it after serial port is ready
// From this point on we can use DEBUG_TRACE() to produce real-time debugging information
debugTraceInit();
#endif
#ifdef USE_SERVOS #ifdef USE_SERVOS
servosInit(); servosInit();
mixerUpdateStateFlags(); // This needs to be called early to allow pwm mapper to use information about FIXED_WING state mixerUpdateStateFlags(); // This needs to be called early to allow pwm mapper to use information about FIXED_WING state

View file

@ -46,6 +46,7 @@ typedef enum {
FUNCTION_VTX_TRAMP = (1 << 12), // 4096 FUNCTION_VTX_TRAMP = (1 << 12), // 4096
FUNCTION_UAV_INTERCONNECT = (1 << 13), // 8192 FUNCTION_UAV_INTERCONNECT = (1 << 13), // 8192
FUNCTION_OPTICAL_FLOW = (1 << 14), // 16384 FUNCTION_OPTICAL_FLOW = (1 << 14), // 16384
FUNCTION_DEBUG_TRACE = (1 << 15), // 32768
} serialPortFunction_e; } serialPortFunction_e;
typedef enum { typedef enum {

View file

@ -19,7 +19,7 @@
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "build/debug.h"
#include "drivers/serial.h" #include "drivers/serial.h"
#include "drivers/serial_softserial.h" #include "drivers/serial_softserial.h"

View file

@ -62,6 +62,7 @@
#define NAV_FIXED_WING_LANDING #define NAV_FIXED_WING_LANDING
#define AUTOTUNE_FIXED_WING #define AUTOTUNE_FIXED_WING
#define USE_ASYNC_GYRO_PROCESSING #define USE_ASYNC_GYRO_PROCESSING
#define USE_DEBUG_TRACE
#define USE_BOOTLOG #define USE_BOOTLOG
#define BOOTLOG_DESCRIPTIONS #define BOOTLOG_DESCRIPTIONS
#define USE_STATS #define USE_STATS