打印
[ZLG-ARM]

★★★ 再测试RTC,把我吓坏了!

[复制链接]
1589|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
汽车电子|  楼主 | 2009-5-15 17:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
   那台机,从昨天下班一直开到现在,RTC出现问题了。


   4字节整形变量Cnt,在RTC每秒中断清零Cnt=0,在主任务里每秒加1,Cnt++;

   当Cnt大于5时,认为RTC不工作,即切换RTC时钟源(系统初始化时首选外部,原来内部就切换到外部,原来外部就切换到内部),同时清零Cnt

   切换来切换去,RTC就是不工作

相关帖子

沙发
汽车电子|  楼主 | 2009-5-15 17:22 | 只看该作者

LPC2134

GPS定位、GPRS收发数据正常,其它都正常。

重新启动,RTC就可以了

使用特权

评论回复
板凳
赖皮| | 2009-5-15 17:46 | 只看该作者

volatile

凭你的能力 volatile肯定是加了的

奇怪的问题

贴一点程序看看

使用特权

评论回复
地板
汽车电子|  楼主 | 2009-5-17 21:35 | 只看该作者

加了,这个程序是以前一直用的

  因为以前有些型号的RTC确实有问题,就加了RTC切换内外时钟源的程序。
  一旦RTC不行了,就使用系统节拍来实现秒计数器。实际上,我的系统都有GPS,MCU的RTC基本不用的(只在GPS无效的时候用)。且不直接用RTC,是用秒计数器。
4字节的秒计数器,长达 130多年。

  目前只发现了那么一台机子的RTC有问题。

使用特权

评论回复
5
汽车电子|  楼主 | 2009-5-19 14:46 | 只看该作者

确实是有些RTC有问题

   有些板子,用外部32K晶振不行,用内部就行。

   这跟代码无关。

   也和赖皮说的volatile无关,即使不加volatile也没关系的。计数器是类内私有变量,主函数根本不允许操作的。是通过调用RTC对象操作的。



/* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
    函数名称:
   功能描述:检测RTC是否正常工作,本函数只能供外部任务调用,不能在RTC内部调用
   入口参数:无
   出口参数:无
   全局变量: 
   创建时间:
   修改时间:
*/     
#include            "..UARTUART0.h"
// $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 以上原形声明的函数供本函数调用
void                RtcCls::CheckWorkStatus(void)        // 每秒调用1次
{
    //////////////////////////////////////////////////////////////////////
    if(++RtcStopCnt>=10)
    {
        SystemSecondCnt++;                // RTC损坏,相关秒计数器的加1任务由主任务完成
        GSM_RTC_AddOneSecond();        
        if(RtcStopCnt%10==0)
        {
            NOP();    NOP();    NOP();    NOP();    
            RtcClockSource = !RtcClockSource;
            Init(RtcClockSource);            // 外部时钟不工作,切换到内部的        
            NOP();    NOP();    NOP();    NOP();    
            Uart.puts("Change RTC Clock ");
        }        
    }        
}

使用特权

评论回复
6
zhousd| | 2009-5-19 18:35 | 只看该作者

如果不是用汇编做的程序,最好不要怀凝MCU

每种C编译器都有它本身皮气。

使用特权

评论回复
7
赖皮| | 2009-5-20 11:53 | 只看该作者

CRITICAL

if(++RtcStopCnt>=10) 看看汇编需不需要临界保护

当主程序从内存调出RtcStopCnt值时发生RTC中断,中断清零RtcStopCnt
返回主程序,主程序用的RtcStopCnt印象值 改变后回存

连续发生10次的可能性为0
但不知道有无可能半字操作时数据出错所以

使用特权

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

本版积分规则

366

主题

2057

帖子

5

粉丝