查看: 3223|回复: 6

[其他] 也谈 ILLEGAL_BP

[复制链接]
  • TA的每日心情
    无聊
    2019-8-29 13:37
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    18

    主题

    88

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    251
    最后登录
    2022-1-14
    发表于 2015-10-9 09:00:21 | 显示全部楼层 |阅读模式
    最近调试XHY代替XHZ的方案新版(汽车仪表)

    原设计在RTI中断中调用步进电机的微步驱动功能函数,然而在调试过程中发现就像网上大家说的一样,出现程序跑飞、单片机死机、重启,并且在命令窗口提示ILLEGAL_BP


    于是开始找问题所在,把调用的函数放到主循环中或者系统10ms中断中都没问题,于是怀疑是RTI中断问题,新开启一个TIME1_CH0中断,调用后还是出现上述现象,最后查看汇编代码,发下老项目的中断函数汇编,在主函数开始和结束都有好几行多余的代码,发现是编译选项不同造成的,于是把新项目编译选项调整的和老项目一致,结果问题解决了。具体原因暂时就不细查了。

    编译选项和汇编代码如下:

    老项目编译项:-CpDirect0 -CpGPAGE=0x10 -CpPPAGE=0x35 -CpRPAGE=0x16 -CPUHCS12X -Ml -Onf
    新项目编译项:-CPUHCS12X -DPPAGE_ADDR=0x15 -D__MAP_FLASH__ -Ml -Onf


      261:  interrupt 7 void ISR_7_RTI(void){   


    Function: ISR_7_RTI
    Source  : E:\Projects\02-XG\HardWare\XHY256\SOFTWARE\02HXY5.1\Sources\InterruptServer.c
    Options : -CpDirect0 -CpGPAGE=0x10 -CpPPAGE=0x35 -CpRPAGE=0x16 -CPUHCS12X -Env"GENPATH=E:\Projects\02-XG\HardWare\XHY256\SOFTWARE\02HXY5.1;E:\Projects\02-XG\HardWare\XHY256\SOFTWARE\02HXY5.1\bin;E:\Projects\02-XG\HardWare\XHY256\SOFTWARE\02HXY5.1\prm;E:\Projects\02-XG\HardWare\XHY256\SOFTWARE\02HXY5.1\cmd;E:\Projects\02-XG\HardWare\XHY256\SOFTWARE\02HXY5.1\Sources;D:\Program Files (x86)\Freescale\CWS12v5.1\lib\HC12c\lib;D:\Program Files (x86)\Freescale\CWS12v5.1\lib\HC12c\src;E:\Projects\02-XG\HardWare\XHY256\SOFTWARE\02HXY5.1\Sources\FlashDriver\Include;E:\Projects\02-XG\HardWare\XHY256\SOFTWARE\02HXY5.1\Sources\FlashDriver\Include\user_cfg;E:\Projects\02-XG\HardWare\XHY256\SOFTWARE\02HXY5.1\Sources\FlashDriver\Source;E:\Projects\02-XG\HardWare\XHY256\SOFTWARE\02HXY5.1\Sources\FlashDriver;D:\Program Files (x86)\Freescale\CWS12v5.1\lib\HC12c\include" -Env"LIBPATH=D:\Program Files (x86)\Freescale\CWS12v5.1\lib\HC12c\include" -EnvOBJPATH=E:\Projects\02-XG\HardWare\XHY256\SOFTWARE\02HXY5.1\bin -EnvTEXTPATH=E:\Projects\02-XG\HardWare\XHY256\SOFTWARE\02HXY5.1\bin -Lasm=E:\Projects\02-XG\HardWare\XHY256\SOFTWARE\02HXY5.1\02HXY5.1_Data\Standard\ObjectCode\InterruptServer.c.o.lst -Ml -Onf -ObjN=E:\Projects\02-XG\HardWare\XHY256\SOFTWARE\02HXY5.1\02HXY5.1_Data\Standard\ObjectCode\InterruptServer.c.o -WmsgSd1106


      0000 9635         [3]     LDAA  53
      0002 36           [2]     PSHA  
      0003 9610         [3]     LDAA  16
      0005 36           [2]     PSHA  
      0006 9616         [3]     LDAA  22
      0008 36           [2]     PSHA  
      262:  
      263:      DisableInterrupts;
      0009 1410         [1]     SEI   
      264:      
      265:      CRGFLG = 0x80;
      000b c680         [1]     LDAB  #128
      000d 5b00         [2]     STAB  _CRGFLG
      266:      
      267:      oilStepControl();//oil level
      000f 4a000000     [7]     CALL  oilStepControl,PAGE(oilStepControl)
      268:      airPressStepControl();   
      0013 4a000000     [7]     CALL  airPressStepControl,PAGE(airPressStepControl)
      269:      
      270:      //M2StepControl();
      271:      //M4StepControl();
      272:      
      273:      
      274:      //engineSpeedControl(); //转速
      275:      //SpeedControl();  //车速   
      276:           
      277:      EnableInterrupts;
      0017 10ef         [1]     CLI   
      278:  }
      0019 32           [3]     PULA  
      001a 5a16         [2]     STAA  22
      001c 32           [3]     PULA  
      001d 5a10         [2]     STAA  16
      001f 32           [3]     PULA  
      0020 5a35         [2]     STAA  53
      0022 0b           [8]     RTI   
      279:  

    我知道答案 目前已有6人回答
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2017-2-9 14:16
  • 签到天数: 17 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    25

    主题

    1785

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2250
    最后登录
    2024-6-11
    发表于 2015-10-9 09:46:51 | 显示全部楼层
    谢谢分享
    freescaleic.org.png
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2019-8-29 13:37
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    18

    主题

    88

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    251
    最后登录
    2022-1-14
     楼主| 发表于 2015-10-9 10:18:52 | 显示全部楼层
    最新发现,编译选项不是问题的关键,进一步探索中
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    61

    主题

    965

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2394
    最后登录
    1970-1-1
    发表于 2015-10-9 11:59:43 | 显示全部楼层
    学习              
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-9-20 20:56
  • 签到天数: 20 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    12

    主题

    449

    帖子

    0

    高级会员

    Rank: 4

    积分
    984
    最后登录
    2018-9-20
    发表于 2015-10-9 12:49:45 | 显示全部楼层
    支持一下
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2019-8-29 13:37
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    18

    主题

    88

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    251
    最后登录
    2022-1-14
     楼主| 发表于 2015-10-10 09:27:29 | 显示全部楼层
    昨天下午问题解决了,但是具体原因就不去深究了,直接上解决办法:
    把之前步进电机微步驱动中对MCDC寄存器的操作使用指针(当然从语法上是没问题的,应该还是编译器差异造成的,之前老项目XHZ用的是CW4.6),改为不使用指针就OK了.时间的问题就先不求甚解了,待日后再说吧

    使用指针做法:
    {
            volatile unsigned char        ctemp,*motor_channel;
            int                temp,itemp;
    //LLWW        __RESET_WATCHDOG();                                                  
            itemp=wdM4AimSteps-wdM4CurSteps;      
            if (itemp!=0)
            {
              if (itemp<0)  wdM4CurSteps--;
              else if (itemp>0)  wdM4CurSteps++;
           
              motor_channel=(byte *)(&MCDC4);          
              temp = wdM4CurSteps;
              
              ctemp = temp - (temp / STEP4) * STEP4; //计算得到 temp/24的余数       
    if(bMotorSWITEC == 0){        
                if((ctemp<STEP1))
                {
                  *motor_channel&=~S0_DTC;                //;Duty cycle channel 0 (A low /A PWM)
                  *(motor_channel+2)&=~S0_DTC;        //;Duty cycle channel 1 (B low /B PWM)
                }
                else if((ctemp>=STEP1)&&(ctemp<STEP2))
                {
                  *motor_channel&=~S0_DTC;                //;Duty cycle channel 0 (A low /A PWM)
                  *(motor_channel+2)|=S1_DTC;        //;Duty cycle channel 1 (B PWM /B low)
                }
                else if((ctemp>=STEP2)&&(ctemp<STEP3))
                {  
                  *motor_channel|=S1_DTC;                //;Duty cycle channel 0 (A PWM /A low)
                  *(motor_channel+2)|=S1_DTC;        //;Duty cycle channel 1 (B PWM /B low)
                }
                else if((ctemp>=STEP3)&&(ctemp<STEP4))
                {
                  *motor_channel|=S1_DTC;                //;Duty cycle channel 0 (A PWM /A low)
                  *(motor_channel+2)&=~S0_DTC;        //;Duty cycle channel 1 (B low /B PWM)
                }               
    }

    修改后,解决问题的做法:
    {
    volatile unsigned char        ctemp;//,  *motor_channel;
    int                temp, itemp;
                                                    
      itemp = wdM3AimSteps - wdM3CurSteps;      
      if (itemp!=0)
      {
        if (itemp < 0)  
            wdM3CurSteps --;
        else if (itemp > 0)  
            wdM3CurSteps ++;
       
        temp = wdM3CurSteps;
        ctemp = temp - (temp / STEP4) * STEP4;
       
          
        if((ctemp<STEP1))     
        {
            MCDC4_S = 0;
            MCDC5_S = 0;
        }
        else if((ctemp >= STEP1) && (ctemp < STEP2))
        {
            MCDC4_S = 0;                       
            MCDC5_S = 1;
        }
        else if((ctemp >= STEP2) && (ctemp < STEP3))
        {  
            MCDC4_S = 1;                          //;Duty cycle channel 0 (A PWM /A low)
            MCDC5_S = 1;
        }
        else if((ctemp >= STEP3) && (ctemp < STEP4))
        {
            MCDC4_S = 1;                          //;Duty cycle channel 0 (A PWM /A low)
            MCDC5_S = 0;
        }
    }
    }
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-5-3 11:19
  • 签到天数: 10 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    50

    主题

    1万

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    14090
    最后登录
    2024-4-19
    发表于 2015-10-10 09:29:41 | 显示全部楼层
    谢谢分享。。。 blank.png blank1.png blank2.png blank3.png blank4.png blank5.png blank6.png blank7.png blank8.png blank9.png
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-13 10:54 , Processed in 0.105375 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表