现在写了一个函数,是一个480*640的二重循环,处理图象的<br /><br />按F10单部运行的时候经常跑飞掉,然后提示Illegal opcode (xxxxxxxx) at pc = yyyyyyyy,xxxxxxxx是yyyyyyyy地址处的操作码,用Mixed ASM/Source查看,发现此处的汇编语句变成了 .word xxxxxxxx<br /><br />不知道这个语句是干什么的,总之到了这里就出错了<br /><br />我的编译选项完全没有修改,保持了 -g ,没有选择 -oN(N=1,2,3)<br /><br />=================================<br /><br />该函数代码如下<br /><br />void GaussianFilter3x3<br />(<br />WORD pR1[ ][IMAGEWIDTH],<br />WORD pG1[ ][IMAGEWIDTH],<br />WORD pB1[ ][IMAGEWIDTH],<br />WORD WR1[ ][IMAGEWIDTH],<br />WORD WG1[ ][IMAGEWIDTH],<br />WORD WB1[ ][IMAGEWIDTH]<br />)<br />{<br /> volatile int i,j;<br /> unsigned int temp;<br /><br /><br /> for(j=1;j<479;j++)<br /> for(i=1;i<639;i++ )<br /> { <br /> //if(pR1[j] == 0)// skip暗点<br /> if(pR1[j] < MIN)<br /> {<br /> continue;<br /> }<br /> else<br /> {<br /> temp<br /> =<br /> pR1[j-1][i-1]*Table_Gau3x3[0][0]<br /> +pR1[j-1]*Table_Gau3x3[0][1]<br /> +pR1[j-1][i+1]*Table_Gau3x3[0][2]<br /> +pR1[j][i-1]*Table_Gau3x3[1][0]<br /> +pR1[j]*Table_Gau3x3[1][1]<br /> +pR1[j][i+1]*Table_Gau3x3[1][2]<br /> +pR1[j+1][i-1]*Table_Gau3x3[2][0]<br /> +pR1[j+1]*Table_Gau3x3[2][1]<br /> +pR1[j+1][i+1]*Table_Gau3x3[2][2];<br /><br /> WR1[j]=temp>>16;<br /> <br /> temp<br /> =<br /> pG1[j-1][i-1]*Table_Gau3x3[0][0]<br /> +pG1[j-1]*Table_Gau3x3[0][1]<br /> +pG1[j-1][i+1]*Table_Gau3x3[0][2]<br /> +pG1[j][i-1]*Table_Gau3x3[1][0]<br /> +pG1[j]*Table_Gau3x3[1][1]<br /> +pG1[j][i+1]*Table_Gau3x3[1][2]<br /> +pG1[j+1][i-1]*Table_Gau3x3[2][0]<br /> +pG1[j+1]*Table_Gau3x3[2][1]<br /> +pG1[j+1][i+1]*Table_Gau3x3[2][2]; <br /><br /> WG1[j]=temp>>16;<br /><br /> temp<br /> =<br /> pB1[j-1][i-1]*Table_Gau3x3[0][0]<br /> +pB1[j-1]*Table_Gau3x3[0][1]<br /> +pB1[j-1][i+1]*Table_Gau3x3[0][2]<br /> +pB1[j][i-1]*Table_Gau3x3[1][0]<br /> +pB1[j]*Table_Gau3x3[1][1]<br /> +pB1[j][i+1]*Table_Gau3x3[1][2]<br /> +pB1[j+1][i-1]*Table_Gau3x3[2][0]<br /> +pB1[j+1]*Table_Gau3x3[2][1]<br /> +pB1[j+1][i+1]*Table_Gau3x3[2][2];<br /><br /> WB1[j]=temp>>16;<br /> }<br /> }<br />}<br />就是一个3×3的Gaussian滤波器,请各位大侠帮助看一下吧,卡了好几天了啊 |
|