查看: 3719|回复: 2

[求助] KL36板子退出不了中断继续执行main函数

[复制链接]

该用户从未签到

2

主题

3

帖子

0

新手上路

Rank: 1

积分
19
最后登录
2020-12-5
发表于 2020-12-5 16:01:51 | 显示全部楼层 |阅读模式
这个是main函数里面的循环函数,定义了一个全局变量nAsrStatus来case到执行的状态
   ......
for(;;)
                {
                        switch(nAsrStatus)
                        {
                                case LD_ASR_RUNING:
                                case LD_ASR_ERROR:
                                            break;
                                case LD_ASR_NONE:
                                                nAsrStatus=LD_ASR_RUNING;
                                                if (RunASR()==0)        //        启动一次ASR识别流程:ASR初始化,ASR添加关键词语,启动ASR运算
                                                {
                                                        nAsrStatus = LD_ASR_ERROR;
                                                }
                                                break;

                                case LD_ASR_FOUNDOK:
                                                nAsrRes = LD_GetResult();        //        一次ASR识别流程结束,去取ASR识别结果
                                                nAsrStatus = LD_ASR_NONE;
                                                break;

                                case LD_ASR_FOUNDZERO:
                                        default:

                                                nAsrStatus = LD_ASR_NONE;
                                                break;

                    }
              }


这里是中断处理函数,下降沿来的时候进入这个函数,进入里面执行ProcessInt0之后,状态就赋值成LD_ASR_FOUNDOK,让主函数case到。
void GPIOB_Handler(void)
{
        DISABLE_INTERRUPTS;     //关总中断
            if(gpio_get_int(IRQ)==1)
            {
                    ProcessInt0();
            }
            gpio_clear_int(IRQ);
        ENABLE_INTERRUPTS;     //开总中断
}

这个是ProcessInt0()函数,

                nAsrResCount = LD_ReadReg(0xba);//ASR:中断时,是语音识别有几个识别候选
                printf("识别结果条数:%d\n",nAsrResCount);
                if(nAsrResCount>0 && nAsrResCount<=4)
                {
                        nAsrStatus=LD_ASR_FOUNDOK;
                }
                else
                {
                        nAsrStatus=LD_ASR_FOUNDZERO;
                }
        }
        else
        {
                nAsrStatus=LD_ASR_FOUNDZERO;
        }




现在的问题就是,应该是中断处理完之后回不到主函数继续执行,不知道是什么原因

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

使用道具 举报

  • TA的每日心情
    开心
    2024-7-31 10:09
  • 签到天数: 392 天

    连续签到: 1 天

    [LV.9]以坛为家II

    45

    主题

    1338

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3163
    最后登录
    2024-12-27
    发表于 2020-12-7 10:15:49 | 显示全部楼层
    你这样说不太清楚,你程序最后跑哪里去了?没有仿真一下吗?
    今天天气不错!签到!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24932
    最后登录
    2025-7-23
    发表于 2020-12-7 10:17:43 | 显示全部楼层
    你debug一下,看看有没有退出中断,看看nAsrStatus的值有没有变化,另外检查代码优化,nAsrStatus加上volatile




    slogen.png

    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-25 09:37 , Processed in 0.092492 second(s), 24 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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