轉C8051F进不了main函数问题解决办法.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文档。上传文档
查看更多
轉C8051F进不了main函数问题解决办法

转:C8051F?进不了main函数问题解决办法 问题: 在做C8051F380的一个程序,但在硬件仿真的时候一直进不了main函数。使用的是Keil uV4开发环境,我在STARTUP.A51文件的198行设置断点,如下,可以run到该断点处,说明启动代码执行正常。正常情况下该调整到main()函数执行C程序了,然而我现在全速(F5)执行,过一会程序再次停到该处。并没有跳转到main()函数,(我在main()里的第一条语句处设置了断点)。 进入Debug模式后,首先全速执行到198行,然后在187行设置断点,全速执行,执行后的结果如下: 这是为什么呢???这说明了什么???为什么又执行回去了呢?难道是看门狗导致的?对就是这条狗的问题。下面进行分析。 ? ?由于程序稍微大了些:Program Size: data=35.4 xdata=1289 code=13929。使用的开发环境是Keil uV4,Keil Option--Target下的设置如下: ? ? 由于程序中data比较大,所以在Memory Model下设置为Large模式。程序编译通过,无错误,警告很多如下。警告只要是两种类型,一种是 INCOMPATIBLE MEMORY MODEL型,估计是C8051Fxxx 的USB的库中选择Memory Model类型为SMALL格式,而我这里工程设置的为Large模式,所以Keil给出这个警告;另外一种是 UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS,这种警告是提醒定义了一些函数,因为整个程序就没有调用到,所以给了警告。 *** WARNING L14: INCOMPATIBLE MEMORY MODEL ? ? MODULE: ?.\C8051F_USB\USBX_F38X.LIB (USB_API) ? ? MODEL: ? SMALL *** WARNING L14: INCOMPATIBLE MEMORY MODEL ? ? MODULE: ?.\C8051F_USB\USBX_F38X.LIB (USB_CLOCK_START) ? ? MODEL: ? SMALL *** WARNING L14: INCOMPATIBLE MEMORY MODEL ? ? MODULE: ?.\C8051F_USB\USBX_F38X.LIB (USB_SUSPEND) ? ? MODEL: ? SMALL *** WARNING L14: INCOMPATIBLE MEMORY MODEL ? ? MODULE: ?.\C8051F_USB\USBX_F38X.LIB (GET_INTERRUPT_SOURCE) ? ? MODEL: ? SMALL *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS ? ? SEGMENT: ?PR?KEY_SCAN?HS6200_TEST_SYS *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS ? ? SEGMENT: ?PR?TIMER_INIT?HS6200_TEST_SYS *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS ? ? SEGMENT: ?PR?DELAY_50US?C8051F_DELAY 从上面的分析可以看出,程序几乎没有问题。问题出在哪呢? 从Program Size(如上面红色部分所示)可以看出,原程序在xdata开辟了大量的数据(1289 Byte),在启动代码中会执行对xdata的初始化,由于C8051F380有看门狗,而看门狗默认是开启的。大部分程序员(一般)会在main函数的 第一句话才把看门狗关闭,同时由于定义的xdata很大,在启动代码中执行初始化时间远远超过了喂狗时间,所有导致执行启动代码的过程中看门狗复位,一直 进不了主程序,关不了狗,程序就一直复位,无限循环 IF XDATALEN 0 ? ?? ?? ?? ?? ? MOV? ???DPTR,#XDATASTART ? ?? ?? ?? ?? ? MOV? ???R7,#LOW (XDATALEN) ??IF (LOW (XDATALEN)) 0 ? ?? ?? ?? ?? ? MOV? ???R6,#(HIGH (XDATALEN)) +1 ??ELSE ? ?? ?? ?? ?? ? MOV? ???R6,#HIGH (XDATALEN) ??ENDIF ? ?? ?? ?

文档评论(0)

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

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

1亿VIP精品文档

相关文档