VAR ATmega128 一个很严重的Bug
unsigned long int aa=0;unsigned long int bb=0;
// Timer 0 overflow interrupt service routine
interrupt void timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=0x90;
// Place your code here
if(aa<=bb) //如果去掉这个分支判断,一切都正常
{
aa=bb+(unsigned long int)100;//每次断点在这调试,aa=0;bb=0
}
bb++;
}
我在 ATmega16 里调试通过,没问题,但是在 ATmega128 里调试就是 每次断点在这调试,aa=0;bb=1 这个问题。 我用的是 JTAG 调试器,阿莫这里买的。
请高手帮帮助,这是什么问题? AVR ATmega128 这个Bug 是我第一个发现的 有知道问题所在的高手请教教我。 首先,没有VAR这个系列,就算是machao老师也没见过啊
另外,你发现的不叫bug。是你自己不懂
这个是中断中操作变量,变量声明时,加上volatile 就没事了 如果修改后,仍存在你说的那种情况
那就检查一下是不是有数组或指针溢出了,覆盖到了这个变量
编译器的Bug,没那么容易给你发现的 LCQTJJTDS 引用AVR-LIB作者的话“怀疑编译器有问题的使用者99.99999999%是自己编程的问题” VAR 是什么意思? 我发现问题了,是因为每隔n个时钟周期,就会重启一次,所以变量全部清空。
但是,我没有开那个看门狗呀。会不会是因为别人写这个芯片的时候,熔丝用上的看门狗吗?
熔丝位这东西,是不是设置了,就永久性了,即使用JTAG调动代码时,没有开启某功能。 打错字,是 AVR 不是 VAR 我写惯了JavaScript脚本语言,所以总打错了。
我学AVR,是半路子出家的那种。 http://www.ourdev.cn/guide_index.html
每个链接的内容都看一遍 看门狗被设置过是有很大可能性的。
把狗关了应该就好了,熔丝设置除了加密位要小心以外都是可以反复设置的 To: erxun 老孟
好的,谢谢! 回复【楼主位】cba2011
unsigned long int aa=0;
unsigned long int bb=0;
// timer 0 overflow interrupt service routine
interrupt void timer0_ovf_isr(void)
{
// reinitialize timer 0 value
tcnt0=0x90;
// place your code here
if(aa<=bb) //如果去掉这个分支判断,一切都正常
{
aa=bb+(unsigned long int)100;//每次断点在这调试,aa=0;bb=0
}
bb++;
}
我在 atmega16 里调试通过,没问题,但是在 atmega128 里调试就是 每次断点在这调......
-----------------------------------------------------------------------
我刚测试了一下:
http://cache.amobbs.com/bbs_upload782111/files_40/ourdev_645660JUFGNE.jpg
(原文件名:调试.jpg)
没问题
修改说明,改了一下语气 诸位高手们,你们太好了。我服了。说芯片很严重的BUG,是想引起您们的注意。不好意思,我在这里先道个歉“对不起!”。
我的问题解决了,是这个芯片之前有人使用过,他设置熔丝位看门狗使能。现在我熔丝把看门狗关掉后,一切就正常了。
太高兴了,我两天才把这个这么基础的问题给解决了。多谢诸位高手们的指引与帮助。以后我要常来这里看看。 晕,我想到了那个.........搞电源的。拜托下次别整这样的字眼了。 又多一个“高手” 对于任何想真正学习掌握MCU应用的,这个是必走之路,多经历几次,就会培养认真、踏实的态度,肤浅和浮躁都做不了这个工作。 高手多,心态好。
页:
[1]