首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > VxWorks >

vxworks源代码有关问题

2012-03-23 
vxworks源代码问题#define ROUND_UP(x, align)(((int) (x) + (align - 1)) & ~(align - 1))#define ROUND_

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) 
检查是否对齐到指定的边界.

明白了这个,后面的几个就容易了.

热点排行