资源描述:
《c语言源代码-关于srartup的问题》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、sourcegroup下的startup.a51文件有什么用?有这个文件在的时候我的编译会有警告,而删除这个文件的时候,编译会通过,当然后面调试会出问题。这个一个试验小程序: ORG0100HMaIN: MOVa,#0FEH MOVa,P1 RL a LCaLLDELaY aJMP MaINDELaY: MOV R7,#255D1: MOV R6,#255D2: DJNZR6,D2 DJNZR7,D1 RET
2、 END是不是程序开头要加什么呢?答1:::程序开头应该再加:ORG0000HLJMPMaIN答2:::Keil中的startup.a51文件一般不要,加了反而出错(不能通过编译).答3:哦,多谢!Buildtarget'Target1'linking...***WaRNINGL5:CODESPaCEMEMORYOVERLaP FROM: 0000H TO: 0112H***WaRNINGL1:UNRESOLVEDEXTERNaLSYMBOL SYMBOL: ?C_STaRT MODULE: STaRTUP.obj(?C
3、_STaRTUP)***WaRNINGL2:REFERENCEMaDETOUNRESOLVEDEXTERNaL SYMBOL: ?C_STaRT MODULE: STaRTUP.obj(?C_STaRTUP) aDDRESS:080aHProgramSize:data=9.0xdata=0code=290"exam1"-0Error(s),3Warning(s).--------------------------------------------这几个警告还是在阿答4:多谢我删了startup.a51后警告就没了答5:个人见解startu
4、p.a51的主要任务是完成了清理内存和建立堆栈的工作,然后跳转到C环境支持的初始化任务,如果使用纯汇编,是可以不需要这个文件的,但是需要处理好堆栈,当然也可以把你的代码写到这个文件里,把跳转入口指向你的程序入口,偷懒的做法……答6:高见:谢谢啊!明白了它的用途了,因为一直写汇编程序,还没试过用Keil写C.以后希望能实践一下!答7:有些糊涂当然也可以把你的代码写到这个文件里------------------------------这句不大明白,如果使用汇编编程,初始化工作由你自己完成,可以不加.如果使用C编程,如果你在0000地址后会自己执行初始化等等其实也可以
5、不加,否则一定要加. 另外,学习这个文件对你了解51的工作也是很有价值的.在51系列中data,idata,xdata,pdata的区别data:固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小。idata:固定指前面0x00-0xff的256个RAM,其中前128和data的128完全相同,只是因为访问的方式不同。idata是用类似C中的指针方式访问的。汇编中的语句为:moxACC,@Rx.(不重要的补充:c中idata做指针式的访问效果很好)xdata:外部扩展RAM,一般指外部0x0000-0xffff空间,
6、用DPTR访问。pdata:外部扩展RAM的低256个字节,地址出现在A0-A7的上时读写,用movxACC,@Rx读写。这个比较特殊,而且C51好象有对此BUG,建议少用。但也有他的优点,具体用法属于中级问题,这里不提。startup.a51的作用和汇编一样,在C中定义的那些变量和数组的初始化就在startup.a51中进行,如果你在定义全局变量时带有数值,如unsignedchardataxxx="100";,那startup.a51中就会有相关的赋值。如果没有=100,startup.a51就会把他清0。(startup.a51==变量的初始化)。这些初始化
7、完毕后,还会设置SP指针。对非变量区域,如堆栈区,将不会有赋值或清零动作。有人喜欢改startup.a51,为了满足自己一些想当然的爱好,这是不必要的,有可能错误的。比如掉电保护的时候想保存一些变量,但改startup.a51来实现是很笨的方法,实际只要利用非变量区域的特性,定义一个指针变量指向堆栈低部:0xff处就可实现。,为什么还要去改?可以这么说:任何时候都可以不需要改startup.a51,如果你明白它的特性初学者编程最简练的指导点击:36,文章入库日期:2008-04-2411:47:31,来源:www.picavr.com这里讲述一些初学者学习c51的
8、一些误区和