OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2850|回复: 2

看门狗、串口中断、printf重定向问题。

[复制链接]

3

主题

4

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2017-8-17
在线时间
6 小时
发表于 2017-10-28 16:58:37 | 显示全部楼层 |阅读模式
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都没执 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2017-10-28 16:58:38 | 显示全部楼层
1:prer最小取0 最短0.1ms 小于0.1出错没办法
2:窗口看门狗实在两个时间区间之间喂狗就可以,但是会在最长的时间的地方产生中断,可以中断内喂狗,保证狗肯定会被喂。自我感觉中断内喂狗就给独立看门狗差不多一样了,最好提前喂,矿口看门狗优点是不能提前到窗口前喂狗。例如下面程序
if(flag1)
{
}
if(flag2)
{
}
喂狗;

假如两个flag实际情况必须执行一个,执行一个以后时间就在窗口内。假如跑飞了两个if都没执行就喂狗,就会复位了。独立看门狗没法解决这种问题
3:一个循环用时多久printf一个标志给带时间的串口看看两次的间隔 带毫秒时间的串口助手.rar (7.03 MB, 下载次数: 60)
回复

使用道具 举报

4

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2018-1-13
在线时间
13 小时
发表于 2018-2-1 15:57:05 | 显示全部楼层
275891381 发表于 2017-10-28 16:58
1:prer最小取0 最短0.1ms 小于0.1出错没办法
2:窗口看门狗实在两个时间区间之间喂狗就可以,但是会在最 ...

受教了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-10 20:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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