打印

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

[复制链接]
5011|33
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sh007|  楼主 | 2011-3-25 16:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 sh007 于 2011-3-28 12:14 编辑

那请教一下各位,各位都采用哪种延时方式呢?因为现在的测试 单片机不需要做太多的事情,所以采用DELAY的方式。除了这种方式的延时和定时器延时方式,请教各位还有用其他你们觉得更好的延时方式?谢谢赐教!

加上之前的程序:
以前是直接用如下一个DELAY:
void Delay(unsigned int t)
{
    unsigned int j;

    while(t--){
        j = 35000;        
        while(j--);
    }
}
//用这样的一个代码,一个批次的MCU常温下即出现问题,595驱动的数码管闪烁,且数值不对,而有些批次即使高温下 也不会出现问题。
修改后的DELAY:
void Delay(unsigned int t)

    unsigned char d1,d2;
      while(t--) {
          d1=250;
          while(d1--) {
          d2 = 140;
          while(d2--);
      }
}
     
}

修改后,出问题的MCU,高温下一个小时也不曾出现过问题。
       现在就是不谈什么效率之类的问题,为何同样是空转,使用char类型就不出问题。故到处向各位大侠请教!谢谢!
    */
沙发
Mary_luo| | 2011-3-25 18:26 | 只看该作者
PIC24FJ32GA002,我们客户没反应有什么问题啊!

使用特权

评论回复
板凳
yewuyi| | 2011-3-25 23:17 | 只看该作者
看到Delay后,不出问题的代码基本是见不到的。

如果你无理由特别喜欢写Delay的话,千万不要轻易质疑MCU质量有问题。

使用特权

评论回复
地板
e掾木| | 2011-3-26 08:22 | 只看该作者
都玩24F了,Delay还这么写,......

使用特权

评论回复
5
sh007|  楼主 | 2011-3-27 18:20 | 只看该作者
3# yewuyi

      同样的代码,同样的测试条件,出现不一样的测试结果,我当然要先质疑MCU本身,不过质疑的是芯片的来源(供应商)而已。然后上来请教各位大侠的!并没有诋毁PIC24的意思!
       谢谢yewuyi大侠的意见!请指教您的延时都是如何写的呢?定时器延时?还是另有高招?期待!

使用特权

评论回复
6
sh007|  楼主 | 2011-3-27 18:22 | 只看该作者
4# e掾木

       请教您的延时如何写?谢谢!

使用特权

评论回复
7
sh007|  楼主 | 2011-3-27 20:07 | 只看该作者
首先DELAY只是测试。
   我想知道的是 同样型号的MCU,同样的测试程序,为什么有些批次出来的不管常温下还是高温下,都没问题,而有些在常温下就已经完全没用了,出错了!
    欢迎各位讨论,甚至拍砖!谢谢!

使用特权

评论回复
8
shizaigaole| | 2011-3-28 09:39 | 只看该作者
LZ,也不要生气。

各位不要纠缠Delay问题,

还是想办法帮楼主解决问题。

楼主还是最好把验证代码放上来,

测试代码,主要验证逻辑,什么样效率无需考虑

使用特权

评论回复
9
XIEYUANBIN| | 2011-3-28 09:48 | 只看该作者
单从芯片上来讲,24系列目前还没有其他厂商仿制的,市场需求量不大,也没有仿制的理由.
所以说,在你程序没有BUG的前提下,至少在常温下运行的结果应该是一致的,要排除的是你的单片机来源正规,不是拆机品之类,还要排除的是你的配置位正确,你找不到毛病,不等于你的程序或配置没毛病.24系列相对其他系列的单片机要复杂一点,你需要有一些耐心.

使用特权

评论回复
10
e掾木| | 2011-3-28 13:04 | 只看该作者
对于这些比较复杂的MCU,编程不再是8位 几K ROM,几百个RAM MCU的编程方式了,必须有清晰的编程思路,走模块化道理,对当前的功能需要尽可能封闭,不影响其他代码块,也能经得起其他代码块的干扰。比如,最常见的方法是,对函数参数的合法性检查,中断要细心处理对关键特殊寄存器的压栈、弹栈处理。如果你的Delay()在没做任何处理的状态下被常规代码和中断随机调用的话,我无任何建议。
    另:我24F用了多年,低压电气开关上使用,如果365天在线随便关闸的话,不仅仅是骂娘那么简单的事,但目前还是0投诉。用过从00001 - 00xx多个版本的MCU了。

使用特权

评论回复
11
e掾木| | 2011-3-28 13:17 | 只看该作者
推荐用RTOS编程,那样处理任何事物都无权也不可能长时间占据MCU,安全控制设计上经验让MCU的负荷不超过60%。前后台模式,我建议超过0.5ms的延时还是启动硬件计时器最好,不占MCU时间啊。那种学院派的延时、键盘扫面代码是无法工程化使用的。

使用特权

评论回复
12
yewuyi| | 2011-3-28 14:41 | 只看该作者
呵呵,很多人使用delay后,很多年很多年,都不知道自己是怎么死的!

LZ去学习学习什么叫着临界代码再回来看这个问题。

使用特权

评论回复
13
gaoyiyiyi| | 2011-3-28 15:06 | 只看该作者
鄙视风凉话,摞术语的。delay()是很糟糕,但是很多时候用它还是没啥问题的。8位机做的小产品里,包含有太多的DELAY了,还不是好好的,中断函数里注意下引用DELAY后的循环嵌套层数就可以了。
至于LZ的问题,建议还是把程序全部发上来。不要把口水全部喷在那个DELAY上,DELAY也是很无辜的。

使用特权

评论回复
14
shizaigaole| | 2011-3-28 16:17 | 只看该作者
用仿真器跟踪一下吧。
感觉代码不像有问题.

不行加个LED灯代码,动态判断。

同时感觉PIC24也不像有问题,LZ能否确保其他地方完全一样?
烧写的配置位是手工方式,还是在代码里面?

大家主要手上没东西,
有东西应该不难找到原因。


等待LZ的答案

使用特权

评论回复
15
sh007|  楼主 | 2011-3-28 20:41 | 只看该作者
9# shizaigaole
生气倒不至于,只是希望大家交流讨论问题,可是说风凉话的还是罢了吧!我们来这里也不是没事来吵架的!谢谢你!

使用特权

评论回复
16
sh007|  楼主 | 2011-3-28 20:43 | 只看该作者
11# e掾木
谢谢你的建议!对我非常有帮助!非常谢谢你能耐心对待新手!:handshake

使用特权

评论回复
17
sh007|  楼主 | 2011-3-28 20:53 | 只看该作者
本帖最后由 sh007 于 2011-3-28 20:54 编辑

14# gaoyiyiyi
我并没有喷DELAY ,是某些所谓的大侠在喷!我只是就事论事!
      现在问题是,程序全部一样,配置什么都一样,在某批次就是死机,常温就死。而在某批次怎么都不死,高温也不死。 如果是不稳定,应该同样的问题会随机出现。
      程序比较多,不方便贴上来,贴上来也不一定有人看吧。我到这里也只是寻求一种解决思路,或者说把问题提出来,寻求大家的帮助,也是对后来可能会碰到的人一个参考。
      目前对RTOS原理不是很理解,现在是 听 e掾木 的建议,修改一下代码看看。
     谢谢!

使用特权

评论回复
18
sh007|  楼主 | 2011-3-28 21:07 | 只看该作者
13# yewuyi
      是的,很多人是不知道DELAY后是怎么死的。可是这跟把问题拿到论坛上来讨论有什么冲突吗?
      就是因为不知道才提出来,以便自己能学习,别人也能一起讨论学习,对现在的新手,以后的新手都有参考学习的价值!
     一个帖子不管多简单,有人提出来就是想得到解决方法。不想说,或者拍砖,说风凉话都可以。作为版主你觉得简单,不想回答,没人说什么,但是只知道说风凉话,我觉得有失版主身份!
     不好意思,没有人身攻击的意思,只是就事论事!谢谢!

使用特权

评论回复
19
yewuyi| | 2011-3-29 00:27 | 只看该作者
本帖最后由 yewuyi 于 2011-3-29 00:28 编辑
13# yewuyi  
      是的,很多人是不知道DELAY后是怎么死的。可是这跟把问题拿到论坛上来讨论有什么冲突吗?
      就是因为不知道才提出来,以便自己能学习,别人也能一起讨论学习,对现在的新手,以后的新手都有 ...
sh007 发表于 2011-3-28 21:07


:L ,脑子发晕了?怎么又对着俺干什么?

俺13楼不是告诉你检查思路了吗?看不懂可不要乱攻击别人哦?你认为版主回答的不够全面,你可以继续求问,你难道认为版主在那帮你半想半猜一个问题是很容易的吗?那你下次来试试?版主只能根据求问者已公开的信息给出一些适当的建议而已。。。

从你18楼的发言看,你这个CODE看来还比较庞大,那更需要去检查检查你的CODE中是否存在临界代码了。

从你1楼贴出的代码看,那个delay是一个非常严重的可能出现临界代码的源,你能否就近找一些熟手帮你确认这个delay不会形成临界代码?另外再找找是否有其它的临界代码源?

当然,楼上一些网友指出的例如芯片是否是拆机片,例如配置字是否正确等等,也可能造成障碍,但这些都属于比较容易排除的问题,所以,俺的建议,还是重点放在那些可能的临界代码上。


:funk: ,根据俺的直觉,临界代码造成问题的可能性为99% 。



另外,十分鄙视14楼,如果你看不懂别人回答,就最好看明白了再煽风点火。

使用特权

评论回复
20
yewuyi| | 2011-3-29 00:37 | 只看该作者
翻看14楼以往发帖纪录,;P,说的严肃一点,俺十分担心你在本贴中一些回复会严重误导他人。

使用特权

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

本版积分规则

0

主题

174

帖子

1

粉丝