mirror of
https://github.com/NevermindZZT/letter-shell.git
synced 2025-01-21 10:02:54 +08:00
新增 log组件适配shell锁
This commit is contained in:
parent
2c7ce324a6
commit
d8ea842719
14
README.md
14
README.md
@ -31,6 +31,7 @@
|
||||
- [尾行模式](#尾行模式)
|
||||
- [建议终端软件](#建议终端软件)
|
||||
- [命令遍历工具](#命令遍历工具)
|
||||
- [x86 demo](#x86-demo)
|
||||
|
||||
## 简介
|
||||
|
||||
@ -480,7 +481,7 @@ p1, SHELL_PARAM_FLOAT(p2), p3, SHELL_PARAM_FLOAT(p4));
|
||||
|
||||
## 权限系统说明
|
||||
|
||||
letter shell 3.x的权限管理同用户定义紧密相关,letter shell 3.x使用8个bit位表示命令权限,当用户和命令的权限按位与为真,或者命令权限为0时,表示该用户拥有此命令的权限,可以调用改命令
|
||||
letter shell 3.x的权限管理同用户定义紧密相关,letter shell 3.x使用8个bit位表示命令权限,当用户和命令的权限按位与为真,或者命令权限为0时,表示该用户拥有此命令的权限,可以调用该命令
|
||||
|
||||
## 锁说明
|
||||
|
||||
@ -551,3 +552,14 @@ python shellTools.py project
|
||||
```
|
||||
|
||||
注意:shellTools会遍历指定目录中所有文件,所以当工程中文件较多时,速度会比较慢,建议只用于遍历用户模块的目录
|
||||
|
||||
## x86 demo
|
||||
|
||||
letter shell 3.x提供了一个x86的demo,可以直接编译运行,其中包含了一条按键键值测试命令,可以测试按键键值,用于快捷键的定义,编译运行方法如下:
|
||||
|
||||
```sh
|
||||
mv src/shell_cfg.h src/shell_cfg.h.bak
|
||||
cd demo/x86-gcc/
|
||||
make
|
||||
./build/out
|
||||
```
|
||||
|
@ -16,10 +16,11 @@
|
||||
#if LOG_USING_COLOR == 1
|
||||
#define memPrintHead CSI(31) \
|
||||
" Offset: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F" \
|
||||
CSI(39)
|
||||
CSI(39) \
|
||||
"\r\n"
|
||||
#define memPrintAddr CSI(31)"0x%08x: "CSI(39)
|
||||
#else
|
||||
#define memPrintHead " Offset: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F"
|
||||
#define memPrintHead " Offset: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\r\n"
|
||||
#define memPrintAddr "0x%08x: "
|
||||
#endif
|
||||
|
||||
@ -92,7 +93,7 @@ logSetLevel, logSetLevel, set log level);
|
||||
* @param buffer buffer
|
||||
* @param len buffer长度
|
||||
*/
|
||||
void logWriteBuffer(Log *log, LogLevel level, char *buffer, short len)
|
||||
static void logWriteBuffer(Log *log, LogLevel level, char *buffer, short len)
|
||||
{
|
||||
if (log == LOG_ALL_OBJ)
|
||||
{
|
||||
@ -125,11 +126,25 @@ void logWrite(Log *log, LogLevel level, char *fmt, ...)
|
||||
va_list vargs;
|
||||
short len;
|
||||
|
||||
#if SHELL_USING_LOCK == 1
|
||||
if (log->shell)
|
||||
{
|
||||
SHELL_LOCK(log->shell);
|
||||
}
|
||||
#endif /* SHELL_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->shell)
|
||||
{
|
||||
SHELL_UNLOCK(log->shell);
|
||||
}
|
||||
#endif /* SHELL_USING_LOCK == 1 */
|
||||
}
|
||||
|
||||
|
||||
@ -137,27 +152,45 @@ void logWrite(Log *log, LogLevel level, char *fmt, ...)
|
||||
* @brief 16进制输出
|
||||
*
|
||||
* @param log log对象
|
||||
* @param level 日志级别
|
||||
* @param base 内存基址
|
||||
* @param length 长度
|
||||
*/
|
||||
void logHexDump(Log *log, void *base, unsigned int length)
|
||||
void logHexDump(Log *log, LogLevel level, void *base, unsigned int length)
|
||||
{
|
||||
unsigned char *address;
|
||||
unsigned int len = length;
|
||||
unsigned int len;
|
||||
unsigned int printLen = 0;
|
||||
unsigned char buf[12];
|
||||
|
||||
if (length == 0)
|
||||
if (length == 0 || log->level < level)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
logWrite(log, LOG_NONE, "memory of 0x%08x, size: %d:\r\n", (unsigned int)base, length);
|
||||
#if SHELL_USING_LOCK == 1
|
||||
if (log->shell)
|
||||
{
|
||||
SHELL_LOCK(log->shell);
|
||||
}
|
||||
#endif /* SHELL_USING_LOCK == 1 */
|
||||
|
||||
logWriteBuffer(log, LOG_NONE, "memory of 0x", sizeof("memory of 0x"));
|
||||
len = vsnprintf(buf, 11, "08x", (unsigned int)base);
|
||||
logWriteBuffer(log, LOG_NONE, buf, len);
|
||||
logWriteBuffer(log, LOG_NONE, ", size: ", sizeof(", size: "));
|
||||
len = vsnprintf(buf, 11, "%d", length);
|
||||
logWriteBuffer(log, LOG_NONE, buf, len);
|
||||
logWriteBuffer(log, LOG_NONE, ":\r\n", sizeof(":\r\n"));
|
||||
|
||||
|
||||
address = (unsigned char *)((unsigned int)base & (~0x0000000F));
|
||||
length += (unsigned int)base - (unsigned int)address;
|
||||
length = (length + 15) & (~0x0000000F);
|
||||
|
||||
logWrite(log, LOG_NONE, memPrintHead"\r\n");
|
||||
logWriteBuffer(log, LOG_NONE, memPrintHead, sizeof(memPrintHead));
|
||||
|
||||
len = length;
|
||||
|
||||
while (length)
|
||||
{
|
||||
@ -205,10 +238,17 @@ void logHexDump(Log *log, void *base, unsigned int length)
|
||||
length -= 16;
|
||||
printLen = 0;
|
||||
}
|
||||
|
||||
#if SHELL_USING_LOCK == 1
|
||||
if (log->shell)
|
||||
{
|
||||
SHELL_UNLOCK(log->shell);
|
||||
}
|
||||
#endif /* SHELL_USING_LOCK == 1 */
|
||||
}
|
||||
SHELL_EXPORT_CMD(
|
||||
SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC)|SHELL_CMD_DISABLE_RETURN,
|
||||
hexdump, logHexDump, hex dump\r\n hexdump [log] [base] [len]);
|
||||
hexdump, logHexDump, hex dump\r\n hexdump [log] [level] [base] [len]);
|
||||
|
||||
#if SHELL_USING_COMPANION == 1
|
||||
void logSwitchLevel(Shell *shell)
|
||||
|
@ -182,10 +182,19 @@ typedef struct
|
||||
action; \
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 16进制输出到所有终端
|
||||
*
|
||||
* @param base 内存基址
|
||||
* @param length 长度
|
||||
*/
|
||||
#define logHexDumpAll(base, length) \
|
||||
logHexDump(LOG_ALL_OBJ, LOG_ALL, base, length)
|
||||
|
||||
void logRegister(Log *log, Shell *shell);
|
||||
void logUnRegister(Log *log);
|
||||
void logSetLevel(Log *log, LogLevel level);
|
||||
void logWrite(Log *log, LogLevel level, char *fmt, ...);
|
||||
void logHexDump(Log *log, void *base, unsigned int length);
|
||||
void logHexDump(Log *log, LogLevel level, void *base, unsigned int length);
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user