转载自 https://blog.csdn.net/qq_41680042/article/details/120844574
1. 在Core目录下新建一个Dev目录,添加log.h和log.c
2. 将log.h和log.c添加到项目编译列表
选择Project -> Properties
3. log.h
#ifndef __LOG_H_
#define __LOG_H_
#include <stdarg.h>
#define OPEN_LOG 1
#define LOG_LEVEL LOG_DEBUG
typedef enum{
LOG_DEBUG = 0,
LOG_INFO,
LOG_WARN,
LOG_ERROR,
} E_LOG_LEVEL;
void EM_LOG(const int level, const char* fun, const int line, const char* fmt, ...);
#define EMLOG(level, fmt, ...) EM_LOG(level, __FUNCTION__, __LINE__, fmt, ##__VA_ARGS__)
#endif
4. log.c
#include "log.h"
#include <stdio.h>
char* EM_LOG_LEVEL_GET(const int level)
{
if (level == LOG_DEBUG) {
return "DEBUG";
} else if (level == LOG_INFO) {
return "INFO";
} else if (level == LOG_WARN) {
return "WARN";
} else if (level == LOG_ERROR) {
return "ERROR";
}
return "UNKNOW";
}
void EM_LOG(const int level, const char* fun, const int line, const char* fmt, ...)
{
#ifdef OPEN_LOG
va_list arg;
va_start(arg, fmt);
char buf[50] = {0};
vsnprintf(buf, sizeof(buf), fmt, arg);
va_end(arg);
if (level >= LOG_LEVEL) {
printf("[%-5s] [%s %4d] %s \r\n", EM_LOG_LEVEL_GET(level), fun, line, buf);
}
#endif
}
- 在usart.c添加重定向,可以使用printf打印
/* USER CODE BEGIN 0 */
#if defined(__GNUC__)
int _write(int fd, char * ptr, int len)
{
HAL_UART_Transmit(&huart2, (uint8_t *) ptr, len, HAL_MAX_DELAY);
return len;
}
#endif
/* USER CODE END 0 */
- main.c
/* USER CODE BEGIN Includes */
#include "log.h"
/* USER CODE END Includes */
在while里可以用EMLOG打印
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
//HAL_UART_Transmit(&huart4, "Hello world\n", 14, 0xffff);
EMLOG(LOG_DEBUG,"while start");
HAL_Delay(500);
}