发 帖  
原厂入驻New
[问答]

单片机中断使用goto语句

9754 单片机
分享
最近在做一个mp6遇到一些问题。就是在用按键触发外部中断实现上下一曲

见我的程序结构如下
main()
{
        while(1)
        {
                loop:
                opengile(,,n);   //打开文件
                readfile();      //读取文件
               n++;
        }
       
}
interupt()
{
        if(...)
                n++;
        goto loop;
}


n为mp3文件的序号
文件在被读取的时候 是连续的,也就是这个程序会执行很久
就是想在按键按下后 就在中断里把n加一  然后跳转到打开文件的函数那儿 进行打开下一个文件
理论上 这样是很完美的。可是我这样做 程序就出错了
看下面错误提示
`{WY{}2KU2FV)PDNLC1A4O9.jpg

请问一下大神们 这个该怎么解决  或者有其他的方法可以跳转的
因为redfile函数是连续执行的,我无法通过标志位来判断进行break循环 只能在中断里进行跳转
0
2014-6-20 17:25:06   评论 分享淘帖 邀请回答
7个回答
额 mp3  打错了!!!
2014-6-20 17:26:36 评论

举报

可以设置一个变量A=1;
=================
redfile 方法里判断
if (A=1)
{
  读取文件
}

=================
在中断函数里写
A=0;



++++++++++++++++++++++++
你的 opengile   方法名写错了  应该是 openfile
2014-6-20 21:45:07 评论

举报

goto只能跳转到同一个函数的label处,不能跳转到其它函数,如果硬要跳转的话,估计只能用汇编了
2014-6-21 01:20:28 评论

举报

不要随意使用goto语句。有人觉得goto语句只是相当于汇编的JUMP而随意使用,结果导致程序经常出错跑飞,而且排错也非常困难。
对于你的情况,我不知道你的readfile()函数是怎么写的。在我做的MP3中,所有按键识别如上下曲、音量加减均播放函数里嵌入,完全不会影响播放效果。顺便说一下我的MP3硬件配置:STC12LE5A60S2,30.00MHz晶振,VS1003B模块,12846OLED,中文字库芯片,DS1302。完美播放320码率MP3
2014-6-21 11:24:06 评论

举报

只要加标志位就行了,
然后在程序里面多加一些判断就可以了

2014-6-27 16:05:31 评论

举报

goto不能跨函数调用,否则会导致逻辑混乱而跑飞,根据我的判断,goto之后是不在while里的,慎用goto
2019-3-16 16:42:27 评论

举报

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
我要提问
快速回复 返回顶部 返回列表