单片机对日志系统的设计

控制/MCU

1875人已加入

描述

环境:

主机: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

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分