環境:
主機:WIN10
開發環境:MDK5.12
說明:
為單片機設計了一套簡單的日志系統,通過日志系統提供的接口可以查看設備狀態,并進行一些基本的調試。
日志系統通過串口輸出,所以單片機需要準備一個串口供日志系統使用。注意串口發送不能用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
評論