免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4694 | 回复: 15
打印 上一主题 下一主题

高人请分析这段代码:gcc 与arm gcc 的差别 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-02 10:26 |只看该作者 |倒序浏览
10可用积分
typedef struct ctst{
        unsigned short pll_iset :2,
                        pll_inv :2,
                        pll_reset :1,
                        pll_r :9,
                        rfu :2;
}TST;

int main(void)
{
        unsigned short t1;
       
        t1 = 0x0000;
        ((TST *)&t1)->pll_r = 0x18;
        ((TST *)&t1)->pll_inv = 1;
       
        printf("the t1 = 0x%x\n",t1);

        ((TST *)&t1)->pll_inv = 2;
       
        printf("the t1 = 0x%x\n",t1);       

        ((TST *)&t1)->pll_inv = 3;
       
        printf("the t1 = 0x%x\n",t1);

        return 0;
}

在PC 上GCC编译后执行结果
the t1 = 0x304
the t1 = 0x308
the t1 = 0x30c

在ARM上arm-linux-gcc 3.4.1 编译执行结果
the t1 = 0x300
the t1 = 0x84d4
the t1 = 0x308

请高手帮忙分析一下原因

[ 本帖最后由 guode0724 于 2009-6-2 10:27 编辑 ]

最佳答案

查看完整内容

大小端+对齐

论坛徽章:
0
2 [报告]
发表于 2009-06-02 10:26 |只看该作者
大小端+对齐

论坛徽章:
0
3 [报告]
发表于 2009-06-02 10:33 |只看该作者

回复 #2 prolj 的帖子

GCC 和ARM GCC不都是小端格式和右对齐吗?

论坛徽章:
0
4 [报告]
发表于 2009-06-02 10:37 |只看该作者

回复 #3 guode0724 的帖子

Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec。
ARM,ARM,ARM,ARM,ARM,ARM,ARM,ARM,ARM,ARM,ARM,ARM。
x86,x86,x86,x86,x86,x86,x86,x86,x86,x86,x86,x86。


ARM 和 x86 是不一样的。

论坛徽章:
0
5 [报告]
发表于 2009-06-02 10:43 |只看该作者

回复 #4 langue 的帖子

那到底是怎么引起的这个差异?
大侠能否帮忙分析一下?
当我将程序改成这样:
int main(void)
{
        TST t1;
        
        memset(&t1,0,sizeof(t1));
        ((TST *)&t1)->pll_r = 0x18;
        ((TST *)&t1)->pll_inv = 1;
        
        printf("the t1 = 0x%x\n",t1);

        ((TST *)&t1)->pll_inv = 2;
        
        printf("the t1 = 0x%x\n",t1);        

        ((TST *)&t1)->pll_inv = 3;
        
        printf("the t1 = 0x%x\n",t1);

        return 0;
}

在PC 上GCC编译后执行结果
the t1 = 0x304
the t1 = 0x308
the t1 = 0x30c

在ARM上arm-linux-gcc 3.4.1 编译执行结果
the t1 = 0x304
the t1 = 0x308
the t1 = 0x30c

论坛徽章:
0
6 [报告]
发表于 2009-06-02 10:45 |只看该作者
我若使用IAR的编译器也能得到如下结果
the t1 = 0x304
the t1 = 0x308
the t1 = 0x30c

论坛徽章:
84
每日论坛发贴之星
日期:2015-12-29 06:20:00每日论坛发贴之星
日期:2016-01-16 06:20:00每周论坛发贴之星
日期:2016-01-17 22:22:00程序设计版块每日发帖之星
日期:2016-01-20 06:20:00每日论坛发贴之星
日期:2016-01-20 06:20:00程序设计版块每日发帖之星
日期:2016-01-21 06:20:00每日论坛发贴之星
日期:2016-01-21 06:20:00程序设计版块每日发帖之星
日期:2016-01-23 06:20:00程序设计版块每日发帖之星
日期:2016-01-31 06:20:00数据库技术版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-14 06:20:00
7 [报告]
发表于 2009-06-02 21:49 |只看该作者

回复 #1 guode0724 的帖子

和硬件平台有关,
google 一下 字节序 位序

论坛徽章:
0
8 [报告]
发表于 2009-06-02 22:40 |只看该作者
大小端问题,你编译ARM代码的时候,应该是选择编译成了大端模式。
ARM支持大端模式,也支持小端模式,X86只有小端模式。
至于什么是大小端,两句话说不清楚,查资料吧

论坛徽章:
0
9 [报告]
发表于 2009-06-02 22:44 |只看该作者
我也好奇,有人能具体说一下么

论坛徽章:
0
10 [报告]
发表于 2009-06-03 09:11 |只看该作者
对,arm是大小端都支持的,
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP