|
|
@@ -5,9 +5,15 @@ static char arena[1024];
|
|
5
|
5
|
|
|
6
|
6
|
static void log_to_semihost(elog_entry_t *e, int len, void *ctx)
|
|
7
|
7
|
{
|
|
8
|
|
- // 发送出去
|
|
|
8
|
+ // TODO: 直接通过协议发送出去 elog_t 的所有缓存log
|
|
9
|
9
|
uint32_t *p = (void *)e;
|
|
10
|
10
|
int num = len / sizeof(uint32_t);
|
|
|
11
|
+
|
|
|
12
|
+ if(STR_FIXED_LEN== MSGPTR_LEN(p[0]))
|
|
|
13
|
+ {
|
|
|
14
|
+ num = 2;
|
|
|
15
|
+ }
|
|
|
16
|
+
|
|
11
|
17
|
rt_kprintf("num:%d\n", num);
|
|
12
|
18
|
rt_kprintf("len:%d\n", MSGPTR_LEN(p[0])); // 通过msg->id解出参数个数
|
|
13
|
19
|
|
|
|
@@ -18,6 +24,11 @@ static void log_to_semihost(elog_entry_t *e, int len, void *ctx)
|
|
18
|
24
|
rt_kprintf("0x%08X ", MSGPTR_MSG(p[i])); // 通过msg_id解出参数内容
|
|
19
|
25
|
continue;
|
|
20
|
26
|
}
|
|
|
27
|
+ else if (STR_FIXED_LEN == MSGPTR_LEN(p[0]))
|
|
|
28
|
+ {
|
|
|
29
|
+ rt_kprintf("%s ", &p[i]); // 通过msg_id解出参数内容
|
|
|
30
|
+ continue;
|
|
|
31
|
+ }
|
|
21
|
32
|
|
|
22
|
33
|
rt_kprintf("%d ", p[i]);
|
|
23
|
34
|
}
|
|
|
@@ -29,8 +40,13 @@ int elog_test(void)
|
|
29
|
40
|
{
|
|
30
|
41
|
logger = elog_init(arena, sizeof(arena));
|
|
31
|
42
|
ELOG(logger, "Hello world %d\n", 10); // 把字符串和参数放到内存中,(通过字符串 + 长度算法生成msg_id)和会形成一条msg_id和长度
|
|
32
|
|
- ELOG(logger, "test %d %d %c\n", 1, 2, 3);
|
|
|
43
|
+ ELOG(logger, "test %d %d %d\n", 1, 2, 3);
|
|
33
|
44
|
ELOG(logger, "no agrc test\n");
|
|
|
45
|
+ const char string[] = "this is test param string";
|
|
|
46
|
+ ELOG_STR(logger, "string test: %s\n", string);
|
|
|
47
|
+ ELOG_PRINT(logger, "test:%d,-- %s,-- %d, test end\n", 89, string, 23);
|
|
|
48
|
+
|
|
|
49
|
+ ELOG_PRINT(logger, "test %d %d %u\n", 1, 2, 3);
|
|
34
|
50
|
|
|
35
|
51
|
elog_flush(logger, log_to_semihost, NULL); // 将内存中的日志刷新到文件,也可以是传输到上位机。也就是之前(字符串和参数)生成的msg_id和长度
|
|
36
|
52
|
return 0;
|