打印

问一个关于keil startup的问题

[复制链接]
2675|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ruyeecheung|  楼主 | 2010-1-6 22:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
新建一个keil的工程
我选择的atmel52mcu
如果不加载任何c文件,编译的时候会有2warning大意是

没被定义的?C_START
但是我们仔细看一下反汇编窗口,这个文件的功能是正常的(1、置7F以下单元为02、置SP073、跳到程序开始的地方)
如果定义一个char型的变量这个时候这个文件汇编成1、置7F以下单元为02、置SP083LJMP MAIN
我有个推测:
1、会不会是 这个编译器在 寻找MAIN,当没有.c文件的时候,因为它找不到MAIN函数,所以发出警告,可是为什么警告*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL?并且这是编译器强制将这句话解释为跳转到程序开始的地方,当如果有.c文件的时候,则跳到main
2sp初始化的值?=07+使用的data资源?在没有.c文件时,#?STACK起什么作用?为什么没有关于它的警告?
进而我想请教以下几个问题:
1、如果全部用汇编写代码,是否需要startup文件?(我觉得,不要 应该是可以,因为这段代码的功能通过汇编都可以自己写?我想问的是 如果用它,怎么写自己的汇编程序保证1startup可以跳转到自己的汇编程序2、在code空间中能否刚好衔接)
2、在c中嵌入汇编是,如何方便地得出变量的地址(或者用某种记号代替变量的地址,只要编译器能认识)
3、大家用不用 keil 编译器,用不用汇编编程,觉得keil怎么样?看看对应的汇编代码我觉得太烂了,指向xdata的指针加1,用inc dptr就可以,它折腾了老半天

相关帖子

沙发
jerkoh| | 2010-1-6 22:51 | 只看该作者
全部汇编了 就建立ASM 文件 不要start 这个C 的初始化的吧?
汇编里面 指针 内存等都是自己已经分配的

使用特权

评论回复
板凳
原野之狼| | 2010-1-7 00:29 | 只看该作者
1 没有MAIN函数的时候,汇编语句LJMP MAIN找不到相应的入口。
2 除了全局变量,剩下的空间就是栈的空间了,所以栈指针在DATA区之上,栈向上增长。
  2.1 全部用ASM,那么就不需要这个文件里,因为这个文件里很多操作都是为C运行做准备工作的。
  2.2 看看 IMPORT EXPORT 关键字
  2.3 KEIL用的很广泛,不要说它很烂。建议先仔细看看编译器的文档介绍。

使用特权

评论回复
地板
xlsbz| | 2010-1-7 12:01 | 只看该作者
本帖最后由 xlsbz 于 2010-1-7 12:04 编辑
新建一个keil的工程
我选择的atmel的52mcu如果不加载任何c文件,编译的时候会有2个warning大意是

没被定义的?C_START)但是我们仔细看一下反汇编窗口,这个文件的功能是正常的(1、置7F以下单元为0,2、置SP为07 ...
ruyeecheung 发表于 2010-1-6 22:33


它折腾了老半天 说明keil很好!

某种程度上,折腾的越久 ,说明它越好!

楼主自己写的不用怎么折腾,是因为你的可移植性不好!

你写10行程序,当然没有折腾的必要了!这时候,keil不如你!

你一个程序500万行,那么你的汇编就折腾你了!并且永不停止......


再如盖楼,如果你盖一层,那么你不用画图纸 直接盖

如果盖得楼是500层........

使用特权

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

本版积分规则

6

主题

88

帖子

0

粉丝