|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
各位达人:
本人在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";
k=get_tbus();//获取时间的一个随机函数
b = k%100+ 27;
if((b>127)||(b<27))
{
printf("shit stop\n";
printf("error %x,%x\n",b,k);
b = k%100+ 27;
printf("err again? %x,%x\n",b,k);
while(1)
{
}
}
}
最后居然运行3小时后,会进入到进入到if分支里,出现了溢出,b的值打印是一个很大的值班,不在27-127范围内??
所以想请教下大家,是编译器问题吗(gcc),还是我的powerpc平台的初始化和系统的链接脚本之类的有问题?
|
|