1
0
mirror of https://github.com/NevermindZZT/letter-shell.git synced 2025-01-21 10:02:54 +08:00

优化 log锁可独立配置功能

This commit is contained in:
靳春幸 2021-12-27 10:06:51 +08:00
parent e70221db15
commit 8e968b8d3b
2 changed files with 36 additions and 23 deletions

View File

@ -27,7 +27,7 @@
Log *logList[LOG_MAX_NUMBER] = {0};
static char logBuffer[LOG_BUFFER_SIZE];
#if SHELL_USING_LOCK == 1
#if LOG_USING_LOCK == 1
/**
* @brief log对象
* @param log log对象
@ -40,16 +40,16 @@ static void logLock(Log *log)
{
if (logList[i] && logList[i]->active)
{
if (logList[i]->shell)
if (logList[i]->lock)
{
SHELL_LOCK(logList[i]->shell);
LOG_LOCK(logList[i]);
}
}
}
}
else if (log->shell)
else if (log->lock)
{
SHELL_LOCK(log->shell);
LOG_LOCK(log);
}
}
@ -65,19 +65,19 @@ static void logUnlock(Log *log)
{
if (logList[i] && logList[i]->active)
{
if (logList[i]->shell)
if (logList[i]->unlock)
{
SHELL_UNLOCK(logList[i]->shell);
LOG_UNLOCK(logList[i]);
}
}
}
}
else if (log->shell)
else if (log->unlock)
{
SHELL_UNLOCK(log->shell);
LOG_UNLOCK(log);
}
}
#endif /* SHELL_USING_LOCK == 1 */
#endif /* LOG_USING_LOCK == 1 */
/**
* @brief log对象
@ -154,9 +154,9 @@ logSetLevel, logSetLevel, set log level\r\n logSetLevel [log] [level]);
*/
static void logWriteBuffer(Log *log, LogLevel level, char *buffer, short len)
{
#if SHELL_USING_LOCK == 1
#if LOG_USING_LOCK == 1
logLock(log);
#endif /* SHELL_USING_LOCK == 1 */
#endif /* LOG_USING_LOCK == 1 */
if (log == LOG_ALL_OBJ)
{
for (short i = 0; i < LOG_MAX_NUMBER; i++)
@ -173,9 +173,9 @@ static void logWriteBuffer(Log *log, LogLevel level, char *buffer, short len)
{
log->write(logBuffer, len);
}
#if SHELL_USING_LOCK == 1
#if LOG_USING_LOCK == 1
logUnlock(log);
#endif /* SHELL_USING_LOCK == 1 */
#endif /* LOG_USING_LOCK == 1 */
}
/**
@ -191,17 +191,17 @@ void logWrite(Log *log, LogLevel level, char *fmt, ...)
va_list vargs;
short len;
#if SHELL_USING_LOCK == 1
#if LOG_USING_LOCK == 1
logLock(log);
#endif /* SHELL_USING_LOCK == 1 */
#endif /* LOG_USING_LOCK == 1 */
va_start(vargs, fmt);
len = vsnprintf(logBuffer, LOG_BUFFER_SIZE - 1, fmt, vargs);
va_end(vargs);
logWriteBuffer(log, level, logBuffer, len);
#if SHELL_USING_LOCK == 1
#if LOG_USING_LOCK == 1
logUnlock(log);
#endif /* SHELL_USING_LOCK == 1 */
#endif /* LOG_USING_LOCK == 1 */
}
/**
@ -222,9 +222,9 @@ void logHexDump(Log *log, LogLevel level, void *base, unsigned int length)
{
return;
}
#if SHELL_USING_LOCK == 1
#if LOG_USING_LOCK == 1
logLock(log);
#endif /* SHELL_USING_LOCK == 1 */
#endif /* LOG_USING_LOCK == 1 */
len = snprintf(logBuffer, LOG_BUFFER_SIZE - 1, "memory of 0x%08x, size: %d:\r\n%s",
(unsigned int)base, length, memPrintHead);
logWriteBuffer(log, level, logBuffer, len);
@ -281,9 +281,9 @@ void logHexDump(Log *log, LogLevel level, void *base, unsigned int length)
length -= 16;
printLen = 0;
}
#if SHELL_USING_LOCK == 1
#if LOG_USING_LOCK == 1
logUnlock(log);
#endif /* SHELL_USING_LOCK == 1 */
#endif /* LOG_USING_LOCK == 1 */
}
#if SHELL_USING_COMPANION == 1
SHELL_EXPORT_CMD_AGENCY(

View File

@ -17,6 +17,7 @@
#define SHELL_COMPANION_ID_LOG -2
#define LOG_USING_LOCK 0
#define LOG_BUFFER_SIZE 256 /**< log输出缓冲大小 */
#define LOG_USING_COLOR 1 /**< 是否使用颜色 */
#define LOG_MAX_NUMBER 5 /**< 允许注册的最大log对象数量 */
@ -29,6 +30,14 @@
#define LOG_ENABLE 1 /**< 使能log */
#endif
#if LOG_USING_LOCK == 1
#define LOG_LOCK(log) log->lock(log)
#define LOG_UNLOCK(log) log->unlock(log)
#else
#define LOG_LOCK(log)
#define LOG_UNLOCK(log)
#endif /* LOG_USING_LOCK == 1 */
#define LOG_ALL_OBJ ((Log *)-1) /**< 所有已注册的log对象 */
/**
@ -92,11 +101,15 @@ typedef enum
* @brief log对象定义
*
*/
typedef struct
typedef struct log_def
{
void (*write)(char *, short); /**< 写buffer */
char active; /**< 是否激活 */
LogLevel level; /**< 日志级别 */
#if LOG_USING_LOCK == 1
int (*lock)(struct log_def *); /**< log 加锁 */
int (*unlock)(struct log_def *); /**< log 解锁 */
#endif /** LOG_USING_LOCK == 1 */
Shell *shell; /**< 关联shell对象 */
} Log;