发新帖我要提问
12
返回列表
打印

PIC24 是MCU本身问题,还是编译器问题呢?

[复制链接]
楼主: sh007
手机看帖
扫描二维码
随时随地手机跟帖
21
e掾木| | 2011-3-29 08:34 | 只看该作者 回帖奖励 |倒序浏览
本帖最后由 e掾木 于 2011-3-29 08:36 编辑

呵呵,这严重鄙视很显然是针对我的,笑纳。
    看在LZ诚恳的份上,那就多说一点:
    既然是高温下闪烁,我感觉不是你的延时出了毛病,LED刷新最低20ms一次,再高就会看到频闪,但还不至于熄灭性闪烁。既然发生了,人对光线视觉暂留时间是0.1S,那就说明你的LED有至少100mS没刷新?这么长时间没刷新,请详细检查你的程序是不是在中断里打转?刷新数据不准,怀疑你在多处更新LED要显示的对象,在更新处被中断显示,解决办法是尽可能在一个地方更新,更新时仔细处理临界状态。
    呵呵,术语“临界”不是yewuyi提出的,稍微翻过书的设计者都知道,这不属于专用。大意是:那些要紧代码处理时不容许中断,需要一气呵成。处理时关掉中断,结束时打开中断。注意这里面的代码一定要越少越好,不要做函数调用、复杂数学计算,一般仅针对于硬件端口处理。
     中断压栈、出栈保存关键寄存器是必须的,附参考代码于后。
      .macro REGS_SAVE                                             
    push.d w0                                                         
    push.d w2                                                           
    push.d w4                                                         
    push.d w6                                                         
    push.d w8                                                         
    push.d w10                                                         
    push.d w12                                                         
    push w14                                                           

    push TBLPAG                                                      
    push PSVPAG                                                      
    push RCOUNT                                                   
   
    push SR                                                               
    push CORCON                                                     
.endm  


macro REGS_RESTORE                                                   
    pop CORCON                                                         
    pop SR                                                              

    pop RCOUNT                                                         
    pop PSVPAG                                                         
    pop TBLPAG                                                        

    pop w14                                                           
    pop.d w12                                                         
    pop.d w10                                                           
    pop.d w8                                                           
    pop.d w6                                                            
    pop.d w4                                                            
    pop.d w2                                                           
    pop.d w0                                                           
.endm

使用特权

评论回复
22
shizaigaole| | 2011-3-29 08:47 | 只看该作者
21# yewuyi

感觉上,但就延时来说PIC24出错的可能性不大,

因为这个只牵涉到CPU内部指令执行,

是否两种片子应用当中,尚有其他不同的地方?

LZ也莫生气,版主回答问题,就算你不满意,那也是回答问题了。
版主也莫生气,咱们调试不顺的时候,也难免着急上火,

谁还没有个脾气不好的时候呢?

二位淡定。

使用特权

评论回复
23
shizaigaole| | 2011-3-29 08:52 | 只看该作者
LZ应该写一段最小测试代码,
只做数码管显示,
专门验证这个问题,
这样可以排除应用程序当中的其他地方影响和牵连。

这个问题应该不难排除,
应该属于一定能搞清楚的地方。

好多时候,
往往我们问题前一头雾水,
问题解决后,哑然失笑,
因为很多时候,原来的问题实在不应该成为问题

使用特权

评论回复
24
gaoyiyiyi| | 2011-3-29 09:01 | 只看该作者
道歉道歉。我看了半天,只看到说DELAY不好的,却没有高手给出好的建议的。也替LZ着急。我这样的新手,自己用的方法自己也不好意思和LZ说。
举个简单的小例子,告诉LZ该怎么达成延迟,不挺好么。而且我们这些观众,也可以学点高手的处理方法。yewuyi我并不是说你的,我知道你很热心。
我是看到LZ在6L提问后,还是没人正面回答,觉得很寒心。

使用特权

评论回复
25
gaoyiyiyi| | 2011-3-29 09:04 | 只看该作者
翻看14楼以往发帖纪录,,说的严肃一点,俺十分担心你在本贴中一些回复会严重误导他人。
--------------------------------------------------
是的,没错,我刚刚上手。但是我遇到问题肯定会耐心问,然后自己去实践,懂了就是懂了,不懂我肯定不会误导别人。
难道你一开始就是牛人?
闻道有先后,术业有专攻。这种讽刺的话未免让人觉得可笑。

使用特权

评论回复
26
yewuyi| | 2011-3-29 09:17 | 只看该作者
翻看14楼以往发帖纪录,,说的严肃一点,俺十分担心你在本贴中一些回复会严重误导他人。
--------------------------------------------------
是的,没错,我刚刚上手。但是我遇到问题肯定会耐心问,然后自己去实 ...
gaoyiyiyi 发表于 2011-3-29 09:04


呵呵,牛不牛都是次要的,重要的是:新手别忙着否决热心前辈提出的一些良好建议,否则,很容易让求问者进入歧途,也就是误导求问者进入死胡同。

使用特权

评论回复
27
yewuyi| | 2011-3-29 09:23 | 只看该作者
21# yewuyi

感觉上,但就延时来说PIC24出错的可能性不大,

因为这个只牵涉到CPU内部指令执行,

是否两种片子应用当中,尚有其他不同的地方?

LZ也莫生气,版主回答问题,就算你不满意,那也是回答问题了。
版 ...
shizaigaole 发表于 2011-3-29 08:47


从LZ的各个发言看,肯定还有大把的别的代码,此时,不正确的使用delay,是很容易导致问题产生的。
LZ还是要去好好弄清楚临界代码的产生和消除,弄清楚如何避免在应用程序中掺入临界代码,一个应用程序中如何出现了临界代码,那么问题往往是比较隐蔽和查找的,因为它需要一定的触发条件才能达到临界条件而出错,并不是保证在任何条件都始终可重现的。
另,23楼解释了一部分临界代码,但肯定不是完整而详尽的,这个话题聊开了可就长了,LZ自己查阅相关资料吧。

使用特权

评论回复
28
gaoyiyiyi| | 2011-3-29 09:27 | 只看该作者
肯定不是否决嘛,要是否决我也不会一直关注这个帖子了。看前人的总结和解答,是成长的最好方式之一了。
是前面几楼看的太纠结了。

使用特权

评论回复
29
gaoyiyiyi| | 2011-3-29 09:28 | 只看该作者
当然牛人也不是好当的,e掾木码那么多字也辛苦。

使用特权

评论回复
30
dodome521| | 2011-3-30 13:16 | 只看该作者
从你的CODE和叙述看,确实很像临界代码的问题,但是PIC24为16位MCU,16位的数据加减操作应该都属原子操作,而且都是局部变量,怎么会产生临界问题呢。除非编译器有问题。望DX指教。

使用特权

评论回复
31
sh007|  楼主 | 2011-4-14 12:17 | 只看该作者
问题依然存在,不过其他程序下载到“有问题”的MCU,是可以正常运行的。
程序本身的问题很大很大,现在暂时没办法了,考虑上RTOS了!

谢谢各位!

使用特权

评论回复
32
Mary_luo| | 2011-4-14 13:35 | 只看该作者
有问题的是哪个批次?

使用特权

评论回复
33
sh007|  楼主 | 2011-4-14 14:24 | 只看该作者
上面的日期批号是: 09419W1

在这里不是下定论说这批号产品有问题,只是现象是这样。
谢谢!

使用特权

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

本版积分规则