選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

elog_test.c 1.5KB

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