Chinaunix首页 | 论坛 | 博客
  • 博客访问: 596681
  • 博文数量: 169
  • 博客积分: 2656
  • 博客等级: 少校
  • 技术积分: 1685
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-30 13:03
文章分类

全部博文(169)

文章存档

2011年(1)

2010年(135)

2009年(33)

我的朋友

分类: 嵌入式

2010-05-20 23:14:22

同样是包含#include "arch\ppc\esfppc.h",在汇编代码中和C代码中对_STACK_ALIGN_SIZE的定义是不一样的.

_PPC_ESF_STK_SIZE 依赖于_STACK_ALIGN_SIZE.

#define _PPC_ESF_STK_SIZE ((_PPC_ESF_SIZE + _STACK_ALIGN_SIZE - 1) & \
     ~(_STACK_ALIGN_SIZE - 1))


在C语言代码中,_STACK_ALIGN_SIZE 的定义来源如下(从下到上的调用关系):

                 from D:/Windriver/Workbench2.6/vxworks-6.4/target/h/arch/ppc/toolppc.h:511,
                 from D:/Windriver/Workbench2.6/vxworks-6.4/target/h/arch/ppc/archPpc.h:329,
                 from D:/Windriver/Workbench2.6/vxworks-6.4/target/h/types/vxArch.h:163,
                 from D:/Windriver/Workbench2.6/vxworks-6.4/target/h/vxWorksCommon.h:196,
                 from D:/Windriver/Workbench2.6/vxworks-6.4/target/h/vxWorks.h:84,


而对于汇编而言,_STACK_ALIGN_SIZE 的定义来源如下:

                 from D:/Windriver/Workbench2.6/vxworks-6.4/target/h/types/vxArch.h:224,
                 from D:/Windriver/Workbench2.6/vxworks-6.4/target/h/vxWorksCommon.h:196,
                 from D:/Windriver/Workbench2.6/vxworks-6.4/target/h/vxWorks.h:84,


在头文件vxArch中都包含了头文件archPpc.h,但在archPpc.h中有一个宏 #ifdef _ASMLANGUAGE 把汇编和C给分开了,导致C语言使用的是toolppc.h中定义的16.汇编语言的代码跳过了这个定义,使用了vxArch.h中定义的8.



这是一个设计缺陷,已经在vxWorks6.6修改了.vxWorks6.4版本在arch/ppc的汇编中使用的都是200,中断栈部分使用的也是200.使用时需要注意。
阅读(1165) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~