重新审视Xilins Driver API:ASSERT一探

再没有见过比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;                                       /
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值