环境:
主机:WIN10
开发环境:MDK5.12
MCU:STM32F407
阐明:
为单片机规划了一套简略的日志体系,经过日志体系供给的接口能够检查设备状况,并进行一些根本的调试。
日志体系经过串口输出,所以单片机需求预备一个串口供日志体系运用。留意串口发送不能用DMA发送(防止在在中止中打印日志形成的中止竞赛),接纳能够用DMA接纳。
功用:
翻开/封闭各个模块的调试输出
输入动作指令,让设备进行一些动作
打印体系运转日志
指令:
H:协助
O:调试输出全开
O1:翻开1号模块,翻开其他模块指令相似
F:调试输出全关
F1:封闭1号模块
I:输出体系日志
C:铲除体系日志
A1:履行1号动作,履行其他动作指令相似
源代码:
log.h:
/**
*Copyright(c),2015-2025
*@filelog.h
*@brief日志模块主文件
*@authorjdh
*@date2015/5/7
*@update2015/6/19
*@update2015/6/23
*@update2015/6/30
*@update2015/7/8
*@update2015/7/13
*@update2015/8/12
*@update2015/8/18
*@update2016/5/17
*@update2016/6/30
*@update2016/7/22
*@update2016/8/11
*@update2016/8/24
*@update2016/9/2
*@update2016/9/5
*@update2016/9/7
*@update2016/9/9
*/
#ifndef_LOG_H_
#define_LOG_H_
/*********************************************************************
*头文件
**********************************************************************/
#include“world.h”
#include“console.h”
/*********************************************************************
*宏界说
**********************************************************************/
/**
*@brief日志模块数量
*/
#defineNUM_LOG5
/**
*@brief模块编号
*/
#defineLOG_TEST0
#defineLOG_CLOCK1
#defineLOG_DW10002
#defineLOG_DW1000_STATUS3
#defineLOG_DEAL_BUS4
/*********************************************************************
*数据结构
**********************************************************************/
/**
*@brief日志
*/
struct_Log
{
//公有日志
//收到移动点数据次数
uint32_tnum_rf_rx;
//发送超时被删去点数
uint32_tnum_TIme_out_delete;
//RF发送次数
uint32_tnum_rf_tx;
//RF校时或分配事情次数
uint32_tnum_rf_TIme;
//RF随机信道发送次数
uint32_tnum_rf_random_tx;
//复位次数
uint32_tnum_reset;
//运转时刻,分度为0.5s
uint32_tTIme_run;
//收到同步脉冲计数
uint32_tnum_sync_pulse;
//收到422轮询/事情帧次数
uint32_tnum_bus_poll;
//收到422业务指令次数
uint32_tnum_bus_down_cmd;
//收到422业务指令中事情个数
uint32_tnum_bus_down_cmd_dot;
//收到有用的422帧次数
uint32_tnum_valid_bus;
//收到无效的422帧次数
uint32_tnum_invalid_bus;
//接纳时刻过错
uint32_tnum_TIme_error;
//私有日志
//dw1000芯片过错次数
uint32_tnum_dw1000_error[NUM_DW1000];
//接纳时刻过错
uint32_tnum_dw1000_time_error[NUM_DW1000];
//轮询超时被删去点数
uint32_tnum_poll_time_out_delete;
//接纳超时复位
uint32_tnum_dw1000_time_out_reset[NUM_DW1000];
//dw1000芯片状况过错次数
uint32_tnum_dw1000_status_error[NUM_DW1000];
};
/*********************************************************************
*函数
**********************************************************************/
/**
*@brief模块加载
*/
voidlog_load(void);
/**
*@brief读取日志
*@retval日志
*/
struct_Loglog_read(void);
/**
*@brief铲除日志
*/
voidlog_clear(void);
/**
*@brief收到移动点数据次数
*/
voidlog_write_num_rf_rx(void);
/**
*@brief发送超时被删去点数
*/
voidlog_write_num_time_out_delete(void);
/**
*@briefRF发送次数
*/
voidlog_write_num_rf_tx(void);
/**
*@briefRF校时或分配事情次数
*/
voidlog_write_num_rf_time(void);
/**
*@briefRF随机信道发送次数
*/
voidlog_write_num_rf_random_tx(void);
/**
*@brief复位次数
*/
voidlog_write_num_reset(void);
/**
*@brief运转时刻
*@paramadd_time:添加的时刻。单位:0.5s
*/
voidlog_write_time_run(uint32_tadd_time);
/**
*@brief收到同步脉冲计数
*/
voidlog_write_num_sync_pulse(void);
/**
*@brief收到422轮询/事情帧次数
*/
voidlog_write_num_bus_poll(void);
/**
*@brief收到422业务指令次数
*/
voidlog_write_num_bus_down_cmd(void);
/**
*@brief收到422业务指令中事情个数
*/
voidlog_write_num_bus_down_cmd_dot(void);
/**
*@brief收到有用的422帧次数
*/
voidlog_write_num_valid_bus(void);
/**
*@brief收到无效的422帧次数
*/
voidlog_write_num_invalid_bus(void);
/**
*@brief收到时刻过错
*/
voidlog_write_num_time_error(void);
/**
*@briefdw1000芯片过错次数
*@paramindex:模块序号,从0开端
*/
voidlog_write_num_dw1000_error(uint8_tindex);
/**
*@briefdw1000芯片接纳时刻过错次数
*@paramindex:模块序号,从0开端
*/
voidlog_write_num_dw1000_time_error(uint8_tindex);
/**
*@brief轮询超时被删去点数
*/
voidlog_write_num_poll_time_out_delete(void);
/**
* @brief dw100