重新审视Xilins Driver API:ASSERT一探

原创 2005年03月03日 22:52:00

再没有见过比xilinx的assert更晦涩的assert函数了,这就是硬件相关带给人类(其实只有我)的....汗!

#define XCOMPONENT_IS_READY     0x11111111  /* component has been initialized */
#define XCOMPONENT_IS_STARTED   0x22222222  /* component has been started */

#define XTEST_PASSED    0
#define XTEST_FAILED    1

#define XASSERT_NONE     0
#define XASSERT_OCCURRED 1

unsigned int XAssertStatus;
extern void XAssert(char *, int);
Xboolean XWaitInAssert = XTRUE;             /* 如果这个值被设置为真,则Xassert函数就会进入无限循环 */

/* Xilinx processor IP reference Guide上是这么说的The XAssert function calls a user defined function and then enters an endless loop. */

typedef void (*XAssertCallback)(char* FilenamePtr, int LineNumber);
static XAssertCallback XAssertCallbackRoutine = (XAssertCallback)XNULL;


void XAssert(char *File, int Line)
{
    /* if the callback has been set then invoke it */
    if (XAssertCallbackRoutine != XNULL)
    {
        (*XAssertCallbackRoutine)(File, Line);
    }

    /* if specified, wait indefinitely such that the assert will show up
     * in testing
     */
    while (XWaitInAssert)
    {
    }
}

/* 这个宏不返回值。它和XWaitInAssert一起使用,可以在测试的时候及时assert失败,也能让执行继续 */

#define XASSERT_VOID(expression)                   /
{                                                  /
    if (expression)                                /
    {                                              /
        XAssertStatus = XASSERT_NONE;              /
    }                                              /
    else                                           /
    {                                              /
        XAssert(__FILE__, __LINE__);               /
                XAssertStatus = XASSERT_OCCURRED;  /
        return;                                    /
    }                                              /
}

/* 这个宏返回值。它和XWaitInAssert一起使用,可以在测试的时候及时assert失败,也能让执行继续 */

#define XASSERT_NONVOID(expression)                /
{                                                  /
    if (expression)                                /
    {                                              /
        XAssertStatus = XASSERT_NONE;              /
    }                                              /
    else                                           /
    {                                              /
        XAssert(__FILE__, __LINE__);               /
                XAssertStatus = XASSERT_OCCURRED;  /
        return 0;                                  /
    }                                              /
}

/* 这个宏不返回值。用在assert总会发生的地方(还不明白有什么用) */

#define XASSERT_VOID_ALWAYS()                      /
{                                                  /
   XAssert(__FILE__, __LINE__);                    /
           XAssertStatus = XASSERT_OCCURRED;       /
   return;                                         /
}

/* 这个宏返回值。用在assert总会发生的地方(还不明白有什么用) */

#define XASSERT_NONVOID_ALWAYS()                   /
{                                                  /
   XAssert(__FILE__, __LINE__);                    /
           XAssertStatus = XASSERT_OCCURRED;       /
   return 0;                                       /
}

应该重新审视的javascript

或许这个话题相当有趣,只是因为Javascript会有一个新的增长,web是未来,Javascript也会有未来,当没有一个新的语言可以在web方面代替的时候。 强大的Javascript Java...
  • gmszone
  • gmszone
  • 2014年02月28日 20:35
  • 1991

用happen-before规则重新审视DCL

精华帖子:http://www.iteye.com/topic/260515; 编写Java多线程程序一直以来都是一件十分困难的事,多线程程序的bug很难测试,DCL(Double Check ...
  • working_brain
  • working_brain
  • 2014年11月11日 15:20
  • 575

重新审视进程间的通信(一)

最近干活的时候又被Linux管道和消息队列搞的一脸懵逼。当初自己走马观花似的学习以为内容很简单,结果留下了大坑,借来Unix网络编程来补补,重新审视这两个部分,并且引以为戒!!! 首先看管道#incl...
  • protoss_penguin
  • protoss_penguin
  • 2016年06月01日 00:15
  • 1253

由芬兰教育重新审视中国教育

很长一段时间,我对于中国教育遭到许多人抨击的理解是这样的:教育之失败是社会之失败的写照,社会对于教育的影响可以说是决定性的(当然,要说学校是社会的一部分也行)。逐利而浮躁的社会可能导致简单粗暴的教育,...
  • Greg_wangyang
  • Greg_wangyang
  • 2017年02月12日 10:02
  • 154

用happen-before规则重新审视DCL

转自:http://www.iteye.com/topic/260515 编写Java多线程程序一直以来都是一件十分困难的事,多线程程序的bug很难测试,DCL(Double Check Lock)...
  • myGinger
  • myGinger
  • 2015年07月30日 23:03
  • 367

重新审视网易:上势必然

当一个现象或者技术被广泛提及和接受之后,必定会引起脱离本质之外的喧嚣,超负荷的信息会掩盖人们认知事物本身的锚点。但是当浪潮退去,臃肿的信息从事物本身剥离的时候,我们更需要的,是客观理性的重新审视。 ...
  • sinat_32970179
  • sinat_32970179
  • 2017年02月16日 15:55
  • 187

用happen-before规则重新审视DCL

编写Java多线程程序一直以来都是一件十分困难的事,多线程程序的bug很难测试,DCL(Double Check Lock)就是一个典型,因此对多线程安全的理论分析就显得十分重要,当然这决不是说对多线...
  • dingjikerbo
  • dingjikerbo
  • 2017年03月16日 17:55
  • 279

为了编程梦想,重新审视自己,开始出发。

我是一个有梦想的人。而且,我的成功习惯可以帮助我实现梦想。所以,我不想把我伟大的精力花费在无谓的琐事上。我没有时间对小事犹豫。我想把自己全身上下的宝贵能量,用在实现自己的梦想上。...
  • u012272880
  • u012272880
  • 2015年04月29日 23:27
  • 522

linux内核驱动API指南(2)----驱动框架

linux内核驱动API指南
  • Jamienstar
  • Jamienstar
  • 2017年02月22日 08:49
  • 350

生成linux内核API文档

最近在学习linux内核相关的编程知识,想通过 man 来查看一下内核所提供的printk的函数的原型,结果提示 No manual entry for … 正所谓自己动手丰衣足食,没有linu...
  • zhaozicang
  • zhaozicang
  • 2016年09月16日 10:36
  • 1058
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:重新审视Xilins Driver API:ASSERT一探
举报原因:
原因补充:

(最多只允许输入30个字)