打印
[51单片机]

C8051F410单片机code区大于6K后程序无法运行

[复制链接]
3566|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
最近使用C8051F410单片机,keil编译,之前程序一直可以运行,可是今天当再加入一段代码后,code区编译后大于6K,data区115左右,xdata区100左右,程序编译后没有错误,但下载到单片机后就再也无法运行了,根本进不了主程序。看门狗也关了,keil也是使用的完全**版的,C8051F410 RAM 256B,外部RAM 2K,Flash ROM 32K,一直找不到原因,不知道大家有没有什么建议呢?

相关帖子

沙发
南宫云明| | 2013-7-22 20:37 | 只看该作者
目测是你加入的代码的问题。。。

使用特权

评论回复
板凳
freeerror|  楼主 | 2013-7-22 20:42 | 只看该作者
南宫云明 发表于 2013-7-22 20:37
目测是你加入的代码的问题。。。

不太可能,加入的代码就是在xdata区定义了一个float型变量,然后在主程序里求了一下这个变量的值,怎么会引起程序无法执行呢

使用特权

评论回复
地板
dirtwillfly| | 2013-7-22 21:39 | 只看该作者
有时浮点数运算啊。今天白天就在论坛看到一个用C8051进行浮点数运算出问题的。
没用过C8051这个芯片,建议你调试的时候,关注一下浮点数运算部分占用的资源情况和运行的时钟周期

使用特权

评论回复
5
南宫云明| | 2013-7-22 21:42 | 只看该作者
freeerror 发表于 2013-7-22 20:42
不太可能,加入的代码就是在xdata区定义了一个float型变量,然后在主程序里求了一下这个变量的值,怎么会 ...

你把float改成int,再运算一下,看一下能执行吗

使用特权

评论回复
6
ayb_ice| | 2013-7-23 08:08 | 只看该作者
看门狗超时了吧,
从复位开始跟踪

使用特权

评论回复
7
freeerror|  楼主 | 2013-7-23 12:10 | 只看该作者
ayb_ice 发表于 2013-7-23 08:08
看门狗超时了吧,
从复位开始跟踪

看门狗已经关闭了

使用特权

评论回复
8
freeerror|  楼主 | 2013-7-23 12:12 | 只看该作者
南宫云明 发表于 2013-7-22 21:42
你把float改成int,再运算一下,看一下能执行吗

还是无法执行,感觉就像是程序代码超过一定程度就无法执行了

使用特权

评论回复
9
freeerror|  楼主 | 2013-7-23 12:48 | 只看该作者
本帖最后由 freeerror 于 2013-7-23 12:49 编辑

当程序编译结果如下所示时就能执行

可当我再在程序中定义一个char型变量以后(没有使用这个变量),编译结果如下:程序就再也不能执行了

不知道是为啥

使用特权

评论回复
10
ayb_ice| | 2013-7-23 13:35 | 只看该作者
只能说程序本身就有问题,以前没有暴露而已

都说了复位就开始跟踪,

使用特权

评论回复
11
pch1989| | 2013-7-23 14:44 | 只看该作者
请问你说的关闭看门狗是在哪关闭的,main函数里面?

使用特权

评论回复
12
O狂且O| | 2013-7-23 16:03 | 只看该作者
freeerror 发表于 2013-7-23 12:48
当程序编译结果如下所示时就能执行

可当我再在程序中定义一个char型变量以后(没有使用这个变量),编译结 ...

检查一下是那句话导致的data变小, code变大? 问题应该就可以确定了.

使用特权

评论回复
13
freeerror|  楼主 | 2013-7-23 16:44 | 只看该作者
pch1989 发表于 2013-7-23 14:44
请问你说的关闭看门狗是在哪关闭的,main函数里面?

main函数第一句就是关闭看门狗

使用特权

评论回复
14
ayb_ice| | 2013-7-23 17:12 | 只看该作者
freeerror 发表于 2013-7-23 16:44
main函数第一句就是关闭看门狗

早说了是看门狗超时了,你非要说关了,关是关了,人家已经咬人了,关晚了,

在起动文件中关吧

使用特权

评论回复
15
ayb_ice| | 2013-7-23 17:13 | 只看该作者
早说了要你去调试,都不知道干什么去了

使用特权

评论回复
16
linlh11| | 2013-7-23 17:24 | 只看该作者
我用了5年C8051F410,程序代码10K左右,也没有发现楼主说的问题。建议楼主看看,是不是程序里有定义EEPROM的地址范围,这个EEPROM是和16K的FLASH共用的,所以其地址空间范围一定要注意。

使用特权

评论回复
17
wyscjm| | 2013-7-23 17:27 | 只看该作者
data数据大了点吧,减少就可以了,可以将不必要的改为xdata之类的

使用特权

评论回复
18
ningling_21| | 2013-7-23 19:39 | 只看该作者
这跟程序大小有关系吗?

使用特权

评论回复
19
freeerror|  楼主 | 2013-7-24 08:44 | 只看该作者
问题已经解决了,添加STARTUP.A51文件,在文件里加了一句MOV 0xD9,0x00 关闭了看门狗,就好了。感谢ayb_ice的提醒,也谢谢大家的关注。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

120

帖子

4

粉丝