首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > VxWorks >

求vxworks看门狗定时通用程序解决思路

2012-12-30 
求vxworks看门狗定时通用程序最近在做一个项目,需要使用vxworks看门狗定时程序。vxworks也是最近才学的,希

求vxworks看门狗定时通用程序
      最近在做一个项目,需要使用vxworks看门狗定时程序。vxworks也是最近才学的,希望大家能帮忙,共享一些手中的资料。
[解决办法]
求vxworks看门狗定时通用程序解决思路帮顶
[解决办法]

其实Vxworks下定时函数很简单

MyTimer()
wdCreate
wdStart( MyTimer)


#include "inetLib.h"
#include "vxWorks.h"  
#include "stdio.h"
#include "iolib.h"
#include "time.h"
#include "selectLib.h"  
#include "msgQLib.h"
#include "semLib.h"
#include "wdLib.h"


//系统Tick=1ms
WDOG_ID g_wd2sHandle = NULL; /*2S定时器的句柄, 用于模拟量的计量*/



void TimerTest(int nInterval)
{
int i = 0;
int j = 0;


/* Start watchdog */
wdStart(g_wd2sHandle, nInterval, (FUNCPTR)TimerTest, nInterval);
logMsg("1. tickGet() = %ld \n", tickGet());
for(i = 0; i < 1000000; i++)
{
j = j+1;
}
logMsg("2. tickGet() = %ld \n", tickGet());

}

/************************************************************************/
/* Function : 启动向上位机发AI数据定时器函数  
/* Input : nInterval, 定时时间ms   
/* RetValue : 无
/* Date :  
/************************************************************************/
void StartTimer(int nInterval)
{
/*If Timer of 2s is started, delete it */
if(NULL != g_wd2sHandle)
wdDelete(g_wd2sHandle);

/*Create watchdog handle*/
g_wd2sHandle = wdCreate();   
if(NULL == g_wd2sHandle)
return ;

/*Start watchdog */
wdStart(g_wd2sHandle, nInterval, (FUNCPTR)TimerTest, nInterval);


}




/**************************************************************************
* 函数功能 : 测试程序的主函数,在usrAppInit.c文件中调用
* 输入参数 : 无
* 输出参数 : 无
* 返 回 值 : 无
* 创建信息 :  
**************************************************************************/
void ProjMain()
{
    
int i = 0;  
for(i = 0; i++; i < 10)
{
printf("AAAAAAAAAAAAAAAAAAAAAAAAAAAA \n");
}
printf("sysClkRateGet() = %d \n", sysClkRateGet() );

taskDelay(1000);
StartTimer(100);

//COMTest();
}
 

[解决办法]
可以起任务,or用楼上有人说的Wd的Timer(递归式的调用)

建议用任务方式。
如果只是自己学习,起一个优先级>10的任务喂狗即可

若系统还承载有许多重要业务,可以考虑用双任务喂狗方式,思路如下:
起高低优先级两个任务,简称高狗(>10)和低狗(比Idle高一点)

低狗给高狗“喂狗”,高狗则喂真正的硬件狗。高狗若在一定时间内没有收到低狗的喂狗信息,高狗则停止喂硬件狗。

好处:一般的任务够只是为了防止软件跑飞(内存越界等),但由于喂狗任务很高,若系统未跑飞但因异常导致CPU过载或大量任务饥饿,就无法解决了。
[解决办法]
楼上说的很详细,也很到位,楼主可以查阅相关书籍

热点排行