世纪电源网社区logo
社区
Datasheet
标题
返回顶部
讨论

单片机c语言如何返回主函数

[复制链接]
查看: 275 |回复: 4
1
wintdier
  • 积分:427
  • |
  • 主题:11
  • |
  • 帖子:66
积分:427
LV6
高级工程师
  • 2023-4-4 13:25:57
我想利用外部中断0和1做两个按键,在这两个按键按下时实现一个修改功能,一个退出正在运行的程序返回到主介面的功能,谁能帮我一下,告诉我具体的思路应该怎么弄,如果能给个具体的程序就更好了,谢谢!我用的是C
我的思路是主程序中按某个键进入子函数中,然后在子函数运行的过程中如果按下退出键,直接结束子函数回到主函数中!
收藏收藏
pipibao
  • 积分:418
  • |
  • 主题:14
  • |
  • 帖子:68
积分:418
LV6
高级工程师
  • 2023-4-6 14:17:25
  • 倒数4
 
中断里面不能用形参和返回值!!!

具体的做法是声明一个全局变量,在中断中改变变量的值或者说状态。
主程序就负责判断这个变量的状态,根据状态做出选择,如果状态比较多就用SWITCH,否则if就可以了。

对于你补充的问题可以这样
在函数里,需要退出的地方写上,return;

if(有推出键按下) retrun;
DeadEnd
  • 积分:446
  • |
  • 主题:13
  • |
  • 帖子:77
积分:446
LV6
高级工程师
  • 2023-4-7 14:03:28
  • 倒数3
 
 C++可以通过异常处理的throw和catch来实现从子函数的子函数直接返回主函数,汇编语言可以用jmp指令跳转实现这个需求。

C语言主要靠函数调用和return在函数之间切换,很难做到在多层调用中直接返回主函数。虽然goto语句可以无条件跳转,但是必须在同一个函数中使用。
因此解决的方法也是用一个特殊的值作为需要返回的标志,然后在两层调用函数中都遇到该值就返回,但是这个方法也有两个前提:
1)两个子函数都是由返回值的函数
2)选择的特殊值和函数正常的返回的取值不会冲突,不会引起二义性。

因此建议这个问题还是用C++ 的异常去解决比较好。
z443233785
  • 积分:5343
  • |
  • 主题:117
  • |
  • 帖子:1003
积分:5343
LV8
副总工程师
  • 2023-4-9 19:04:43
  • 倒数2
 
直接BP=BP-2中断返回后自动结束子程序
Vserraow
  • 积分:790
  • |
  • 主题:36
  • |
  • 帖子:148
积分:790
LV6
高级工程师
最新回复
  • 2023-4-10 14:16:46
  • 倒数1
 
main()
{

}

XXXX() int~~~ X
{

}keil c 编译到这里会自动增加弹栈和中断返回,不用程序员关心。

XXXX()
{

}依然自动返回,你不需要考虑如何返回的问题

这个只是解答了你的问题。另外我在给你个建议。
c是c 汇编是汇编 不要用汇编的思想去用c编程
否则c就失去了作为高级语言屏蔽硬件的优势
热门技术、经典电源设计资源推荐

世纪电源网总部

地 址:天津市南开区黄河道大通大厦8层

电 话:400-022-5587

传 真:(022)27690960

邮 编:300110

E-mail:21dy#21dianyuan.com(#换成@)

世纪电源网分部

广 东:(0755)82437996 /(138 2356 2357)

北 京:(010)69525295 /(15901552591)

上 海:(021)24200688 /(13585599008)

香 港:HK(852)92121212

China(86)15220029145

网站简介 | 网站帮助 | 意见反馈 | 联系我们 | 广告服务 | 法律声明 | 友情链接 | 清除Cookie | 小黑屋 | 不良信息举报 | 网站举报

Copyright 2008-2024 21dianyuan.com All Rights Reserved    备案许可证号为:津ICP备10002348号-2   津公网安备 12010402000296号