Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2338104
  • 博文数量: 816
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 5010
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-17 17:57
文章分类

全部博文(816)

文章存档

2011年(1)

2008年(815)

分类:

2008-12-17 18:00:17

老师让我简单解释一下下面这个程序里的test1子程序的用途,我看了半天,感觉好诡异,而且好多不明白的语句。
哪位大侠能帮我看一下啊?
#define xtensa 1
/* Compiler extensions */
#ifdef XTENSA_DEBUG
/* debug version */
#include
#include
#include
#include "iostream.h"
#include "stdafx.h"
#define xtensaError(str)
{
printf((str));
printf("\n");
exit(-1);
}
#define xtensaWarn(str)
 {
printf((str));
printf("\n");
 }
#define xtensaIgnore(a) ((void)a)
#define xtensaAssert(a) assert(a)
#else
/* release version */
#define xtensaError(str) ((void) (str))
#define xtensaWarn(str)  ((void) (str))
#define xtensaIgnore(a)  ((void) (a))
#define xtensaAssert(a)  ((void) (a))
#endif /* XTENSA_DEBUG */
/** OMX_U32 is a 32 bit unsigned quantity that is 32 bit word aligned */
typedef unsigned long OMX_U32;
/** OMX_U8 is an 8 bit unsigned quantity that is byte aligned */
typedef char OMX_U8;

typedef int OMX_INT;
/** signed integer corresponding to machine word length, has maximum signed value INT_MAX*/

OMX_U32 test1(const OMX_U8 **ppBitStream, OMX_INT *pOffset, OMX_INT N)
{
    const OMX_U8 *pBitStream = *ppBitStream;
    OMX_INT Offset = *pOffset;
    OMX_U32 Value;

    xtensaAssert(Offset>=0 && Offset<=7);   /* 这两句我不明白,看样子好像是如果Offset和N不符合条件程序终止,但是我单独调试这两句的时候根本不管用。*/
    xtensaAssert(N>=1 && N<=32);

    /* Read next 32 bits from stream */
    Value = (pBitStream[0] << 24 ) | ( pBitStream[1] << 16)  | (pBitStream[2] << 8 ) | (pBitStream[3]) ;   /* 还有这儿,为什么要把一个字符向左移位?pBitStream[]这个时候应该是数字,对应ASCII码表的字母,这样移位有什么意义吗?*/
    Value = (Value << Offset ) | (pBitStream[4] >> (8-Offset));

    /* Return N bits */
    return Value >> (32-N);
}

/***************************************
 * Simulation Parameters
 ***************************************/
#ifdef x86
#define LOOPS 100000000;

#elif xtensa
#define LOOPS 1000;

#else
#define LOOPS = 1000;
#endif

int main(){
  const OMX_U8 *d = "This is a test bitstream";
  OMX_INT pOffset = 12;
  OMX_INT num_bits = 11;
  OMX_U32 value = 0;
  int loops = LOOPS;

  int i = 0;
  for (i =0;i  {
  value = test1(&d,&pOffset,num_bits);
  }

  cout<<"Loopcount: "<  printf("value:0x%x\n", value);

  return 0;
}

--------------------next---------------------

阅读(1094) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~