MAIN的新发现

[复制链接]
3496|14
 楼主| kekemuyu 发表于 2009-5-7 16:42 | 显示全部楼层 |阅读模式
c51中的main函数是个大循环,而且不可跳出
耕在此行 发表于 2009-5-7 19:20 | 显示全部楼层

呵呵

 MAIN的新发现 

c51中的main函数是个大循环,而且不可跳出
 
---------------------------------------------------------------------
原来是这样的啊.!!!!!!!!!!!
chinaboy20 发表于 2009-5-7 20:50 | 显示全部楼层

晕,main函数执行完后,

晕,main函数执行完后,有可能又回地址00H,结果像一个大循环,

请看这贴
https://bbs.21ic.com/club/bbs/list.asp?boardid=11&t=3285368&tp=%u8FD9%u4E2A%u8FD8%u8981%u770B%u4F60%u5F53%u524D%u7684RAM%u5806%u6808%u72B6%u6001%u7684
huangqi412 发表于 2009-5-7 21:06 | 显示全部楼层

新大陆

ayb_ice 发表于 2009-5-7 21:21 | 显示全部楼层

看来总有"新发现"

电脑圆圆 发表于 2009-5-7 21:48 | 显示全部楼层

不要紧的

有WinMain在呢,什么时候想跳就跳
hewps 发表于 2009-5-7 23:19 | 显示全部楼层

“c51中的main函数是个大循环”是谁发现的?

“c51中的main函数是个大循环”是谁发现的?是新大陆吗?大家试一试就知道了
菜人菜语 发表于 2009-5-8 08:57 | 显示全部楼层

要是不循环,那才是新发现呢

McuPlayer 发表于 2009-5-8 09:50 | 显示全部楼层

那你希望main函数是什么样子的呢?

单片机的C,无论是哪家的芯片亦或编译器,跟PC上的C是不一样的。

PC上C是被OS所调用,以Windows平台为例,Windows会先初始化你程序所需要的环境,然后call你的main或者WinMain函数,你这个函数一return就又把控制权交还给了OS

在单片机上一般在main之前也会初始化一些变量堆栈之类,然后jmp到main(不用call还可以节约1个单位的堆栈)。但是main函数的retrun问题来了,main根本不是call的,何来return?实际上一些C编译器会在用户的程序最后追加一个踏步指令,相当于C的一个while(1);也有C编译器是不管的,飞掉了你就自认倒霉吧。
 楼主| kekemuyu 发表于 2009-5-8 10:31 | 显示全部楼层

回mcuplayer

我只是提醒一下不知道的朋友,MCUPLAYER知道,何不早说,我最今才知道的
taoest 发表于 2009-5-8 12:24 | 显示全部楼层

不确定

main()是否会循环,在单片机程序里是未知状态。不同编译器不同程序结构都不一样。所以应该避免这种情况发生。更不要说特意去利用了。
McuPlayer 发表于 2009-5-8 21:08 | 显示全部楼层

晕,刚码了一堆字体,全消失了

main函数结尾处的踏步指令,对C编译器来说,不是义务,也是非标的做法。

建议在自己程序main结束的地方加上while死循环。
或者整个主程序就是一个大循环,永远没有over的大循环
McuPlayer 发表于 2009-5-8 21:10 | 显示全部楼层

另外,写单片机的程序要养成看所产出汇编代码的习惯

没必要全看,只看自己关注的地方就好了

所以说,先前A人和C人谁更NewB之争,也是没事找事的讨论。
ayb_ice 发表于 2009-5-9 09:34 | 显示全部楼层

不要把"现象"当然"结论"对待

zhang123 发表于 2009-5-9 09:43 | 显示全部楼层

传说中的 哥伦布?

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

本版积分规则

5

主题

7

帖子

0

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