C语言读取按键up出现两个数,C语言_源代码-关于srartup问题.doc

这篇博客详细解释了startup.a51文件在C51编程中的作用,它是如何初始化内存、堆栈和外部设备的。若使用纯汇编,它并非必需,但理解其存在有助于避免警告。作者还讨论了不同内存区域(data, idata, xdata, pdata)的特性和区别。通过删除startup.a51,编译警告消除,但可能影响调试。对于C程序员,它通常处理了C代码的初始化工作。
摘要由CSDN通过智能技术生成

source group下的startup.a51文件有什么用?有这个文件在的时候我的编译会有警告,而删除这个文件的时候,编译会通过,当然后面调试会出问题。这个一个试验小程序: ORG 0100HMaIN: MOV a,#0FEH MOV a,P1 RL??a LCaLL DELaY aJMP??MaINDELaY:????MOV??R7,#255D1: MOV??R6,#255D2: DJNZ R6,D2 DJNZ R7,D1 RET END是不是程序开头要加什么呢?

答 1:

::程序开头应该再加:ORG 0000HLJMP MaIN

答 2:

::Keil中的startup.a51文件一般不要,加了反而出错 不能通过编译 .

答 3:

哦,多谢!Build target 'Target 1'linking...*** WaRNING L5: CODE SPaCE MEMORY OVERLaP FROM:????0000H TO: 0112H*** WaRNING L1: UNRESOLVED EXTERNaL SYMBOL SYMBOL:???C_STaRT MODULE:??STaRTUP.obj ?C_STaRTUP *** WaRNING L2: REFERENCE MaDE TO UNRESOLVED EXTERNaL SYMBOL:???C_STaRT MODULE:??STaRTUP.obj ?C_STaRTUP aDDRESS: 080aHProgram Size: data 9.0 xdata 0 code 290"exam1" - 0 Error s , 3 Warning s .--------------------------------------------这几个警告还是在阿

答 4:

多谢我删了startup.a51后警告就没了

答 5:

个人见解startup.a51的主要任务是完成了清理内存和建立堆栈的工作,然后跳转到C环境支持的初始化任务,如果使用纯汇编,是可以不需要这个文件的,但是需要处理好堆栈,当然也可以把你的代码写到这个文件里,把跳转入口指向你的程序入口,偷懒的做法……

答 6:

高见:谢谢啊!明白了它的用途了,因为一直写汇编程序,还没试过用Keil写C.以后希望能实践一下!

答 7:

有些糊涂当然也可以把你的代码写到这个文件里------------------------------这句不大明白,

如果使用汇编编程,初始化工作由你自己完成,可以不加.

如果使用C编程,如果你在0000地址后会自己执行初始化等等其实也可以不加,否则一定要加.

另外,学习这个文件对你了解51的工作也是很有价值的.

在51系列中data,idata,xdata,pdata的区别data:固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小。 idata:固定指前面0x00-0xff的256个RAM,其中前128和data的128完全相同,只是因为访问的方式不同。idata是用类似C中的指针方式 访问的。汇编中的语句为:mox ACC,@Rx. 不重要的补充:c中idata做指针式的访问效果很好 xdata:外部扩展RAM,一般指外部0x0000-0xffff空间,用DPTR访问。 pdata:外部扩展RAM的低256个字节,地址出现在A0-A7的上时读写,用movx ACC,@Rx读写。这个比较特殊,而且C51好象有对此BUG, 建议少用。但也有他的优点,具体用法属于中级问题,这里不提。 startup.a51的作用 和汇编一样,在C中定义的那些变量和数组的初始化就在startup.a51中进行,如果你在定义全局变量时带有数值,如unsigned char data xxx "100";,那startup.a51中就会有相关的赋值。如果没有 100,startup.a51就会把他清0。(startup.a51 变量的初始化)。 这些初始化完毕后,还会设置SP指针。对非变量区域,如堆栈区,将不会有赋值或清零动作。 有人喜欢改startup.a51,为了满足自己一些想当然的爱好,这是不必要的,有可能错误的。比如掉电保护的时候想保存一些变量, 但改startup.a51来实现是很笨的方法,实际只要利用非变量区域的特性,定义一个指针变量指向堆栈低部:0xff处就可实现。, 为什么还要去改? 可以这么说:任何时候都可以不需要改startup.a51,如果你明白它的特性

初学者编程最简练的指导点击: 36, 文章入库日期: 2008-04-24 11:47:31, 来源:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值