关于assert()函数 有部分书籍将其翻译成为断言,其在程序编写起着重要作用。主要为了辅助程序员编写调试程序,为调试提供出错信息指示。下面简单说一下其在stellaris固件库里的应用。 StellarisWare中ASSERT的定义如下: #ifdef DEBUG
#define ASSERT(expr) { \
if(!(expr)) \ { \__error__(__FILE__, __LINE__); \
} \ } #else#define ASSERT(expr)
#endif__error__(__FILE__, __LINE__)函数;传递文件名称和ASSERT宏调用的行编号。如果断言出错了会有相应的错误信息的文件名和行编号显示在console中
但是我也可以将其更改,如果出错则会打印到监视窗口,示例如下: #ifdef DEBUG#define ASSERT(expr) { \
if(!(expr)) \ { \printf("\n\r ASSERT: File[%s],Line[%d],Func[%s].\n\r", \
__FILE__,__LINE__,__FUNCTION__);\
} \ } #else#define ASSERT(expr)
#endif 当然,我们在使用assert()函数前一定要预定义DEBUG 或者 #define DEBUG IAR编译器自带的assert.h文件也支持,其会将错误信息打印到 terminal I/O窗口上。 i = 0; assert(!(i == 0)); //此处检验除数是否为零,是零则报错,并终止程序 i = 100 / i; 程序运行到此处后打印出来的错误信息。 参考:http://www.deyisupport.com.sixxs.org/question_answer/f/57/t/6314.aspx