OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 12996|回复: 8

debug();这个函数是干什么的?

[复制链接]

19

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
218
金钱
218
注册时间
2011-8-8
在线时间
0 小时
发表于 2011-10-14 10:00:47 | 显示全部楼层 |阅读模式
看到别人的程序,很多都有:


#ifdef DEBUG
  debug();
#endif


但是我看DEBUG和debug()函数都没有定义,这样这句话就永远不执行了。
我想问的是,这样写是不是有什么其他的用处?
世界上有10种人,一种是懂二进制的,另一种是不懂二进制的。。。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

19

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
218
金钱
218
注册时间
2011-8-8
在线时间
0 小时
 楼主| 发表于 2011-10-14 10:02:16 | 显示全部楼层
哦,后边还有:

#ifdef  DEBUG
/*******************************************************************************
* Function Name: assert_failed
* Description : Reports the name of the source file and the source line number
*                  where the assert_param error has occurred.
* Input       : - file: pointer to the source file name
*                  - line: assert_param error line source number
* Output      : None
* Return      : None
*******************************************************************************/
void assert_failed(u8* file, u32 line)

  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

  /* Infinite loop */
  while (1)
  {
  }
}
#endif
世界上有10种人,一种是懂二进制的,另一种是不懂二进制的。。。
回复 支持 反对

使用道具 举报

19

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
218
金钱
218
注册时间
2011-8-8
在线时间
0 小时
 楼主| 发表于 2011-10-14 10:05:47 | 显示全部楼层
希望不要再有人给我说这是条件编译了,我知道这是条件编译,只是想知道什么时候会有DEBUG的定义,有DEBUG的定义后,执行debug();这个函数能干什么?
后边这个半截的错误返回程序就不用解释了。
世界上有10种人,一种是懂二进制的,另一种是不懂二进制的。。。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2011-10-14 10:46:22 | 显示全部楼层
回复【楼主位】sixear:
---------------------------------
方便输出调试信息吧.
如果使能debug,你自己可以在debug函数里面输出想要看的debug信息.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

42

主题

568

帖子

0

精华

高级会员

Rank: 4

积分
784
金钱
784
注册时间
2010-12-19
在线时间
5 小时
发表于 2011-10-14 10:56:07 | 显示全部楼层
你可以把该代码注释掉。
看过很多高手写的代码。一般都如原子说的调试信息。
#define printf debug
要使用printf这个函数,需要加头文件#include<stdio.h>。然后把stdio.h中的extern char putchar (char);
然后你把char putchar (char)函数,修改成你相应的UARSTx.这样DEBUG出来的调试信息就出现在你相应的UARSTx里。
一个上蹿下跳的猴子~~~
回复 支持 反对

使用道具 举报

19

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
218
金钱
218
注册时间
2011-8-8
在线时间
0 小时
 楼主| 发表于 2011-10-14 15:15:49 | 显示全部楼层
额~原来还要自己写啊。
世界上有10种人,一种是懂二进制的,另一种是不懂二进制的。。。
回复 支持 反对

使用道具 举报

2

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2011-1-16
在线时间
4 小时
发表于 2011-10-21 17:37:10 | 显示全部楼层
留了个格式在那里,你应该知足了。
回复 支持 反对

使用道具 举报

34

主题

805

帖子

4

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1865
金钱
1865
注册时间
2011-3-29
在线时间
140 小时
发表于 2011-10-21 18:08:42 | 显示全部楼层
回复【6楼】sixear:
额~原来还要自己写啊。
---------------------------------
C是很底层的,特别是嵌入式用到的C编译器。
业余程序玩家。
回复 支持 反对

使用道具 举报

33

主题

984

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8021
金钱
8021
注册时间
2014-8-13
在线时间
1595 小时
发表于 2017-11-8 13:03:48 | 显示全部楼层
本帖最后由 mack13013 于 2017-11-8 13:07 编辑
sixear 发表于 2011-10-14 10:05
希望不要再有人给我说这是条件编译了,我知道这是条件编译,只是想知道什么时候会有DEBUG的定义,有DEBUG的 ...

这个地方嵌入式不怎么好操作的。如果你在windows或者linux下编程的话,因为系统环境会提供非常多的信息API以及操作API给你(比如当前线程ID、堆栈位置、调用模块、冲突位置、exception描述以及定位码之类、dump什么的),你在你的debug{}中就可以写一个通用的debug程序来报告出现错误的现场了,极其有利于开发调试。

要想使用这个东西,一般是先定义一下DEBUG宏,如下:
[mw_shl_code=c,true]#define DEBUG[/mw_shl_code]

然后你就可以完成一个通用的debug{}函数,比如在windows下可以这样做:
[mw_shl_code=cpp,true]#ifdef DEBUG

  debug()

        DWORD dwErrCode = ::GetLastError();
        TRACE("Error occurred.GetLastError code:%d.\n");


#endif
[/mw_shl_code]

在嵌入式环境下,这个通用的debug{}就非常难写了,因为你能获取的信息不是很多的,即使你能获取到比较多的信息,写一个“通用的”debug也不太容易。

当然这个程序在软件层面上的位置越高就越好写,比如如果使用了ucos或其他的嵌入式os,os本身也会提供一定的通用信息出来,可以将他放到这个里面来。这种情况下就比“裸奔”要容易处理一些。


回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-6 20:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表