#include static elog_t *logger; static char arena[1024]; static void log_to_semihost(elog_entry_t *e, int len, void *ctx) { // TODO: 直接通过协议发送出去 elog_t 的所有缓存log uint32_t *p = (void *)e; int num = len / sizeof(uint32_t); if(STR_FIXED_LEN== MSGPTR_LEN(p[0])) { num = 2; } rt_kprintf("num:%d\n", num); rt_kprintf("len:%d\n", MSGPTR_LEN(p[0])); // 通过msg->id解出参数个数 for(int i = 0; i < num; i++) { if(0 == i) { rt_kprintf("0x%08X ", MSGPTR_MSG(p[i])); // 通过msg_id解出参数内容 continue; } else if (STR_FIXED_LEN == MSGPTR_LEN(p[0])) { rt_kprintf("%s ", &p[i]); // 通过msg_id解出参数内容 continue; } rt_kprintf("%d ", p[i]); } rt_kprintf("\n\n"); } int elog_test(void) { logger = elog_init(arena, sizeof(arena)); ELOG(logger, "Hello world %d\n", 10); // 把字符串和参数放到内存中,(通过字符串 + 长度算法生成msg_id)和会形成一条msg_id和长度 ELOG(logger, "test %d %d %d\n", 1, 2, 3); ELOG(logger, "no agrc test\n"); const char string[] = "this is test param string"; ELOG_STR(logger, "string test: %s\n", string); ELOG_PRINT(logger, "test:%d,-- %s,-- %d, test end\n", 89, string, 23); ELOG_PRINT(logger, "test %d %d %u\n", 1, 2, 3); elog_flush(logger, log_to_semihost, NULL); // 将内存中的日志刷新到文件,也可以是传输到上位机。也就是之前(字符串和参数)生成的msg_id和长度 return 0; }