微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 定时器中断变量混乱?

定时器中断变量混乱?

时间:10-02 整理:3721RD 点击:
定时器开中断  主函数执行子函数(中断打断),中断里局部变量突然为0?中断里代码:
ulong  PC_S=0;
PC_S=rxpw4o1(dhb_wfhgTmp+2);读储存器,读正确。
//主函数调用drawImage() 这个函数(一边进入中断返回再执行drawImage() )
switch(PC_S){ 主函数执行drawImage(),这里PC_S会突然为0?
      case 1: goto d1; break;
}
drawImage()代码如下:

  1. void drawImage() {
  2.     uchar  ialpha,r,g,b;
  3.         uint  fhv_Display_x=0,fhv_Display_y=0,dxih0=0,dyih0=0;
  4.         int  a=0,a2=-1,dxdw=0,dydh=0,ika=0;


  5.    if((Image_da[0].dx+Image_da[0].dw<0)|(Image_da[0].dx>DisplayW)|(Image_da[0].dy+Image_da[0].dh<0)
  6.    |Image_da[0].dy>DisplayH) return ;

  7.         if(CetdSuf) CetdSufH=20; else CetdSufH=0;
  8.     if(GlCetdSuf==0&Image_da[0].dy<CetdSufH) Image_da[0].dy+=CetdSufH;

  9.         r=b_colorH & 0xf8;
  10.     g=b_colorH <<5>>2;
  11.     g|=b_colorL>>5;
  12.     g<<=2;
  13.     b=(b_colorL & 0x1f)<<3;
  14.        
  15.         dxdw=Image_da[0].dx+Image_da[0].dw;
  16.         fhv_Display_x=dxdw-DisplayW;
  17.         if(dxdw>DisplayW){
  18.           Image_da[0].dx=DisplayW-Image_da[0].dw+fhv_Display_x;
  19.         }else if(Image_da[0].dx<0){
  20.            dxdw=Image_da[0].dx;
  21.            Image_da[0].dx=0;
  22.         }

  23.         dydh=Image_da[0].dy+Image_da[0].dh;
  24.         fhv_Display_y=dydh-DisplayH;
  25.         if(dydh>DisplayH){
  26.            Image_da[0].dy=DisplayH-Image_da[0].dh+fhv_Display_y;
  27.         }else if(Image_da[0].dy<0){
  28.            dydh=Image_da[0].dy;
  29.            Image_da[0].dy=0;
  30.         }

  31.           add2=Image_da[0].spngadd;

  32.         for(a=0;a<Image_da[0].dh;a++){
  33.                
  34.            if((dydh<0)&a<=abs(dydh)){
  35.                    if(Image_da[0].dn==0) add2+=Image_da[0].dw*3;        else add2-=Image_da[0].dw*3;
  36.                  dyih0=a+1;
  37.                  continue;
  38.            }else if(((dydh>DisplayH)&(a>=Image_da[0].dh-fhv_Display_y))|(Image_da[0].dy==DisplayH)){break;}

  39.            for(ika=0;ika<Image_da[0].dw;ika++){
  40.                
  41.             if((a!=a2)&Image_da[0].dn==1){
  42.               add2=Image_da[0].spngadd+Image_da[0].dw*3*(a+1);
  43.                   a2=a;
  44.             }
  45.           if(((dxdw>DisplayW)&(ika>=Image_da[0].dw-fhv_Display_x))|(Image_da[0].dx==DisplayW)){
  46.                    if(Image_da[0].dn==0) add2+=3;        else add2-=3;
  47.                  continue;
  48.           }else if((dxdw<0)&ika<=abs(dxdw)){
  49.                    if(Image_da[0].dn==0) add2+=3;        else add2-=3;
  50.                  dxih0=ika+1;
  51.                  continue;
  52.           }

  53.           tmpxy=(ulong)(DisplayW*2*(Image_da[0].dy+(a-dyih0)))+(ulong)((Image_da[0].dx+(ika-dxih0))*2);

  54.           if(Image_da[0].dn==0){
  55.            cL=Rea_data(add2,0,0,1);
  56.        add2++;
  57.        ch=Rea_data(add2,0,0,1);
  58.        add2++;
  59.        ialpha=Rea_data(add2,0,0,1);
  60.        add2++;

  61.          }else{
  62.            add2--;
  63.        ialpha=Rea_data(add2,0,0,1);
  64.        add2--;
  65.        ch=Rea_data(add2,0,0,1);
  66.        add2--;
  67.        cL=Rea_data(add2,0,0,1);

  68.          }

复制代码



已解决!在关键位置关中断就好了!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top