IAR中跑的好好的,换到MDK中就会莫名其妙的进Fault中断,请各位帮忙看看!

2019-03-24 14:11发布

下面的程序在IAR中用的好好的,但是自己有点吹毛求疵了,还是习惯用MDK,所以就转到MDK下用,程序什么的都不变,只是把对应的driverlab.a文件换成了对应的driverlib.lib文件,build没有问题,下载进去也没问题,前面的串口输出也没问题,但程序一跑到函数adcSample()中的while (!ADC_EndFlag); 这句话时就进中断了。。。搞不明白。。   另一个奇怪的现象就是,我用仿真器在while (!ADC_EndFlag);设置断点, 然后进行单步调试,一直点都不会进中断  但是一旦点全速运行就会进fault中断,按理说应该在断点处停下来啊。。!!!     求帮助,下面是程序相关代码,“!!!***!!!”是我注明出问题的地方。     //  主函数(程序入口)
int main(void)
{
    unsigned long ulVal;
    char cBuf[100];
    jtagWait();                                           //  防止JTAG失效,重要!
    clockInit();                                           //  时钟初始化:PLL,20MHz
    uartInit();                                             //  UART初始化
    adcInit();                                             //  ADC初始化
    for (;;)
    {
        ulVal = adcSample();                      //  ADC采样    !!!!!!!!!进Fault中断的地方!!!!!!!!
        ulVal = (ulVal * 3000) / 1024;         //  转换成电压值
        sprintf(cBuf, "%ld ", ulVal);         //  输出格式化
        uartPuts(cBuf);                               //  通过UART显示结果
        SysCtlDelay((1000/fre)*(TheSysClock / 3000));           //  延时约1500ms
    }
}       //  ADC采样
unsigned long adcSample(void)
{
    unsigned long ulValue;     ADCProcessorTrigger(ADC_BASE, 0);                       //  处理器触发采样序列
    while (!ADC_EndFlag);                                   //  等待采样结束                      !!!!进fault中断的地方!!!!!
    ADC_EndFlag = false;                                    //  清除ADC采样结束标志
    ADCSequDataGet(ADC_BASE, 0, &ulValue);                  //  读取ADC转换结果     return(ulValue);
}     while (!ADC_EndFlag); ADC_EndFlag = false; 这两句话句话对应的汇编为:     39:     while (!ADC_EndFlag);                                   //  等待采样结束
0x000003D2 BF00      NOP     
0x000003D4 4854      LDR      r0,[pc,#336]  ; @0x00000528
0x000003D6 7800      LDRB     r0,[r0,#0x00]
0x000003D8 2800      CMP      r0,#0x00
0x000003DA D0FB      BEQ      0x000003D4                             !!!在这里单步调试不会进fault,但是如果全速运行就直接跳到fault中断里面去了!!!
    40:     ADC_EndFlag = false;                                    //  清除ADC采样结束标志     !!!程序永远执行不到这里!!!! 
0x000003DC 2000      MOVS     r0,#0x00
0x000003DE 4952      LDR      r1,[pc,#328]  ; @0x00000528
0x000003E0 7008      STRB     r0,[r1,#0x00] 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
shower.xu
1楼-- · 2019-03-24 19:26
启动文件里的中断向量地址修改了么?
cjqhyy
2楼-- · 2019-03-25 00:21
 精彩回答 2  元偷偷看……

一周热门 更多>

相关问题

    相关文章