搜索
bottom↓
回复: 10

KE02看门狗不复位

[复制链接]

出0入0汤圆

发表于 2015-4-2 15:58:45 | 显示全部楼层 |阅读模式

(1)现在我要给我的程序加一个看门狗功能,但是在测试看门狗的过程中,看门狗不能正常复位。
(2)测试时,软件用的就是官方的看门狗例程;硬件用的是FRDM-KE02Z开发板。

有没有哪位朋友遇到过相关问题,花点时间帮兄弟看一下。
以下是调试时使用的主函数的代码,代码基本是官方的看门狗例程,仅是屏蔽了看门狗的喂狗指令。上电后,蓝色的LED开始闪烁,可见程序并未复位。

int main (void)
{
    WDOG_ConfigType sWDOGConfig = {0};    /*! < watchdog configuration structure */

    /* Perform processor initialization */
    sysinit();

    sWDOGConfig.sBits.bWaitEnable   = TRUE;
    sWDOGConfig.sBits.bStopEnable   = TRUE;
    sWDOGConfig.sBits.bDbgEnable    = TRUE;
    sWDOGConfig.sBits.bUpdateEnable = FALSE;
    sWDOGConfig.sBits.bDisable      = FALSE;        /* enable WDOG */
    sWDOGConfig.sBits.bClkSrc       = WDOG_CLK_INTERNAL_1KHZ;
    sWDOGConfig.u16TimeOut          = 1000;  /*< 1s */
    sWDOGConfig.u16WinTime          = 0;  

    WDOG_Init(&sWDOGConfig);

    printf("\nRunning the wdog_feed_demo project.\n");

    if(WDOG_IsReset())                      /*!< check if wathdog reset happens */
    {
        /*! watchdog happens. */
        LED0_Init();                        /*!< initialize red light */
        while(1)
        {
            LED0_Toggle();                  /*!< flash red light if watchdog reset occurs */
            WDOG_Feed();            
            DelayUS(50000);                 /*!< delay around 50ms */
        }
    }
    /*! watchdog does not happens, then flash blue led. */
    LED2_Init();                            /*!< initialize blue light */
    while(1)
    {
        LED2_Toggle();                      /*!< flash blue light if no watchdog reset occurs */
        //WDOG_Feed();
        DelayUS(50000);                     /*!< delay around 50ms */
    }

}

出0入0汤圆

发表于 2015-4-3 17:32:26 | 显示全部楼层
土豆-Nanne 发表于 2015-4-3 15:39
我感觉start()这个函数没有被调用,因为执行以下代码时,main()函数依然能够执行(通过蓝色LED闪烁得出的 ...

你跑的是keil工程吧?
那你不是屏蔽start了。你是要屏蔽这个函数:
void SystemInit( void )
{
#if !defined(ENABLE_WDOG)   
        /* Disable the watchdog timer */
    WDOG_Disable();
#else
        /* Disable the watchdog timer but enable update */
    WDOG_DisableWDOGEnableUpdate();   
#endif
       
}
IAR是start,因为这两个IDE的启动文件用的不一样哦。

出0入0汤圆

 楼主| 发表于 2015-4-3 14:50:17 | 显示全部楼层
等了好久,怎么就没人回呢。。。是我描述得不清楚吗?

出0入0汤圆

发表于 2015-4-3 15:24:10 | 显示全部楼层
土豆-Nanne 发表于 2015-4-3 14:50
等了好久,怎么就没人回呢。。。是我描述得不清楚吗?

不好意思,迟回复你了。
把cpu文件夹下的start.c中 start函数中的
WDOG_DisableWDOGEnableUpdate();  
这句话屏蔽掉,然后再试下。

出0入0汤圆

 楼主| 发表于 2015-4-3 15:31:52 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-4-3 15:24
不好意思,迟回复你了。
把cpu文件夹下的start.c中 start函数中的
WDOG_DisableWDOGEnableUpdate();  

屏蔽“WDOG_DisableWDOGEnableUpdate();  ”这条语句后还是不行,在不喂狗的情况下,依然无法复位。
经常在各个论坛看到你,但都因为权限的问题无法联系你,能给个其他的联系方式吗?

出0入0汤圆

 楼主| 发表于 2015-4-3 15:39:48 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-4-3 15:24
不好意思,迟回复你了。
把cpu文件夹下的start.c中 start函数中的
WDOG_DisableWDOGEnableUpdate();  

我感觉start()这个函数没有被调用,因为执行以下代码时,main()函数依然能够执行(通过蓝色LED闪烁得出的结论),这是什么原因呢?

void start(void)
{

        /* Disable the watchdog timer but enable update */
    //WDOG_DisableWDOGEnableUpdate();   
    while(1);

#ifndef __GNUC__
#ifndef KEIL
        /* Copy any vector or data sections that need to be in RAM */
        common_startup();
#endif
#endif

        /* Jump to main process */
        main();

        /* No actions to perform after this so wait forever */
        while(1);
}


int main (void)
{
    WDOG_ConfigType sWDOGConfig = {0};    /*! < watchdog configuration structure */

                int i;
               
    /* Perform processor initialization */
    sysinit();
               
                for(i = 0; i<10; i++) {
                                DelayUS(50000);
                }

    sWDOGConfig.sBits.bWaitEnable   = TRUE;
    sWDOGConfig.sBits.bStopEnable   = TRUE;
    sWDOGConfig.sBits.bDbgEnable    = TRUE;
    sWDOGConfig.sBits.bUpdateEnable = FALSE;
    sWDOGConfig.sBits.bDisable      = FALSE;        /* enable WDOG */
               
                //sWDOGConfig.sBits.bPrescaler    = FALSE;                //Watchdog Prescalar -> 256
               
    sWDOGConfig.sBits.bClkSrc       = WDOG_CLK_INTERNAL_1KHZ;
                //sWDOGConfig.sBits.bClkSrc       = WDOG_CLK_EXTERNAL;
                //sWDOGConfig.sBits.bClkSrc       = WDOG_CLK_BUS;
               
    sWDOGConfig.u16TimeOut          = 1000;  /*< 1s */
    sWDOGConfig.u16WinTime          = 0;  

    WDOG_Init(&sWDOGConfig);

    printf("\nRunning the wdog_feed_demo project.\n");

    if(WDOG_IsReset())                      /*!< check if wathdog reset happens */
    {
        /*! watchdog happens. */
        LED0_Init();                        /*!< initialize red light */
        while(1)
        {
            LED0_Toggle();                  /*!< flash red light if watchdog reset occurs */
            WDOG_Feed();            
            DelayUS(50000);                 /*!< delay around 50ms */
        }
    }
    /*! watchdog does not happens, then flash blue led. */
    LED2_Init();                            /*!< initialize blue light */
    while(1)
    {
        LED2_Toggle();                      /*!< flash blue light if no watchdog reset occurs */
        //WDOG_Feed();
        DelayUS(50000);                     /*!< delay around 50ms */
    }

}

出0入53汤圆

发表于 2015-4-3 16:41:50 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-4-3 15:24
不好意思,迟回复你了。
把cpu文件夹下的start.c中 start函数中的
WDOG_DisableWDOGEnableUpdate();  

请问这款单片机 除了swd方式下载程序还有其他的方法吗?

出0入0汤圆

 楼主| 发表于 2015-4-8 09:41:48 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-4-3 17:32
你跑的是keil工程吧?
那你不是屏蔽start了。你是要屏蔽这个函数:
void SystemInit( void )

是的,屏蔽掉关闭看门狗的代码就好了。

但为什么执行完“WDOG_Disable();”后,再执行“WDOG_Enable();”却不能开启看门狗呢?

出0入0汤圆

发表于 2015-4-8 11:45:12 | 显示全部楼层
土豆-Nanne 发表于 2015-4-8 09:41
是的,屏蔽掉关闭看门狗的代码就好了。

但为什么执行完“WDOG_Disable();”后,再执行“WDOG_Enable(); ...

你如果仔细查看KE02的用户手册就知道了。
WDOG的使能为是write once的,所以你禁止之后,再写是无效的。

出0入0汤圆

发表于 2015-4-8 12:55:11 | 显示全部楼层
非常感谢你关于Kinetis的技术问题。如果你没有其他问题,我们将此帖默认为已解决.

出0入0汤圆

发表于 2015-4-8 13:41:15 | 显示全部楼层
学习了。!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-3 07:21

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表