当前位置: 代码迷 >> VxWorks >> vxworks源代码有关问题
  详细解决方案

vxworks源代码有关问题

热度:9075   发布时间:2013-02-26 00:00:00.0
vxworks源代码问题
#define ROUND_UP(x, align) (((int) (x) + (align - 1)) & ~(align - 1))
#define ROUND_DOWN(x, align) ((int)(x) & ~(align - 1))
#define ALIGNED(x, align) (((int)(x) & (align - 1)) == 0)

#define MEM_ROUND_UP(x) ROUND_UP(x, _ALLOC_ALIGN_SIZE)
#define MEM_ROUND_DOWN(x) ROUND_DOWN(x, _ALLOC_ALIGN_SIZE)
#define STACK_ROUND_UP(x) ROUND_UP(x, _STACK_ALIGN_SIZE)
#define STACK_ROUND_DOWN(x) ROUND_DOWN(x, _STACK_ALIGN_SIZE)
#define MEM_ALIGNED(x) ALIGNED(x, _ALLOC_ALIGN_SIZE)


请教高手 这几个宏主要作用是什么.

------解决方案--------------------------------------------------------
主要是用于对齐.align是对齐的数值,如对齐到256字节边界(即align为1<<8,0x100).

#define ROUND_UP(x, align) (((int) (x) + (align - 1)) & ~(align - 1)) 
对齐到不小于x的指定的边界.因为是不小于,所以先加上比对齐边界小1的值,再进行与去掉未对齐的部分.如边界是256时,先加255,再于0xFFFFFF00进行与.
如align为256,x为256时;结果为256,x为255时,结果为256;x为257时,结果为512.

#define ROUND_DOWN(x, align) ((int)(x) & ~(align - 1)) 
对齐到不大于x的指定边界.

#define ALIGNED(x, align) (((int)(x) & (align - 1)) == 0) 
检查是否对齐到指定的边界.

明白了这个,后面的几个就容易了.
  相关解决方案