本帖最后由 Rain_King 于 2013-11-19 11:57 编辑
使用PIC单片机的时候,经常出现一些非常难以理解的一些现象,根本没法找出问题,我甚至称这个为诡异。以前使用51的时候,啥问题都没有,即使有问题也很容易发现,并且很好的理解为啥出现这个问题。目前我遇到这些问题,各位讨论讨论,看是啥东东,我的系统架构是消息和时间结合组成的,我个人觉得不错....
1,这个问题是按键的扫描,用2个adc接口,用来处理几个按键,我是10ms扫一次,以及利用中断消抖等等,如果有按键按下,就将此按键的消息储存在消息系统里,然后再处理,现在的问题是:
由于有2个adc值嘛,先处理的adc那个,产生按键消息非常的正常,后处理的adc,就会发现产生的按键消息非常多,貌似没有经过消抖似的,如果将这两个adc的处理顺序换一下,结果还是先处理的正常产生按键消息,后处理的产生很多按键消息.....更加奇葩的是,如果我在后处理的那个里面加一条端口处理语句,例如:Test=1;结果就正常了.....不知道说清楚了没.....还有2个adc处理的相关变量时独立的,没有共用.......
2,关于储存数据,原先存储数据妥妥的,结果换一个芯片测试之后,就发现读取数据出问题了,如果单独测试函数的功能,发现存储数据和读数据是正常的,然后一步步来测试,发现有时候,只要进入到特定的函数之后,读取函数功能就没法工作了.....例如下面的例子:
读取数据;a
Inti()
{读取数据;b}
读取数据c
这是说:就这个Inti函数的里面有读取数据的函数,如果在这个调用函数的前面,或者后面读取数据,都是正常的,结果放到这个函数里面,结果就不正常了......可是这个Init()函数里面也只是写的调用读取数据的函数啊,其他的都没有变,怎么就有问题呢......至于函数栈的溢出,不可能,以为我的嵌套也就3次而已........
3,希望各位说说一般检查程序怎么检查的,我一般是逐步来测得.....可是遇到一些诡异的现象就没法处理了.......
4、我不知道怎么回事了...我就是问问题啊...顺带和大家讨论讨论.......而且我到目前为止还没有找出真正的原因,但是我不知道为啥又是置顶,又是版主推荐.....这是要闹哪样啊.....我的心脏承受不住啊..... |