bitliu1983 发表于 2010-06-29 15:06

powerpc,mpc8313平台e300核,模运算出现溢出?

本帖最后由 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;
    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 +=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平台的初始化和系统的链接脚本之类的有问题?

prolj 发表于 2010-06-29 15:37

unsigned当signed解释了?

bitliu1983 发表于 2010-06-29 18:23

unsigned当signed,但运行2小时后才出现?
还有一个问题,就是当我代码换成如下方式时:
   k=get_tbus();//获取时间的一个随机函数
   b =k%100+ 27;
就没有溢出了。
对比两段c代码的汇编,没有发现其它问题。

LangJuanna0 发表于 2011-05-19 15:30

代码有错误unsigned long b; 其范围

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

改为unsigned char b;即可了
页: [1]
查看完整版本: powerpc,mpc8313平台e300核,模运算出现溢出?