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, 来源: