单片机调试输出日志

[复制链接]
5413|13
 楼主| 反质子 发表于 2012-7-9 11:23 | 显示全部楼层 |阅读模式
观察上位机软件开发人员经常会输出很多运行日志、调试日志啊等

好像没啥人介绍过单片机肿么输出日志哇,比如用AVR单片机举例~

#define __AVR_FILE__ (( __FILE__ ))
#define __AVR_LINE__ (( __LINE__ ))

这样是用编译器的指令来知道源文件名和程序行号,然后就可以输出一些特定的打印信息,这样是不是调试起来更方便,求大侠们有没这么做过的?能给出源代码么 嘿嘿
yewuyi 发表于 2012-7-9 11:48 | 显示全部楼层
谁说没有?
MAP,OBJ等等不都类似吗?
 楼主| 反质子 发表于 2012-7-9 11:50 | 显示全部楼层
叶公 我去搜搜看看哇
原野之狼 发表于 2012-7-9 13:58 | 显示全部楼层
  1. /* Use global logger */
  2. #define LGDFT NULL

  3. #if LOG_LEVEL >= LOG_LEVEL_ERROR
  4. #define LOG_ERR(logger,tag,text...)                             \
  5.     do {                                                        \
  6.         Logger::getInstance()->**ut(logger,                   \
  7.             Logger::getInstance()->logFmt(                      \
  8.                 "ERR ", tag, __FILE__, __LINE__, text));        \
  9.     } while(0)
  10. #else
  11. #define LOG_ERR(logger,tag,text...) do {} while(0)
  12. #endif


  13. #if LOG_LEVEL >= LOG_LEVEL_WARNING
  14. #define LOG_WARN(logger,tag,text...)                            \
  15.     do {                                                        \
  16.         Logger::getInstance()->**ut(logger,                   \
  17.             Logger::getInstance()->logFmt(                      \
  18.                 "WARN ", tag, __FILE__, __LINE__, text));       \
  19.     } while(0)
  20. #else
  21. #define LOG_WARN(tag,text...) do {} while(0)
  22. #endif

  23. #if LOG_LEVEL >= LOG_LEVEL_DEBUG     
  24. #define LOG_DBG(logger,tag,text...)                             \
  25.     do {                                                        \
  26.         Logger::getInstance()->**ut(logger,                   \
  27.             Logger::getInstance()->logFmt(                      \
  28.                 "DBG ", tag, __FILE__, __LINE__, text));        \
  29.     } while(0)
  30. #else
  31. #define LOG_DBG(tag,text...) do {} while(0)
  32. #endif

  33. #if LOG_LEVEL >= LOG_LEVEL_INFO
  34. #define LOG_INF(logger,tag,text...)                             \
  35.     do {                                                        \
  36.         Logger::getInstance()->**ut(logger,                   \
  37.             Logger::getInstance()->logFmt(                      \
  38.                 "INFO ", tag, __FILE__, __LINE__, text));       \
  39.     } while(0)
  40. #else
  41. #define LOG_INF(tag,text...) do {} while(0)
  42. #endif
这个管用不?

评分

参与人数 1威望 +1 收起 理由
反质子 + 1

查看全部评分

 楼主| 反质子 发表于 2012-7-9 14:40 | 显示全部楼层
嘿嘿  还是 狼锅给力哇  分都给你了
yewuyi 发表于 2012-7-9 14:55 | 显示全部楼层
PC编程和MCU编程没啥本质区别,PC编程使用的手法,在MCU上基本都能实现,只不过有没有必要而已。
 楼主| 反质子 发表于 2012-7-9 15:40 | 显示全部楼层
恩  叶公说的对,思想都差不多

我觉得这样输出日志可能对单片机调试起到一些作用,相信大多数的非老鸟都没这样用过吧

等我改一下  老狼的 源码,改成C风格的
原野之狼 发表于 2012-7-9 16:40 | 显示全部楼层
恩  叶公说的对,思想都差不多

我觉得这样输出日志可能对单片机调试起到一些作用,相信大多数的非老鸟都没这样用过吧

等我改一下  老狼的 源码,改成C风格的 ...
反质子 发表于 2012-7-9 15:40
这个是个好主意  我可以把完整版分享出来  不过LZ也得把修改之后的代码分享出来 然后写篇文档介绍一下
 楼主| 反质子 发表于 2012-7-10 17:37 | 显示全部楼层
这个是个好主意  我可以把完整版分享出来  不过LZ也得把修改之后的代码分享出来 然后写篇文档介绍一下
原野之狼 发表于 2012-7-9 16:40



额,我贴出一个C风格的,可以实现 文件名/行号/函数名/输出类型/标签/一个整型变量的值
NE5532 发表于 2012-7-10 17:42 | 显示全部楼层
每天一个压缩包,注释里面随便写,一目了然。
 楼主| 反质子 发表于 2012-7-10 18:10 | 显示全部楼层
哈哈 NE3个5  大牛

每天一个压缩包 是版本管理最好的办法不
NE5532 发表于 2012-7-10 18:14 | 显示全部楼层
哈哈 NE3个5  大牛

每天一个压缩包 是版本管理最好的办法不
反质子 发表于 2012-7-10 18:10


还是要看多大的工程,人少可以,人多没试过。
原野之狼 发表于 2012-7-10 19:29 | 显示全部楼层
版本控制才是正道:lol
dlyt_test001 发表于 2012-7-11 11:08 | 显示全部楼层
去弄个版本控制软件,方便管理。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:我就是下一个程序匠人~

12

主题

338

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部