单片机中断使用goto语句
时间:10-02
整理:3721RD
点击:
最近在做一个mp6遇到一些问题。就是在用按键触发外部中断实现上下一曲
见我的程序结构如下
main()
{
while(1)
{
loop:
opengile(,,n); //打开文件
readfile(); //读取文件
n++;
}
}
interupt()
{
if(...)
n++;
goto loop;
}
n为mp3文件的序号
文件在被读取的时候 是连续的,也就是这个程序会执行很久
就是想在按键按下后 就在中断里把n加一 然后跳转到打开文件的函数那儿 进行打开下一个文件
理论上 这样是很完美的。可是我这样做 程序就出错了
看下面错误提示
请问一下大神们 这个该怎么解决 或者有其他的方法可以跳转的
因为redfile函数是连续执行的,我无法通过标志位来判断进行break循环 只能在中断里进行跳转
见我的程序结构如下
main()
{
while(1)
{
loop:
opengile(,,n); //打开文件
readfile(); //读取文件
n++;
}
}
interupt()
{
if(...)
n++;
goto loop;
}
n为mp3文件的序号
文件在被读取的时候 是连续的,也就是这个程序会执行很久
就是想在按键按下后 就在中断里把n加一 然后跳转到打开文件的函数那儿 进行打开下一个文件
理论上 这样是很完美的。可是我这样做 程序就出错了
看下面错误提示
请问一下大神们 这个该怎么解决 或者有其他的方法可以跳转的
因为redfile函数是连续执行的,我无法通过标志位来判断进行break循环 只能在中断里进行跳转
额 mp3 打错了!
可以设置一个变量A=1;
=================
redfile 方法里判断
if (A=1)
{
读取文件
}
=================
在中断函数里写
A=0;
++++++++++++++++++++++++
你的 opengile 方法名写错了 应该是 openfile
goto只能跳转到同一个函数的label处,不能跳转到其它函数,如果硬要跳转的话,估计只能用汇编了
不要随意使用goto语句。有人觉得goto语句只是相当于汇编的JUMP而随意使用,结果导致程序经常出错跑飞,而且排错也非常困难。
对于你的情况,我不知道你的readfile()函数是怎么写的。在我做的MP3中,所有按键识别如上下曲、音量加减均播放函数里嵌入,完全不会影响播放效果。顺便说一下我的MP3硬件配置:STC12LE5A60S2,30.00MHz晶振,VS1003B模块,12846OLED,中文字库芯片,DS1302。完美播放320码率MP3
只要加标志位就行了,
然后在程序里面多加一些判断就可以了
good:lol