喂狗指令执行一条后被其他开中断指令打断了会怎样

第一阶段调用start_armboot指向C语言执行代码區首先它要从内存上的重定位数据获得不完全配置的全局数据表格和板级信息表格,即获得gd_tbd_t这两个类型变量记录了刚启动时的信息,并将要记录作为引导内核和文件系统的参数如bootargs等等,并且将来还会在启动内核时由uboot交由kernel时会有所用。

}

一粒金砂(高级), 积分 324, 距离下一級还需 176 积分

一粒金砂(高级), 积分 324, 距离下一级还需 176 积分

估算程序运行时间然后根据看门狗设置的超时时间喂狗

纯净的硅(高级), 积分 1798, 距離下一级还需 202 积分

纯净的硅(高级), 积分 1798, 距离下一级还需 202 积分

不写喂狗代码,进入Debug然后按F5单步调试,或者设置断点运行当看门狗超时,系统会自动reset这个过程是可以观察到的,从而判断在何处喂狗
实际程序执行的时候,由于开中断指令服务的随机性代码执行的时间昰不一样的。从而看门狗复位前程序指针的位置也是不一样的一般情况下,看门狗超时时间需要超过主循环的一个最长周期这样在主循环的任意位置喂狗都不会造成系统复位。同时还要注意主循环里尽量不要再使用while之类的阻塞性语句不然看门狗可能会因为程序阻塞在這样的语句里来不及喂狗而触发复位开中断指令。

五彩晶圆(高级), 积分 6449, 距离下一级还需 3551 积分

五彩晶圆(高级), 积分 6449, 距离下一级还需 3551 积分

計算一下主循环执行一次的最大时间,看门狗定时是这个时间的一二十倍,就可以了不用再某个模块中喂狗,一个循环来一次

一粒金砂(初级), 积分 2, 距离下一级还需 3 积分

一粒金砂(初级), 积分 2, 距离下一级还需 3 积分

我也这么认为,一次大循环看门狗定时器清零就行了不过,有些过程有很多延时我看到书上有程序除了在循环开始时喂狗,还在延时函数中加入喂狗指令防止延时时程序复位。

曾经的蝂主且威望大于2000或对EEWORLD论坛有突出贡献的坛友

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信