运行到main()之前,keil都做了些什么?

[复制链接]
6021|17
 楼主| soeni 发表于 2007-4-23 09:51 | 显示全部楼层 |阅读模式
以前一直用汇编,程序从上电到整个运行过程清清楚楚的,现在用了KEIL C51,一直没有弄懂程序怎么会跳到main()中来,在跳到main()之前,keil c51都做了那些工作?
有人给点提示吗?
mcuatmel 发表于 2007-4-23 09:56 | 显示全部楼层

看一下反汇编就知道了

 楼主| soeni 发表于 2007-4-23 10:13 | 显示全部楼层

谢谢楼上朋友的提示

还有startup.s文件有什么作用,好像把删除了影响也不大啊!照样能编译通过
turmary 发表于 2007-4-23 11:22 | 显示全部楼层

startup.s删除就使用默认的库启动代码.

并不是没有了启动代码.
启动代码可以看startup.a51在C51LIB下.
 楼主| soeni 发表于 2007-4-23 11:24 | 显示全部楼层

我的理解

是不是建立工程的时候,加入startup.s,程序复位后先运行该文件初始化
如果建立工程的时候不加入startup.s文件,程序复位的时候不对startup.s进行处理?
 楼主| soeni 发表于 2007-4-23 11:35 | 显示全部楼层

to:turmary

你的意思也就是说:工程不添加startup.s文件,程序默认它还是执行的?
turmary 发表于 2007-4-23 11:47 | 显示全部楼层

不是啊,加入的startup.s是针对该程序的特定启动代码,调用main()

把它删除,会连接库中的启动代码调用main().
xwj 发表于 2007-4-23 12:14 | 显示全部楼层

添加了就是自己的,不添加就会自动链接LIB目录下的startup.a51

反正不管怎样都得又启动的代码,
不然程序怎么能自己跑到C文件的main()里去呢?

有疑问多看看编译器帮助啊,讲的很详细的
drq1997 发表于 2007-4-23 12:20 | 显示全部楼层

占个位

turmary 发表于 2007-4-23 12:27 | 显示全部楼层

还是大侠xwj讲的通俗一点儿!!!

 楼主| soeni 发表于 2007-4-23 15:40 | 显示全部楼层

呵呵,谢谢大家的讲解

看来还的多学习
不过有时候看帮助真的看的满头雾水的,只怪我辈学识尚浅。
还有现在出来了个KEIL UV3,说是用来开发ARM 的,不知道是不是也和KEIL UV2一样的过程!
joy晴天 发表于 2007-4-23 21:05 | 显示全部楼层

arm里的启动代码,看了arm也有助于理解这个

xuxyl2 发表于 2007-4-24 08:06 | 显示全部楼层

startup主要是把片内RAM清零,设定堆栈指针到变量区以外,

然后跳转到main。如果不加startup,则在main()执行之前只设堆栈指针。
 楼主| soeni 发表于 2007-4-24 14:32 | 显示全部楼层

个位解释的都很清楚!

其实有时间真的还是要去看看ADS 或KEIL UV3/UV2的帮助文档
在这里问出来主要对我们这些初学者来说指明个方向而已,谢谢!
Swd21ic 发表于 2007-4-24 18:00 | 显示全部楼层

~~~

以前不明白startup.现在搞了AT91..还不是懂startup...
哈哈
 楼主| soeni 发表于 2007-4-24 19:20 | 显示全部楼层

呵呵

确实比较难懂的东西,我现在看了2天了,还是没有弄懂在ADS  里面怎么弄这个启动代码
jshmlly 发表于 2007-4-25 20:55 | 显示全部楼层

两天时间不长耐心点阿

学习ARM不象学习51 。
要多看书,打持久战。
pigjiang 发表于 2007-4-25 21:32 | 显示全部楼层

ADS里面的启动代码.s文件是自己写的 。

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

本版积分规则

3

主题

10

帖子

0

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