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

探讨: OS 和看门狗的问题

[复制链接]
楼主: Airwill
手机看帖
扫描二维码
随时随地手机跟帖
21
学生D| | 2009-2-19 10:45 | 只看该作者 回帖奖励 |倒序浏览

再说“狗论”。

假设当A任务出现故障无法正常让出CPU资源时,强实时模式下,HOT的OS中任务7看门狗要起作用了。可是问题来了:

任务7的喂狗时间肯定要设置得比较大,至少要大于6个任务正常完成的时间和,——假设为T6。

那么上面任务A崩溃时,故障发生经过T6时间流逝,硬件看门狗起了作用。(119终于来了。)有什么问题?

1、响应比裸奔狗还慢;
2、本来可以设计使OS及时响应,拉正错误,偏要设计一条迟钝的笨狗;
3、任务A故障时,其他任务以及管理者——OS内核都是正常的。结果这条笨狗偏不要OS管理,它要自己干,要复位机器,使所有一切重新来过。

这就好像,一个公司里,有一个人犯错,结果要所有的人,——包括老板,都停止工作,重新来过。

   这个OS比裸奔还钝。

使用特权

评论回复
22
hottask51| | 2009-2-19 10:59 | 只看该作者

专题:OS 和看门狗的问题

使用特权

评论回复
23
etual| | 2009-2-20 13:37 | 只看该作者

究竟怎么处理的?

在下也正有这问题,想了好久想不通。

使用特权

评论回复
24
mcusimfan| | 2009-2-20 19:26 | 只看该作者

请注意ucos ii 商业应用是要花钱的!

请注意ucos ii 商业应用是要花钱的!ucos 商业应用免费,ucos ii就要钱,学习研究免费

使用特权

评论回复
25
HotARM7| | 2009-2-20 21:35 | 只看该作者

菜农今天将51升华~~~肯定永住青春~~~

#include "interrupt.h"
/*---------------------------------------------
         外部中断0中断服务程序
----------------------------------------------*/
HotISR EInt0_ISR() HotTask_ISR(HOTISR_IE0_VECTOR, AR1)
{
    HotIsr_return(HOTISR_IE0_VECTOR);//中断隐身到后台处理
}


/*---------------------------------------------
         外部中断1中断服务程序
----------------------------------------------*/
HotISR EInt1_ISR() HotTask_ISR(HOTISR_IE1_VECTOR, AR1)
{
    HotIsr_return(HOTISR_IE1_VECTOR);//中断隐身到后台处理
}

/*------------------------------------------
         定时器T0中断服务程序
-------------------------------------------*/
HotISR Timer0_ISR() HotTask_ISR(HOTISR_TF0_VECTOR, AR1)
{
    HotIsr_return(HOTISR_TF0_VECTOR);//中断隐身到后台处理
}

/*------------------------------------------
         定时器T1中断服务程序
-------------------------------------------*/
HotISR Timer1_ISR() HotTask_ISR(HOTISR_TF1_VECTOR, AR1)
{
    HotIsr_return(HOTISR_TF1_VECTOR);//中断隐身到后台处理
}


/*----------------------------------------
         串口中断服务程序
-----------------------------------------*/
HotISR SIO_ISR() HotTask_ISR(HOTISR_SIO_VECTOR, AR1)
{
    HotIsr_return(HOTISR_SIO_VECTOR);//中断隐身到后台处理
}





#include "task.h"

/*---------------------------------------------
    HotTask51装载任务处理程序
----------------------------------------------*/
HotTASK TaskInit() HotTask_TASK(HOTTASK0_VECTOR, AR3)
{
HRESULT __result = S_FALSE;//失败
    __result = HotTaskCreate(HotTask_TaskId1,//任务1
                             Task1,//任务函数1
                             7//2级
                            );
    if (__result == S_OK)
    {
        __result = HotTaskCreate(HotTask_TaskId2,//任务2
                                 Task2,//任务函数2
                                 7//6级
                                );
        if (__result == S_OK)
        {
            __result = HotTaskCreate(HotTask_TaskId3,//任务3
                                     Task2,//任务函数2
                                     7//2级
                                    );
        }
    }
}


/*--------------------------------------------------------
    HotTask51任务Task1处理程序
---------------------------------------------------------*/
HotTASK Task1() HotTask_TASK(HOTTASK1_VECTOR, AR3)
{
    HotTask_while(HotTask_TaskId1)//HotTask51任务环格式
    {
        HotTaskWait(HotTask_TaskId1, 1);
    }
}

/*--------------------------------------------------------
    HotTask51任务Task2处理程序
---------------------------------------------------------*/
HotTASK Task2() HotTask_TASK(HOTTASK2_VECTOR, AR3)
{
    HotTask_while(HotTask_TaskId2)//HotTask51任务环格式
    {
    //
       HotTaskTickUnLock(HotTask_TaskId2);
    }
}

/*--------------------------------------------------------
    HotTask51任务Task3处理程序
---------------------------------------------------------*/
HotTASK Task3() HotTask_TASK(HOTTASK3_VECTOR, AR3)
{
    HotTask_while(HotTask_TaskId3)//HotTask51任务环格式
    {
        _nop_();
        _nop_();
        _nop_();
    }
}

/*--------------------------------------------------------
    HotTask51任务Task4处理程序
---------------------------------------------------------*/
HotTASK Task4() HotTask_TASK(HOTTASK4_VECTOR, AR3)
{
    HotTask_while(HotTask_TaskId4)//HotTask51任务环格式
    {
        _nop_();
        _nop_();
        _nop_();
    }
}

/*--------------------------------------------------------
    HotTask51任务Task5处理程序
---------------------------------------------------------*/
HotTASK Task5() HotTask_TASK(HOTTASK5_VECTOR, AR3)
{
    HotTask_while(HotTask_TaskId5)//HotTask51任务环格式
    {
    }
}

/*--------------------------------------------------------
    HotTask51任务Task6处理程序
---------------------------------------------------------*/
HotTASK Task6() HotTask_TASK(HOTTASK6_VECTOR, AR3)
{
    HotTask_while(HotTask_TaskId6)//HotTask51任务环格式
    {
        _nop_();
        _nop_();
        _nop_();
    }
}

/*--------------------------------------------------------
    HotTask51任务Task7处理程序
---------------------------------------------------------*/
HotTASK Task7() HotTask_TASK(HOTTASK7_VECTOR, AR3)
{
    HotTask_while(HotTask_TaskId7)//HotTask51任务环格式
    {
        _nop_();
        _nop_();
        _nop_();
    }
}


#include "event.h"
/*---------------------------------------------
         外部中断0事件处理程序
----------------------------------------------*/
HotEVENT EInt0_EVT() HotTask_EVT(HOTEVENT_IE0_VECTOR, AR0)
{
}
/*---------------------------------------------
         外部中断1事件处理程序
----------------------------------------------*/
HotEVENT EInt1_EVT() HotTask_EVT(HOTEVENT_IE1_VECTOR, AR0)
{
}
/*------------------------------------------
         定时器T0事件处理程序
-------------------------------------------*/
HotEVENT Timer0_EVT() HotTask_EVT(HOTEVENT_TF0_VECTOR, AR0)
{
}

/*------------------------------------------
         定时器T1事件处理程序
-------------------------------------------*/
HotEVENT Timer1_EVT() HotTask_EVT(HOTEVENT_TF1_VECTOR, AR0)
{
}


/*----------------------------------------
         串口事件处理程序
-----------------------------------------*/
HotEVENT SIO_EVT() HotTask_EVT(HOTEVENT_SIO_VECTOR, AR0)
{
}

 

使用特权

评论回复
26
sszhulei| | 2009-2-22 14:03 | 只看该作者

不错,是我们菜鸟的福音

使用特权

评论回复
27
Airwill|  楼主 | 2009-2-24 16:24 | 只看该作者

舍不得沉啊

还想再看看, 有没有更深入的见解了

使用特权

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

本版积分规则