AP_HAL_ChibiOS: use structure for writing out WDOG,MON message

This commit is contained in:
Peter Barker 2022-04-04 15:54:12 +10:00 committed by Peter Barker
parent a546bc797c
commit 00de10d796
2 changed files with 113 additions and 29 deletions

View File

@ -0,0 +1,77 @@
#pragma once
#include <AP_Logger/LogStructure.h>
#define LOG_IDS_FROM_HAL_CHIBIOS \
LOG_MON_MSG, \
LOG_WDOG_MSG
// @LoggerMessage: MON
// @Description: Main loop performance monitoring message.
// @Field: TimeUS: Time since system startup
// @Field: Dly: Loop delay so far
// @Field: Tsk: Current task
// @Field: IErr: Internal error mask
// @Field: IErrCnt: Count of internal error occurances
// @Field: IErrLn: Internal Error line
// @Field: MM: MAVLink message currently being processed
// @Field: MC: MAVLink command currently being processed
// @Field: SmLn: If semaphore taken, line of semaphore take call
// @Field: SPICnt: count of SPI transactions
// @Field: I2CCnt: count of i2c transactions
struct PACKED log_MON {
LOG_PACKET_HEADER;
uint64_t time_us;
uint32_t loop_delay;
int8_t current_task;
uint32_t internal_error_mask;
uint16_t internal_error_count;
uint16_t internal_error_line;
uint16_t mavmsg;
uint16_t mavcmd;
uint16_t semline;
uint32_t spicnt;
uint32_t i2ccnt;
};
// @LoggerMessage: WDOG
// @Description: Watchdog diagnostics
// @Field: TimeUS: Time since system startup
// @Field: Tsk: current task number
// @Field: IE: internal error mast
// @Field: IEC: internal error count
// @Field: IEL: line internal error was raised on
// @Field: MvMsg: mavlink message being acted on
// @Field: MvCmd: mavlink command being acted on
// @Field: SmLn: line semaphore was taken on
// @Field: FL: fault_line
// @Field: FT: fault_type
// @Field: FA: fault address
// @Field: FP: fault thread priority
// @Field: ICSR: ICS regiuster
// @Field: LR: long return address
// @Field: TN: Thread name
struct PACKED log_WDOG {
LOG_PACKET_HEADER;
uint64_t time_us;
int8_t scheduler_task;
uint32_t internal_errors;
uint16_t internal_error_count;
uint16_t internal_error_last_line;
uint16_t last_mavlink_msgid;
uint16_t last_mavlink_cmd;
uint16_t semaphore_line;
uint16_t fault_line;
uint16_t fault_type;
uint32_t fault_addr;
uint8_t fault_thd_prio;
uint32_t fault_icsr;
uint32_t fault_lr;
char thread_name4[4];
};
#define LOG_STRUCTURE_FROM_HAL_CHIBIOS \
{ LOG_MON_MSG, sizeof(log_MON), \
"MON","QIbIHHHHHII","TimeUS,Dly,Tsk,IErr,IErrCnt,IErrLn,MM,MC,SmLn,SPICnt,I2CCnt", "s----------", "F----------", false }, \
{ LOG_WDOG_MSG, sizeof(log_WDOG), \
"WDOG","QbIHHHHHHHIBIIn","TimeUS,Tsk,IE,IEC,IEL,MvMsg,MvCmd,SmLn,FL,FT,FA,FP,ICSR,LR,TN", "s--------------", "F--------------", false },

View File

@ -410,19 +410,22 @@ void Scheduler::_monitor_thread(void *arg)
#if HAL_LOGGING_ENABLED
const AP_HAL::Util::PersistentData &pd = hal.util->persistent_data;
if (AP_Logger::get_singleton()) {
AP::logger().Write("MON", "TimeUS,LDelay,Task,IErr,IErrCnt,IErrLn,MavMsg,MavCmd,SemLine,SPICnt,I2CCnt", "QIbIHHHHHII",
AP_HAL::micros64(),
loop_delay,
pd.scheduler_task,
pd.internal_errors,
pd.internal_error_count,
pd.internal_error_last_line,
pd.last_mavlink_msgid,
pd.last_mavlink_cmd,
pd.semaphore_line,
pd.spi_count,
pd.i2c_count);
}
const struct log_MON mon{
LOG_PACKET_HEADER_INIT(LOG_MON_MSG),
time_us : AP_HAL::micros64(),
loop_delay : loop_delay,
current_task : pd.scheduler_task,
internal_error_mask : pd.internal_errors,
internal_error_count : pd.internal_error_count,
internal_error_line : pd.internal_error_last_line,
mavmsg : pd.last_mavlink_msgid,
mavcmd : pd.last_mavlink_cmd,
semline : pd.semaphore_line,
spicnt : pd.spi_count,
i2ccnt : pd.i2c_count
};
AP::logger().WriteCriticalBlock(&mon, sizeof(mon));
}
#endif
}
if (loop_delay >= 500 && !sched->in_expected_delay()) {
@ -435,22 +438,26 @@ void Scheduler::_monitor_thread(void *arg)
log_wd_counter = 0;
// log watchdog message once a second
const AP_HAL::Util::PersistentData &pd = hal.util->last_persistent_data;
AP::logger().WriteCritical("WDOG", "TimeUS,Tsk,IE,IEC,IEL,MvMsg,MvCmd,SmLn,FL,FT,FA,FP,ICSR,LR,TN", "QbIHHHHHHHIBIIn",
AP_HAL::micros64(),
pd.scheduler_task,
pd.internal_errors,
pd.internal_error_count,
pd.internal_error_last_line,
pd.last_mavlink_msgid,
pd.last_mavlink_cmd,
pd.semaphore_line,
pd.fault_line,
pd.fault_type,
pd.fault_addr,
pd.fault_thd_prio,
pd.fault_icsr,
pd.fault_lr,
pd.thread_name4);
struct log_WDOG wdog{
LOG_PACKET_HEADER_INIT(LOG_WDOG_MSG),
time_us : AP_HAL::micros64(),
scheduler_task : pd.scheduler_task,
internal_errors : pd.internal_errors,
internal_error_count : pd.internal_error_count,
internal_error_last_line : pd.internal_error_last_line,
last_mavlink_msgid : pd.last_mavlink_msgid,
last_mavlink_cmd : pd.last_mavlink_cmd,
semaphore_line : pd.semaphore_line,
fault_line : pd.fault_line,
fault_type : pd.fault_type,
fault_addr : pd.fault_addr,
fault_thd_prio : pd.fault_thd_prio,
fault_icsr : pd.fault_icsr,
fault_lr : pd.fault_lr
};
memcpy(wdog.thread_name4, pd.thread_name4, ARRAY_SIZE(wdog.thread_name4));
AP::logger().WriteCriticalBlock(&wdog, sizeof(wdog));
}
#endif // HAL_LOGGING_ENABLED