高手们,帮我看看这段代码什么意思?

chengwei02 2007-09-13 11:16:02
typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned int u32;

#define MC_PCC_FILL_STRUCT3 u8:0; u8:8; u8:8; u8:8; u8:0;
typedef struct __alg { char c; MC_PCC_FILL_STRUCT3 void * p; } __alg_t;
#define MC_PPC_DISTANCE_OF(S,F) (unsigned) (&(((S *) 0)->F))

#define ALIGNMENT (MC_PPC_DISTANCE_OF(__alg_t, p) - 1)
#define ALIGN(P) ( (u32) ((char *)(P) + ALIGNMENT) & ~ALIGNMENT)

#define STACK0_SIZE 1000
#define INTERRUPT_STACK_SIZE 5000

u8 InterruptStack[ALIGN( INTERRUPT_STACK_SIZE )];
u8 stack_task0[ALIGN (STACK0_SIZE) ];

数组的定义里面为什么要加ALIGN,有什么作用?
...全文
165 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Treazy 2007-09-13
  • 打赏
  • 举报
回复
这个功能比较复杂了,牵涉到这段代码的运行主体的物理结构了
不同的CPU(比如arm或者dsp,51)其处理位数不同
上述代码是针对特别处理器的而设计的,ALIGN的功能就是给指定地址开始分配内存空间

_石头_ 2007-09-13
  • 打赏
  • 举报
回复
没什么意思,真假代码的可读性吧!
align 翻译成汉语就是排列、结盟的意思。
#define ALIGN(P) ( (u32) ((char *)(P) + ALIGNMENT) & ~ALIGNMENT)
关键作用在后面的表达式
onetomorrow 2007-09-13
  • 打赏
  • 举报
回复
学习下
qld001 2007-09-13
  • 打赏
  • 举报
回复
arm核分为有mmu和无mmu的,对于无mmu的不指定开始地址程序就飞了。。。。例如arm7TDMI
Treazy 2007-09-13
  • 打赏
  • 举报
回复
不可以,你仔细揣摩一下ALIGN的功能吧,和直接赋值还是有区别的!
chengwei02 2007-09-13
  • 打赏
  • 举报
回复
这段代码是在arm上运行的,不指定开始地址没什么影响吧,这些代码在unix环境下也可以编译,但当我在vc下编译时就有问题了,所以我是不是可以把ALIGN去掉呢?

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧