打印

51单片机程序跑飞了

[复制链接]
5685|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
juanyong|  楼主 | 2011-3-29 18:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Uint16 xdata Time_10ms=0;void Timer0_ISR (void) interrupt 1   //10ms中断计时
{
   TH0 = TIMER0_RELOAD_HIGH;           // Reinit Timer0 register
   TL0 = TIMER0_RELOAD_LOW;
   if(++Time_10ms>=60000) Time_10ms=0;
当我定义Uint16 xdata Time_10ms=0; Time_10ms到14就复位0了。,别的地方没有幅值与调用的地方,当我定义Uint16 pdata Time_10ms=0; 时 Time_10ms就可以加到60000;而且程序发现很多地方都不对了 是不是跑飞了 是RAM溢出吗?

相关帖子

沙发
juanyong|  楼主 | 2011-3-29 18:39 | 只看该作者
发现其他的变量定义xdata时在运行过程也会自动变化,改为pdata就好了,pdata不也是xdata区吗?

使用特权

评论回复
板凳
ayb_ice| | 2011-3-29 19:03 | 只看该作者
这里的程序是没有问题的
其它地方引起的

使用特权

评论回复
地板
349485240| | 2011-3-29 19:04 | 只看该作者
学习了

使用特权

评论回复
5
juanyong|  楼主 | 2011-3-29 19:09 | 只看该作者
3# ayb_ice 是不是SP溢出啊

使用特权

评论回复
6
原野之狼| | 2011-3-29 19:16 | 只看该作者
就这些信息看不出问题 你的程序别的地方干了什么呢 说来听听 还有XDATA是偏上集成的还是外扩的 如果是外扩的 注意下硬件上有没有问题

使用特权

评论回复
7
juanyong|  楼主 | 2011-3-29 19:23 | 只看该作者
xdata 为片上集成 的   其他的地方太多了   但是没有地方给Time_10ms赋值

使用特权

评论回复
8
原野之狼| | 2011-3-29 19:30 | 只看该作者
没有给它赋值并不表示就不会带来问题
比如缓冲区溢出,比如堆栈溢出,这些都会导致程序的异常或当机。

使用特权

评论回复
9
SHUJIEWS| | 2011-3-29 21:14 | 只看该作者
还是有问题在变量加volatile

使用特权

评论回复
10
juanyong|  楼主 | 2011-3-29 21:57 | 只看该作者
应该是xdata溢出,屏蔽掉5个64位int型的数组就好了,怎样看xdata或RAM或堆栈溢出呢?

使用特权

评论回复
11
原野之狼| | 2011-3-29 22:20 | 只看该作者
编译完后有XDATA大小 看看有没有超出范围

使用特权

评论回复
12
opit| | 2011-3-29 22:31 | 只看该作者
不是程序跑飞了,是你定义的数值大了,单片机读不到。
你这样,你是打算写个10ms中断即使吗,你就用单片机自带的定时器,然后赋给TH0,TL0初值,例如TH0=(65536-50000)/256;TL0=(65536-50000)%256;然后找个变量自加,然后写if语句,就可以随便定义了。
如果你觉得程序跑偏了,可以手动定义一下看门狗,不过不应该是看门狗的问题。
希望能和各位大侠沟通

使用特权

评论回复
13
handlike| | 2011-3-29 23:17 | 只看该作者
读、写外部的xdata用的时间,要比内部的data多的多,是不是中断完成的任务多,中断没有退出下一个中断时间又到了。调整一下看是不是这个原因。

使用特权

评论回复
14
ayb_ice| | 2011-3-30 08:35 | 只看该作者
应该是别的指针访问乱了导致
因为定义pdata没有问题,其它地方没有访问,那只是表面现象,而指针乱了是可以误访问的

使用特权

评论回复
15
xubx83| | 2011-3-30 16:15 | 只看该作者
先简单做个测试程序试试读写是否正常?

使用特权

评论回复
16
juanyong|  楼主 | 2011-3-31 14:20 | 只看该作者
我在main。c的主函数main()之前定义了 5个int型数组 长度为64 准备做采样,然后做FFT,我在ADC.c文件和FFT.c文件中分别都对这5个数组用extern声明。程序就跑飞了。后来我将main之前的定义删掉了,改在ADC。c文件中定义,然后再在FFT。c文件中extern声明 程序就好用了。
虽然好用了 但是仔细想想还是不知道原因在哪,请帮助分析一下

使用特权

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

本版积分规则

11

主题

34

帖子

1

粉丝