免费注册 查看新帖 |

Chinaunix

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

powerpc,mpc8313平台e300核,模运算出现溢出? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-06-29 15:06 |只看该作者 |倒序浏览
本帖最后由 bitliu1983 于 2010-06-29 18:18 编辑

各位达人:
本人在mpc8313开发板上写程序,系统引导起来后,特意设置成:没有mmu,不使用cache,不开中断,不开异常初始化,相当于裸板程序。
因为我们的操作系统,发现了一个bug,在系统里,进行模运算,发现模运算一段时间后,出现溢出。
程序如下:

     unsigned long msr=0;
    unsigned long b=0;
    unsigned long i,j,k=0;
    unsigned char s[100][100];
    unsigned long xer=0x0;
    unsigned long hid2=0x0;
    unsigned long moshu=0x0;
   powerpc_disable_int(); //关中断
    unlock_ram_in_cache();
    disable_dcache();//禁止掉数据cache,此时指令cache没有开,所以相当于指令cache没有作用。
    while(1)
    {        
        for(i=0;i<100;i++)
        {        
            for(j=0;j<100;j++)
            {        
                s[j] +=0;
            }        
        }        
        k++;
        __asm__ __volatile__ ("mfmsr %0":"=r" (msr);
        __asm__ __volatile__ ("sync";   
        __asm__ __volatile__ ("isync";

       //get_tbus();//获取时间的一个随机函数
        b = get_tbus%100+ 27;
         if((b>127)||(b<27))
        {        
            printf("shit stop\n";
            printf("error %x,%x\n",b,k);
            while(1)
            {        
            }        
        }   

    }      
最后居然运行3小时后,会进入到进入到if分支里,出现了溢出,b的值打印是一个很大的值班,不在27-127范围内??
所以想请教下大家,是编译器问题吗(gcc),还是我的powerpc平台的初始化和系统的链接脚本之类的有问题?

论坛徽章:
0
2 [报告]
发表于 2010-06-29 15:37 |只看该作者
unsigned当signed解释了?

论坛徽章:
0
3 [报告]
发表于 2010-06-29 18:23 |只看该作者
unsigned当signed,但运行2小时后才出现?
还有一个问题,就是当我代码换成如下方式时:
     k=get_tbus();//获取时间的一个随机函数
     b =k%100+ 27;
就没有溢出了。
对比两段c代码的汇编,没有发现其它问题。

论坛徽章:
0
4 [报告]
发表于 2011-05-19 15:30 |只看该作者
代码有错误  unsigned long b; 其范围[0,2**32]

当然有问题啦 运行3个小时肯定溢出啦!

改为unsigned char b;即可了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP