打印

单片机调试输出日志

[复制链接]
4674|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 | 只看该作者
/* Use global logger */
#define LGDFT NULL

#if LOG_LEVEL >= LOG_LEVEL_ERROR
#define LOG_ERR(logger,tag,text...)                             \
    do {                                                        \
        Logger::getInstance()->**ut(logger,                   \
            Logger::getInstance()->logFmt(                      \
                "ERR ", tag, __FILE__, __LINE__, text));        \
    } while(0)
#else
#define LOG_ERR(logger,tag,text...) do {} while(0)
#endif


#if LOG_LEVEL >= LOG_LEVEL_WARNING
#define LOG_WARN(logger,tag,text...)                            \
    do {                                                        \
        Logger::getInstance()->**ut(logger,                   \
            Logger::getInstance()->logFmt(                      \
                "WARN ", tag, __FILE__, __LINE__, text));       \
    } while(0)
#else
#define LOG_WARN(tag,text...) do {} while(0)
#endif

#if LOG_LEVEL >= LOG_LEVEL_DEBUG     
#define LOG_DBG(logger,tag,text...)                             \
    do {                                                        \
        Logger::getInstance()->**ut(logger,                   \
            Logger::getInstance()->logFmt(                      \
                "DBG ", tag, __FILE__, __LINE__, text));        \
    } while(0)
#else
#define LOG_DBG(tag,text...) do {} while(0)
#endif

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

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
反质子 + 1
5
反质子|  楼主 | 2012-7-9 14:40 | 只看该作者
嘿嘿  还是 狼锅给力哇  分都给你了

使用特权

评论回复
6
yewuyi| | 2012-7-9 14:55 | 只看该作者
PC编程和MCU编程没啥本质区别,PC编程使用的手法,在MCU上基本都能实现,只不过有没有必要而已。

使用特权

评论回复
7
反质子|  楼主 | 2012-7-9 15:40 | 只看该作者
恩  叶公说的对,思想都差不多

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

等我改一下  老狼的 源码,改成C风格的

使用特权

评论回复
8
原野之狼| | 2012-7-9 16:40 | 只看该作者
恩  叶公说的对,思想都差不多

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

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

使用特权

评论回复
9
反质子|  楼主 | 2012-7-10 17:37 | 只看该作者
这个是个好主意  我可以把完整版分享出来  不过LZ也得把修改之后的代码分享出来 然后写篇文档介绍一下
原野之狼 发表于 2012-7-9 16:40



额,我贴出一个C风格的,可以实现 文件名/行号/函数名/输出类型/标签/一个整型变量的值

使用特权

评论回复
10
NE5532| | 2012-7-10 17:42 | 只看该作者
每天一个压缩包,注释里面随便写,一目了然。

使用特权

评论回复
11
反质子|  楼主 | 2012-7-10 18:10 | 只看该作者
哈哈 NE3个5  大牛

每天一个压缩包 是版本管理最好的办法不

使用特权

评论回复
12
NE5532| | 2012-7-10 18:14 | 只看该作者
哈哈 NE3个5  大牛

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


还是要看多大的工程,人少可以,人多没试过。

使用特权

评论回复
13
原野之狼| | 2012-7-10 19:29 | 只看该作者
版本控制才是正道:lol

使用特权

评论回复
14
dlyt_test001| | 2012-7-11 11:08 | 只看该作者
去弄个版本控制软件,方便管理。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

12

主题

338

帖子

0

粉丝