新手上路
- 积分
- 34
- 金钱
- 34
- 注册时间
- 2017-8-17
- 在线时间
- 6 小时
|
5金钱
1.看门狗溢出时间Tout=((4*2^prer)*rlr)/40 prer最低取值4,rlr最低取值1,那么溢出时间最低是1.6ms吗?
如果是,那么如果一个循环耗时极少,而在程序跑飞之后最大1.6ms之后才复位,那么这段时间导致的错误怎么办?
如果不是,我哪里理解错了吗? 请指教,谢谢
2.独立看门狗没有中断服务函数,计数到0x000系统自动复位(如果没有及时喂狗);而窗口看门狗有中断服务函数,难道服务函数里面需要我们主动写一个复位语句吗?
如果是溢出之后,既出发了中断,又自动重置了,那中断里面的语句也没有被执行呀,所以我很不明白,请赐教。
3. 窗口看门狗如何选择窗口值? 是根据程序一个循环耗多长时间来确定吗? 如果是:程序一个循环用了多久怎么算呢?
4. lat =( *((double*)lat_) )* 180 / pi;
lon = (*((double*)lon_)) * 180 / pi;
vel_n =( *((float*)vel_n_)) * 3.6;
vel_e =( *((float*)vel_e_)) * 3.6;
head = (*((float*)head_) )* 180 /pi;
num=sprintf(send_buf,"LAT:%.8lf",lat);
num+=sprintf(send_buf+num,"LON:%.8lf",lon);
if(vel_n >= 0.0)
num+=sprintf(send_buf+num,"N:+%f",vel_n);
else
num+=sprintf(send_buf+num,"N:%f",vel_n);
num+=sprintf(send_buf+num,"E:%f",vel_e);
num+=sprintf(send_buf+num,"HEAD:%f",head);
send_buf[num]='\r';
send_buf[num+1]='\n';
printf("正在发送\r\n");/////////////////////////////////////////////////////这个语句
for(count=0;count<num+2;count++)
{USART_SendData(USART1,send_buf[count]);
USART_SendData(USART2,send_buf[count]);
delay_us(100);
}
以上是我串口中断函数的一部分,用来解算gps数据,如果没有红色的那条printf语句(打印内容不重要,打什么都可以),只能解算出一组数据并发送出去,如果有,可以循环接收,循环解算 并发送出去。我就很纳闷了。我在想,是不是根printf重定向到串口有关,但是又找不到依据。请大神解答。
 
|
最佳答案
查看完整内容[请看2#楼]
1:prer最小取0 最短0.1ms 小于0.1出错没办法
2:窗口看门狗实在两个时间区间之间喂狗就可以,但是会在最长的时间的地方产生中断,可以中断内喂狗,保证狗肯定会被喂。自我感觉中断内喂狗就给独立看门狗差不多一样了,最好提前喂,矿口看门狗优点是不能提前到窗口前喂狗。例如下面程序
if(flag1)
{
}
if(flag2)
{
}
喂狗;
假如两个flag实际情况必须执行一个,执行一个以后时间就在窗口内。假如跑飞了两个if都没执 ...
|