求教高手:乾坤大挪移。。。。。。

[复制链接]
5422|24
 楼主| XIANSir 发表于 2011-7-19 11:57 | 显示全部楼层 |阅读模式
AI, start, go, ST, DM
void main(void){
start:
while(1)
{
func1();
func2();
}
}

void INT1Serv(void) interrupt 2
{
........

goto start;
}

应该很容易理解吧。我想要的就是,发生中断后,从中断处理程序直接goto到main函数的开始处。

请问 怎么实现????还有,如果发生中断时程序在func1中,堆栈怎么办啊???
delin17 发表于 2011-7-19 12:28 | 显示全部楼层

2

我以前在6052内核上做过类似的事情,退出中断先执行一个函数,再返回中断点。
如果你对你用的单片机了解,可以在退出中断前找到堆栈中保存函数对应的位置,然后再将main的地址替换掉中断点的地址。返回就是跳到main了。
你这个个问题还可以直接用软件重启实现。
wqch0112 发表于 2011-7-19 12:30 | 显示全部楼层
直接用软件实现重启就OK了.....
ayb_ice 发表于 2011-7-19 13:09 | 显示全部楼层
这样会杯具的
 楼主| XIANSir 发表于 2011-7-19 14:11 | 显示全部楼层
我现在死的心都有了,这是什么**问题啊啊。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
ayb_ice 发表于 2011-7-19 14:17 | 显示全部楼层
中断必须用RETI返回,否则会影响中断,你那样做的话基本死悄悄
huangqi412 发表于 2011-7-19 14:33 | 显示全部楼层
晕倒。。。跨函数GOTO干啥。。。  实现软复位么。。。
huangqi412 发表于 2011-7-19 14:33 | 显示全部楼层
如果是实现软复位,自己想想该咋弄。。。
gurong60 发表于 2011-7-19 16:30 | 显示全部楼层
一般单片机都带有软件复位,好像是往固定寄存器送数
lxyppc 发表于 2011-7-19 16:42 | 显示全部楼层
  1. volatile unsigned char flag = 0;
  2. void main(void){
  3. start:
  4. while(1)
  5. {
  6. func1();
  7. func2();
  8. if(flag){
  9.     flag = 0;
  10.     goto start;
  11. }
  12. }
  13. }

  14. void INT1Serv(void) interrupt 2
  15. {
  16. ........

  17. flag = 1;
  18. }
dqyubsh 发表于 2011-7-19 20:32 | 显示全部楼层
中断里设置标记,主循环处理标记,这是通行的作法。

尝试忘掉GOGO。估计写三十年程序,也用不到一回。
bbqqbbqqbbq 发表于 2011-7-19 21:30 | 显示全部楼层
用goto的话,只能返回到原来的函数

就是说在中断里面用goto只能返回此中断函数里面。。。

不能跳到其他函数。。。

楼主这个问题我以前也遇到过。。。
linqing171 发表于 2011-7-19 21:32 | 显示全部楼层
看在白娘子的份上,如果用汇编比较好搞,不管reti 还是神马,都简单。
再C下,需要用setjmp 这个C标准的函数。
不过RETI还是必须的。调用一个带int的空中断函数就可以了。
linqing171 发表于 2011-7-19 21:33 | 显示全部楼层
10楼是同步的标准做法。
yewuyi 发表于 2011-7-19 22:51 | 显示全部楼层
:L,这样的代码还有结构性可言吗?
yewuyi 发表于 2011-7-19 22:51 | 显示全部楼层
俺实现找不到这样写代码的必要性
caner_hn 发表于 2011-7-20 09:02 | 显示全部楼层
特意验证:VC,GCC,IAR FOR STM8,IAR FOR ARM不允许这样写程序,LABLE只允许在同一函数内使用.不同函数可以使用相同的LABLE名.
jack_shine 发表于 2011-7-20 09:05 | 显示全部楼层
尽量减少使用goto语句
SmartEnergy 发表于 2011-7-20 09:51 | 显示全部楼层
1. 直接跳转过去,必死无疑。
2. 可以讲堆栈中的返回点数据改掉来达到乾坤大挪移。
3. 第10楼的建议。
4. 改进算法。要坚信,不管你算法多优秀,总有替代的办法。
redbat_228 发表于 2011-7-20 10:53 | 显示全部楼层
支持10楼的方法,慎用goto。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:冷暖自知,泰然处之;持之以恒,必有所成!

0

主题

609

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部