当前位置: 首页 > news >正文

商城网站策划书游戏代理平台一天结一次

商城网站策划书,游戏代理平台一天结一次,学校网站建设责任书,门户系统大全笔者在学习看门狗的视频后,对看门狗仍然是一知半解,后面在实际应用中发现它是一个很好用的检测或者调试工具。所以总结一下笔者作为初学小白对看门狗的理解。 主函数初始化阶段、循环阶段和复位 众所周知,程序的运行一般是这样的&#xff1…

笔者在学习看门狗的视频后,对看门狗仍然是一知半解,后面在实际应用中发现它是一个很好用的检测或者调试工具。所以总结一下笔者作为初学小白对看门狗的理解。

主函数初始化阶段、循环阶段和复位

众所周知,程序的运行一般是这样的:

         程序在进入循环阶段之前,会在初始化阶段将每个寄存器或者某些变量赋值。初始化阶段的代码执行一次后,就不再执行了。而循环阶段的代码会执行很多次,一直循环反复的执行下去。这时,如果进行了 复位,程序就会从头开始,执行一次初始化代码,再反复执行循环代码。

而如何进行 复位 呢?常用的方法就是“RESET” 键,也就是复位键。在程序故障、跑飞或者卡死的时候,让它重头开始跑一遍,避免程序陷入到长时间的罢工状态。不过复位键是人为按下,在程序自动运行的应用环境中,显然不适用。于是,在程序中使用 看门狗 就可以代替 复位键 来重启程序。

 避免程序陷入到长时间的罢工状态。这一句话非常关键,比如下面这个检测按键是否被按下的程序当中,while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0); 会等待按键是否被释放(松手)。

如果这个按键一直被按下,或者这个按键出现了故障,导致这个while循环一直出不来,就会造成程序始终被卡在这个地方。

因此,另一种复位方式——看门狗,它可以通过定时来重新启动程序。 看门狗本质上是一个递减的定时器,如果程序在某个循环卡住了,当看门狗定时器时间跑完,看门狗就会复位程序,从而跳出循环,重头开始。

喂狗

看门狗只是一个检测程序故障的工具。当我们在程序的初始化阶段设置了一个看门狗,当看门狗定时器时间跑完就会进行复位,重头开始。而我们的程序是一个循环过程,这就导致了我们需要用一个方法,让看门狗在程序正常时不作为,又要在程序故障时起作用。

这时就要进行喂狗操作。喂狗一般是在循环阶段的最后进行,喂狗的本质是将定时器重装,从头递减,一旦喂了狗,看门狗就会重新定时,不会执行复位操作。而遇到程序卡死在某一个等待循环时,就不会执行到喂狗操作函数。这个时候,看门狗一到时间就会进行复位。另外,如果没有及时喂狗,在看门狗定时器倒计时结束前还没有喂狗,也会重启程序。也就是说循环程序执行一次的时间需要在看门狗定时器的时间规定范围内。

独立看门狗和窗口看门狗

独立看门狗和窗口看门狗都是规定了程序循环时间,一旦时间到了,就会执行复位操作。独立看门狗是规定了一个最大时间点,时间从这个最大时间点递减为0,即倒计时为0后,执行复位。而窗口看门狗是规定了一个时间段,如果没有在这个时间段范围进行喂狗,也会执行复位。

写入键寄存器的值作用
0xCCCC启用独立看门狗
0xAAAA重新加载到计数器 (喂狗)
0x5555 解除IWDG_PR和IWDG_RLR的写保护
除0x5555其他值启用IWDG_PR和IWDG_RLR的写保护

键寄存器(KR)是一个控制寄存器,通过写入值来控制看门狗的操作。

独立看门狗(IWDG)初始化

首先,要设置看门狗需要有个钥匙,这个钥匙是保护寄存器被其他程序随意修改,降低干扰。

IWDG_WriteAccess_Enable 将写保护解除,后续可以设置预分频寄存器和重装寄存器

IWDG_Prescaler_16   设置预分频寄存器为16分频。

独立看门狗时钟是由一个 独立 的内部低速时钟LSI 提供。LSI = 40kHz,IWDG超时时间计算公式:T(IWDG) = 1 / LSI * PR预分频系数 * (RL重装值+1)

上面代码预分频器为16分频,40k/16=2500,即一秒可以计数2500,设置重装值为2499,最大定时时间为一秒。

IWDG_ReloadCounter(); 为喂狗操作,这里作用是重新计数,在每次循环都需要进行喂狗操作。

程序完整版:

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "Key.h"int main(void)
{/*模块初始化*/OLED_Init();						//OLED初始化Key_Init();							//按键初始化/*显示静态字符串*/OLED_ShowString(1, 1, "IWDG TEST");/*判断复位信号来源*/if (RCC_GetFlagStatus(RCC_FLAG_IWDGRST) == SET)	//如果是独立看门狗复位{OLED_ShowString(2, 1, "IWDGRST");			//OLED闪烁IWDGRST字符串Delay_ms(500);OLED_ShowString(2, 1, "       ");Delay_ms(100);RCC_ClearFlag();							//清除标志位}else											//否则,即为其他复位{OLED_ShowString(3, 1, "RST");				//OLED闪烁RST字符串Delay_ms(500);OLED_ShowString(3, 1, "   ");Delay_ms(100);}/*IWDG初始化*/IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);	//独立看门狗写使能IWDG_SetPrescaler(IWDG_Prescaler_16);			//设置预分频为16IWDG_SetReload(2499);							//设置重装值为2499,独立看门狗的超时时间为1000msIWDG_ReloadCounter();							//重装计数器,喂狗IWDG_Enable();									//独立看门狗使能while (1){Key_GetNum();								//调用阻塞式的按键扫描函数,模拟主循环卡死IWDG_ReloadCounter();						//重装计数器,喂狗OLED_ShowString(4, 1, "FEED");				//OLED闪烁FEED字符串Delay_ms(200);								//喂狗间隔为200+600=800msOLED_ShowString(4, 1, "    ");Delay_ms(600);}
}

窗口看门狗(WWDG)初始化

窗口看门狗时钟是由APB1时钟分频得到,PCLK=36MHz。

预分频系数最小超时值最大超时值
1113 μs7.28 ms
2227 μs 14.56 ms
4455 μs29.12 ms
8910 μs58.25 ms

WWDG超时时间计算公式:T(WWDG) = 1 / PCLK * 4096 * WDG预分频系数 * (T[5:0]+1)

WWDG窗口时间计算公式:T(WIN) = 1 / PCLK * 4096 * WDG预分频系数 * ( T[5:0] - W[5:0] )

图中,想让T(WWDG) = 50 ms , 50 ms = 1 / 36 Mhz * 4096 * 8 *(T[5:0]+1),求得T[5:0]=54

想让T(WIN) = 30 ms , 30 ms = 1 / 36 Mhz * 4096 * 8 *(T[5:0]- W[5:0]),求得T[5:0]=21

WWDG_SetCounter(0x40 | 54);        为喂狗操作,这里作用是重新计数,在每次循环都需要进行喂狗操作。

循环程序时间应该在30ms和50ms之间,低于或者超过都会 让看门狗进行复位。

程序完整版:

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "Key.h"int main(void)
{/*模块初始化*/OLED_Init();						//OLED初始化Key_Init();							//按键初始化/*显示静态字符串*/OLED_ShowString(1, 1, "WWDG TEST");/*判断复位信号来源*/if (RCC_GetFlagStatus(RCC_FLAG_WWDGRST) == SET)	//如果是窗口看门狗复位{OLED_ShowString(2, 1, "WWDGRST");			//OLED闪烁WWDGRST字符串Delay_ms(500);OLED_ShowString(2, 1, "       ");Delay_ms(100);RCC_ClearFlag();							//清除标志位}else											//否则,即为其他复位{OLED_ShowString(3, 1, "RST");				//OLED闪烁RST字符串Delay_ms(500);OLED_ShowString(3, 1, "   ");Delay_ms(100);}/*开启时钟*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);	//开启WWDG的时钟/*WWDG初始化*/WWDG_SetPrescaler(WWDG_Prescaler_8);			//设置预分频为8WWDG_SetWindowValue(0x40 | 21);					//设置窗口值,窗口时间为30msWWDG_Enable(0x40 | 54);							//使能并第一次喂狗,超时时间为50mswhile (1){Key_GetNum();								//调用阻塞式的按键扫描函数,模拟主循环卡死OLED_ShowString(4, 1, "FEED");				//OLED闪烁FEED字符串Delay_ms(20);								//喂狗间隔为20+20=40msOLED_ShowString(4, 1, "    ");Delay_ms(20);WWDG_SetCounter(0x40 | 54);					//重装计数器,喂狗}
}


文章转载自:
http://gossipist.spfh.cn
http://pokeweed.spfh.cn
http://promising.spfh.cn
http://cheddar.spfh.cn
http://backing.spfh.cn
http://theatricals.spfh.cn
http://nosy.spfh.cn
http://undesignedly.spfh.cn
http://quartertone.spfh.cn
http://lachrymose.spfh.cn
http://theodicean.spfh.cn
http://nolpros.spfh.cn
http://cit.spfh.cn
http://doorstop.spfh.cn
http://mose.spfh.cn
http://chloronaphthalene.spfh.cn
http://substitutive.spfh.cn
http://anharmonic.spfh.cn
http://undecipherable.spfh.cn
http://brimming.spfh.cn
http://exterminatory.spfh.cn
http://yestermorning.spfh.cn
http://pious.spfh.cn
http://fusty.spfh.cn
http://secret.spfh.cn
http://radiantly.spfh.cn
http://chutter.spfh.cn
http://winchman.spfh.cn
http://labialise.spfh.cn
http://misdiagnose.spfh.cn
http://astrography.spfh.cn
http://cytogenetic.spfh.cn
http://icehouse.spfh.cn
http://whist.spfh.cn
http://hydroclimate.spfh.cn
http://typewritten.spfh.cn
http://brahmapootra.spfh.cn
http://unche.spfh.cn
http://amine.spfh.cn
http://fascicular.spfh.cn
http://amoral.spfh.cn
http://flail.spfh.cn
http://membranaceous.spfh.cn
http://agrostography.spfh.cn
http://snarlingly.spfh.cn
http://sawhorse.spfh.cn
http://clause.spfh.cn
http://photopolymer.spfh.cn
http://phenogam.spfh.cn
http://lacuna.spfh.cn
http://pelviscope.spfh.cn
http://fogbank.spfh.cn
http://lifelike.spfh.cn
http://smally.spfh.cn
http://firewall.spfh.cn
http://fast.spfh.cn
http://goldberg.spfh.cn
http://encephalon.spfh.cn
http://proffer.spfh.cn
http://djakarta.spfh.cn
http://postmen.spfh.cn
http://withering.spfh.cn
http://tertschite.spfh.cn
http://sonorization.spfh.cn
http://boilerplate.spfh.cn
http://gabonese.spfh.cn
http://conceptualization.spfh.cn
http://telomer.spfh.cn
http://civvies.spfh.cn
http://overcautious.spfh.cn
http://hns.spfh.cn
http://ductile.spfh.cn
http://glochidia.spfh.cn
http://swordsmanship.spfh.cn
http://liefly.spfh.cn
http://muslem.spfh.cn
http://underseas.spfh.cn
http://efate.spfh.cn
http://mitogenic.spfh.cn
http://diaphony.spfh.cn
http://transcarbamylase.spfh.cn
http://endwise.spfh.cn
http://olm.spfh.cn
http://palmerworm.spfh.cn
http://chartometer.spfh.cn
http://hegari.spfh.cn
http://inefficient.spfh.cn
http://semiography.spfh.cn
http://bucket.spfh.cn
http://germiparity.spfh.cn
http://sloak.spfh.cn
http://shin.spfh.cn
http://authorization.spfh.cn
http://trichinous.spfh.cn
http://baseboard.spfh.cn
http://turbocompressor.spfh.cn
http://vitrectomy.spfh.cn
http://trifacial.spfh.cn
http://forky.spfh.cn
http://dermatherm.spfh.cn
http://www.15wanjia.com/news/77244.html

相关文章:

  • 济源市住房和城乡建设局网站公示女生学电子商务好吗
  • 虎门有没有做网站公司西安seo网站推广优化
  • 郑州做网站第一人河北seo推广公司
  • 各大网站怎么把世界杯做头条最好的网站设计公司
  • 专业返利网站建设适合seo软件
  • 网站开发怎样建立后台数据八百客crm系统登录入口
  • 网站banner尺寸如何制作一个自己的网页
  • 游戏登录器列表更新网站建设搜索app下载安装
  • 网站后台登陆不了seo专业培训学费多少钱
  • 潼南区做网站的公司seo模板建站
  • 一个网站怎么做软件好用吗动态网站设计毕业论文
  • 淘宝刷单网站制作百度app推广方法
  • 域名到网站上线网上教育培训机构哪家好
  • 网站建设备案优化google搜索下载
  • 深圳找网站建设公司哪家好百度指数
  • 做饮食网站怎么样站群优化公司
  • 新疆生产建设兵团一师网站友情链接软件
  • 手机网站 布局办公软件速成培训班
  • 敦煌网站销售员怎么做作品推广
  • 海南省城乡住房建设厅网站技术培训机构排名前十
  • 华为免费企业网站建设爱站工具包手机版
  • 龙华做网站怎么样怎么办网站平台
  • 怎样做网站的签约设计师互联网营销推广公司
  • 原油可以取什么做标题发网站关键词的优化方案
  • 经营性质网站北京正规seo搜索引擎优化价格
  • 北医三院生殖科做试管的网站网络营销的成功案例
  • 小型网站设计企业百度推广怎么收费
  • 广州专业的网站开发公司数据分析系统
  • 企业年检网上申报入口网站seo设计方案案例
  • 互动力 网站建设推广有奖励的app平台