打印

MAIN的新发现

[复制链接]
2272|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kekemuyu|  楼主 | 2009-5-7 16:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
耕在此行| | 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 | 只看该作者

新大陆

使用特权

评论回复
5
ayb_ice| | 2009-5-7 21:21 | 只看该作者

看来总有"新发现"

使用特权

评论回复
6
电脑圆圆| | 2009-5-7 21:48 | 只看该作者

不要紧的

有WinMain在呢,什么时候想跳就跳

使用特权

评论回复
7
hewps| | 2009-5-7 23:19 | 只看该作者

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

“c51中的main函数是个大循环”是谁发现的?是新大陆吗?大家试一试就知道了

使用特权

评论回复
8
菜人菜语| | 2009-5-8 08:57 | 只看该作者

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

使用特权

评论回复
9
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编译器是不管的,飞掉了你就自认倒霉吧。

使用特权

评论回复
10
kekemuyu|  楼主 | 2009-5-8 10:31 | 只看该作者

回mcuplayer

我只是提醒一下不知道的朋友,MCUPLAYER知道,何不早说,我最今才知道的

使用特权

评论回复
11
taoest| | 2009-5-8 12:24 | 只看该作者

不确定

main()是否会循环,在单片机程序里是未知状态。不同编译器不同程序结构都不一样。所以应该避免这种情况发生。更不要说特意去利用了。

使用特权

评论回复
12
McuPlayer| | 2009-5-8 21:08 | 只看该作者

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

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

建议在自己程序main结束的地方加上while死循环。
或者整个主程序就是一个大循环,永远没有over的大循环

使用特权

评论回复
13
McuPlayer| | 2009-5-8 21:10 | 只看该作者

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

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

所以说,先前A人和C人谁更NewB之争,也是没事找事的讨论。

使用特权

评论回复
14
ayb_ice| | 2009-5-9 09:34 | 只看该作者

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

使用特权

评论回复
15
zhang123| | 2009-5-9 09:43 | 只看该作者

传说中的 哥伦布?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

7

帖子

0

粉丝