C语言源代码关于srartup问题.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言源代码关于srartup问题

source group下的startup.a51文件有什么用? 有这个文件在的时候我的编译会有警告, 而删除这个文件的时候,编译会通过,当然后面调试会出问题。 这个一个试验小程序: ??????????ORG 0100H MaIN:?????MOV a,#0FEH ??????????MOV a,P1 ??????????RL??a ??????LCaLL DELaY ??????aJMP??MaIN DELaY:????MOV??R7,#255 D1:???????MOV??R6,#255 D2:???????DJNZ R6,D2 ??????????DJNZ R7,D1 ??????RET ??????END 是不是程序开头要加什么呢? 答 1: ::程序开头应该再加: ORG 0000H LJMP 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: 080aH Program 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处就可实

文档评论(0)

ipad0b + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档