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

STM32:看门狗

独立看门狗

简介

独立看门狗(IWDG)由独立的低速时钟(LSI)驱动,即便主时钟发生故障,它依然能够正常工作。其主要作用是在程序出现异常时,通过复位来保障系统的稳定性。独立看门狗的喂狗操作相对简单,只需在规定时间内对相关寄存器进行写入操作即可。它适用于对可靠性要求较高,且主时钟可能出现故障的场景。

窗口看门狗

简介

窗口看门狗(WWDG)由系统时钟(PCLK1)分频后驱动,其工作依赖于系统时钟的正常运行。它相较于独立看门狗,具有更严格的时间监控机制。窗口看门狗设置了一个时间窗口,喂狗操作必须在这个时间窗口内完成,早于或晚于该窗口都会导致系统复位。这种特性使其能够更精准地监控程序的运行状态,适用于对程序运行时序要求较为严格的场景。

两个看门狗的区别

在这里插入图片描述

独立看门狗使用方法

在独立看门狗(IWDG)中,看门狗的超时时间
计算公式为
在这里插入图片描述
prer
是预分频器的值,
rlr
是重装载寄存器的值,40 是独立看门狗的时钟频率(单位:kHz)。

int init_iwdg(u8 prer,u16 rlr)
{IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);IWDG_SetPrescaler(prer);IWDG_SetReload(rlr);IWDG_ReloadCounter(); IWDG_Enable();
}
void IWDG_Feed(void)
{IWDG->KR=0xAAAA;
}
int main(void)
{IWDG_Init(41875);while(1){IWDG_Feed();delay_ms(2500);}
}

窗口看门狗使用方法

窗口值:当计数器的值大于窗口值时进行喂狗操作,系统会发生复位。
下限值(固定为 0x40):如果计数器的值递减到 0x40 还没有进行喂狗操作,那么计数器再减一次到 0x3F 时,系统就会复位。
自动喂狗应该在上窗口值和下限值之间
在递减计数器减到 0X40 的时候,进入中断,称它为死前中断或者 叫遗嘱中断,在中函数里面我们应该出来最重要的事情,而且必须得快,因为递减计数器再减 一次,就会产生系统复位。


static void WWDG_NVIC_Config(void)
{NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);
}void WWDG_Config(uint8_t tr, uint8_t wr, uint32_t prv)
{	// 开启 WWDG 时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);// 设置递减计数器的值WWDG_SetCounter( tr );// 设置预分频器的值WWDG_SetPrescaler( prv );// 设置上窗口值WWDG_SetWindowValue( wr );// 设置计数器的值,使能WWDGWWDG_Enable(WWDG_CNT);	// 清除提前唤醒中断标志位WWDG_ClearFlag();	// 配置WWDG中断优先级WWDG_NVIC_Config();	// 开WWDG 中断WWDG_EnableIT();
}// 喂狗
void WWDG_Feed(void)
{// 喂狗,刷新递减计数器的值,设置成最大WDG_CNT=0X7FWWDG_SetCounter( WWDG_CNT );
}void WWDG_IRQHandler(void)
{// 清除中断标志位WWDG_ClearFlag();//真正使用的时候,这里应该是做最重要的事情}int main(void)
{uint8_t wwdg_tr, wwdg_wr;//初始化窗口看门狗,设置计数器初始值为0X7F,上窗口值为0X5F,预分频器为WWDG_Prescaler_8WWDG_Config(0X7F, 0X5F, WWDG_Prescaler_8);wwdg_wr = WWDG->CFR & 0X7F//wwdg_wr获得上窗口的值while(1){wwdg_tr = WWDG->CR & 0X7F;  //获得计数器值if( wwdg_tr < wwdg_wr )//当计数器的值减小到小于上窗口值的时候{// 喂狗,重新设置计数器的值为最大0X7FWWDG_Feed();}}
}

在调用 WWDG_Config(0X7F, 0X5F, WWDG_Prescaler_8) 函数时,把计数器初始值设为 0X7F,意味着将计数器设置成了其所能表示的最大值。窗口看门狗开启后,计数器会从这个最大值开始逐次递减。当计数器的值大于上窗口值(这里是 0X5F)时进行喂狗操作,系统会复位;而当计数器递减到 0X40 还未喂狗,再减一次到 0X3F 时系统也会复位。因此,需要在计数器的值处于 0X5F 和 0X40 之间时进行喂狗操作,以此保证系统正常运行。

相关文章:

STM32:看门狗

独立看门狗 简介 独立看门狗&#xff08;IWDG&#xff09;由独立的低速时钟&#xff08;LSI&#xff09;驱动&#xff0c;即便主时钟发生故障&#xff0c;它依然能够正常工作。其主要作用是在程序出现异常时&#xff0c;通过复位来保障系统的稳定性。独立看门狗的喂狗操作相对…...

第十三步:vue

Vue 1、上手 1、安装 使用命令&#xff1a;npm create vuelatestvue文件后缀为.vueconst app createApp(App)&#xff1a;初始化根组件app.mount("#app")&#xff1a;挂载根组件到页面 2、文件 script标签&#xff1a;编写jstemplate标签&#xff1a;编写htmls…...

《代码整洁之道》第8章 边界 - 笔记

甚至是你团队里其他组写的你无法随意修改的代码。 这些外部代码是你的**“边界”。它们可能会升级、可能会有 Bug、可能会有反人类的设计、甚至你将来可能想换一个类似的库或服务。如果你的应用代码直接且紧密地依赖**这些外部代码的具体类、方法、异常等细节&#xff0c;那么…...

【CF】Day45——Codeforces Round 1021 (Div. 2) BC

阅读理解。。。不过挺有意思&#xff08; B. Sasha and the Apartment Purchase 题目&#xff1a; 思路&#xff1a; 看了半天没看懂... 题目叽里咕噜一大堆&#xff0c;说白了就是让我们在一个 可删除k个数 的 数组 中选 一些点 且 这些点的f(x) 是此时 删完了k个数之后的数组…...

《代码整洁之道》第5章 格式 - 笔记

你应该选择一套管理代码格式的简单规则。如果是团队&#xff0c;应该选择一套团队一致同意采用的简单格式规则。 最重要的原则&#xff1a;一致性&#xff08;Consistency&#xff09;&#xff01; 没有完美的格式规范&#xff0c;但有统一的规范。 整个团队&#xff08;或者…...

通过示例学习:连续 XOR

通过示例学习&#xff1a;连续 XOR 如果我们想在 PyTorch 中构建神经网络&#xff0c;可以使用 &#xff08;with&#xff09; 指定所有参数&#xff08;权重矩阵、偏差向量&#xff09;&#xff0c;让 PyTorch 计算梯度&#xff0c;然后调整参数。但是&#xff0c;如果我们有很…...

加密算法 AES、RSA、MD5、SM2 的对比分析与案例(AI)

加密算法 AES、RSA、MD5、SM2 的对比分析 一、相同点 ‌密码学基础‌ 均为现代密码学核心算法&#xff0c;用于保障数据安全。‌数据处理‌ 均涉及数据转换&#xff08;加密、签名、哈希等&#xff09;。‌密钥依赖‌ AES、RSA、SM2 依赖密钥&#xff08;对称或非对称&#x…...

基于STM32、HAL库的MAX31865模数转换器ADC驱动程序设计

一、简介: MAX31865是一款高精度的铂电阻温度检测器(RTD)至数字转换器,具有以下特点: 支持2线、3线或4线RTD配置 15位ADC分辨率 可编程RTD和基准电阻 内置故障检测(开路、短路等) SPI接口通信 工作电压:3.0V至3.6V 二、硬件接口: STM32L4XX <--> MAX31865 PA5(SCK…...

Laravel5.7的一些用法

1、事件需要运行 php artisan queue:work 2、数据库对象关联 1对1 hasOne 1对多 hasMany 1依赖多 belongsTo 多依赖多 belongsToMany 3、 关联查询 with 关联统计 withCount 统计时指定字段名。 如: withCount([cardHolderOrders as order_count]); 4、 // 一次查询&…...

Vue3 + OpenLayers 开发教程 (六)WebGL渲染优化

1. WebGL 渲染优化 1.1 WebGL 渲染器配置 创建 src/utils/webgl.ts&#xff1a; import { Map } from ol; import { WebGLPointsLayer } from ol/layer; import { Vector as VectorSource } from ol/source; import { Style, Circle, Fill, Stroke } from ol/style;// 创建 …...

【C++】C++11新特性(一)

文章目录 列表初始化initializer_list左值引用和右值引用 列表初始化 在 C98 中可以使用{}对数组或者结构体元素进行统一的列表初始值设定 struct Point {int _x;int _y; }; int main() {int array1[] { 1, 2, 3, 4, 5 };int array2[5] { 0 };Point p { 1, 2 };return 0; …...

【网络原理】 网络编程套接字

文章目录 一、网络编程基础1. 为什么需要网络编程&#xff1f;2. 什么是网络编程3 .网络编程中的基本概念发送端和接收端请求和响应客户端和服务端 4. 常见的客户端服务端模型 二、Socket套接字1. 概念2.分类3. Java数据报套接字通信模型4.Java流套接字通信模型 三、UDP数据报套…...

每天五分钟深度学习框架pytorch:使用visdom绘制损失函数图像

visdom的安装 pip install visdom如果安装失败 pip install --upgrade visdom开启visdom python -m visdom.server nohup python -m visdom.server后台启动然后就会出现,下面的页面,我们可以使用下面的链接打开visdom页面 Visdom中有两个重要概念: env环境。不同环境的可…...

【MySQL专栏】MySQL数据库表的内外连接

文章目录 1、表的内连接&#xff08;1&#xff09;内连接的语法格式①显示SMITH的名字和部门名称 2、外连接&#xff08;1&#xff09;左外连接左外连接的语法格式通过实例演示&#xff1a; &#xff08;2&#xff09;右外连接右外连接的语法格式通过实例演示 1、表的内连接 什…...

-信息革命-

信息革命-马歇尔麦克卢汉&#xff08;MARSHALL McLUHAN&#xff09;&#xff0c;1964年 随着大系统的加速崩溃&#xff0c;作为塑造经济生活和收入分配的一个因素&#xff0c;系统性的强 制将会式微。很快&#xff0c;在社会机构的组织中&#xff0c;效率将会比权力的分配更加重…...

Charles 抓包入门教程

一、什么是 Charles&#xff1f; Charles 是一款功能强大的抓包工具&#xff0c;可以拦截、查看、分析电脑和手机上的 HTTP/HTTPS 网络请求。常用于&#xff1a; 查看网页或App发送的请求和返回的数据调试接口、分析问题模拟网络环境&#xff08;断网、慢速网络&#xff09;修…...

深度学习新趋势:利用MLP取代卷积层——S2-MLPv2模型解析

深度学习新趋势&#xff1a;利用MLP取代卷积层——S2-MLPv2模型解析 近年来&#xff0c;深度学习领域不断涌现出新的技术革新&#xff0c;而其中最引人注目的趋势之一就是用多层感知机&#xff08;MLP&#xff09;替代传统的卷积层。这种转变不仅带来了计算效率的提升&#xf…...

【玩转 JS 函数式编程_016】DIY 实战:巧用延续传递风格(CPS)重构倒计时特效逻辑

文章目录 巧用延续传递风格&#xff08;CPS&#xff09;重构倒计时特效逻辑1 起因2 换一种思路3 填坑之旅4 复盘与小结 写在前面 都说念念不忘&#xff0c;必有回响。写过的文章也好&#xff0c;看过的视频也罢&#xff0c;其实只要用心积累&#xff0c;不必刻意去死记硬背&…...

虚函数表的设计和多态的实现

虚表指针 类直接定义虚函数&#xff1a;编译器自动在对象头部插入 vptr。 继承含虚函数的父类&#xff1a;子类复用父类的 vptr&#xff0c;不会创建新的vptr 单继承&#xff08;子类继承一个含虚函数的父类&#xff09; 1.创建新的虚函数表 2.沿用父类的虚表指针&#xff…...

中国科学院大学计算机考研历年初试分数线分析以及计算机所考的科目有哪些?

以下是对中国科学院大学计算机考研历年初试分数线分析以及计算机所考科目的介绍&#xff1a; 历年初试分数线分析 • 2024 年 &#xff1a;计算机应用技术专业&#xff08;专业代码 081203&#xff09;和计算机技术专业&#xff08;专业代码 085404&#xff09;的复试分数线为…...

Simulink与C的联合仿真调试

背景 simulink的Matlab Function&#xff0c;默认采用double类型的数据&#xff0c;无法定制int或者single类型的数据&#xff1b;Simulink中的Matlab Function直接调用.m文件中的函数&#xff08;该函数中对数据类型有single或者int的定义&#xff09;&#xff0c;该函数中的…...

DeepSeek 多头潜在注意力(Multi-Head Latent Attention, MLA)技术

1. 核心原理 多头潜在注意力&#xff08;MLA&#xff09;是Transformer架构的扩展技术&#xff0c;通过潜在空间投影和多注意力头并行计算增强模型对长序列和复杂特征的建模能力。 1.1 关键技术点 潜在空间压缩 将原始高维注意力矩阵投影到低维潜在空间&#xff0c;降低计算复…...

C# 类(Class)教程

在现代面向对象编程中&#xff0c;**类&#xff08;Class&#xff09;**是最基础、最重要的概念之一。通过学习类&#xff0c;我们可以理解怎样定义自己的数据类型&#xff0c;封装数据与行为&#xff0c;构建复杂的软件体系结构。本文将详细介绍C#中的类&#xff0c;从基础定义…...

Kubernetes学习笔记-环境变量的使用

如果项目需要一些灵活配置&#xff0c;减少硬编码或者避免敏感信息的暴露&#xff0c;可以考虑使用Kubernetes Pod下的容器的环境变量。 Pod容器设置环境变量的方式&#xff1a; 可以通过Deployment配置文件的env字段来设置环境变量 value env:- name: ACTIVE_PROFILEvalue: …...

git提交规范记录,常见的提交类型及模板、示例

Git提交规范是一种约定俗成的提交信息编写标准&#xff0c;旨在使代码仓库的提交历史更加清晰、可读和有组织。以下是常见的Git提交类型及其对应的提交模板&#xff1a; 提交信息的基本结构 一个标准的Git提交信息通常包含以下三个主要部分&#xff1a; Header‌&#xff1a;描…...

关于指针和指针算术

第一次读C primer plus 第六版时&#xff0c;关于指针的语法一些名词没有用心去理解&#xff0c;再读的时候&#xff0c;讲到指针算术这个词时&#xff0c;感觉之前读像是漏了很关键的点&#xff0c;这次读&#xff0c;写下关于指针算术的思考。 有漏了的感觉是&#xff0c;在…...

el-input限制输入只能是数字 限制input只能输入数字

方法一&#xff1a; 通过设置type属性&#xff1a;type“number”&#xff0c;这种方式一般会影响样式&#xff0c;不建议使用&#xff0c;如下图&#xff1a; <el-input type"number" v-model"aaa"></el-input>方法二&#xff1a; 通过绑定值…...

Pydantic:校验器(@validator)、模型嵌套、模型继承

&#x1f4da; 1. 校验器&#xff08;validator&#xff09; Pydantic 允许你自定义字段验证逻辑。用 validator 装饰器可以在字段赋值时自动进行检查或修改。 例子&#xff1a; from pydantic import BaseModel, validatorclass User(BaseModel):name: strage: intvalidato…...

343. 整数拆分

给定一个正整数 n&#xff0c;将其拆分为至少两个正整数的和&#xff0c;并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 示例 1: 输入: 2输出: 1解释: 2 1 1, 1 1 1。 示例 2: 输入: 10输出: 36解释: 10 3 3 4, 3 3 4 36。说明: 你可以假设 n 不小于 2…...

前端面试 js

作用域链 内存管理 垃圾回收器 引用计数 默认栈里面会有一次引用 问题&#xff1a;循环引用&#xff0c;会产生内存泄漏 标记清除 垃圾回收期会定期从根开始遍历&#xff0c;找到有引用的对象 闭包 内存泄漏 this的指向 默认绑定 独立调用的this都是window function foo()…...

Linux CentOS 安装Python 3.8.0

在 CentOS 上升级 Python 3.6.8 到 3.8.0&#xff0c;可以按照以下步骤操作&#xff1a; 1. 安装依赖 sudo yum groupinstall -y "Development Tools" sudo yum install -y openssl-devel bzip2-devel libffi-devel zlib-devel wget 如果遇到报错“File "/bin…...

EXCEL常用函数公式和VBA汇总第二篇

系列文章目录 文章目录 系列文章目录前言一、excel公式应用1.rand函数2.rand函数随机排序3.rand函数提取数据4.correl函数5.SUBSTITUTE函数6.MAX组合函数7.分析下班时间8.柏拉图自动排序 总结 前言 一、excel公式应用 1.rand函数 用excel生成1-5的随机数字&#xff0c;其中对…...

Python 基础核心知识

1. Python 特点 简洁易读&#xff1a;代码简洁&#xff0c;强制缩进&#xff08;取代花括号&#xff09;。动态类型&#xff1a;变量无需声明类型&#xff08;如 x 10&#xff09;。跨平台&#xff1a;支持 Windows、Linux、macOS。丰富的库&#xff1a;如 NumPy&#xff08;…...

软考:软件设计师考试数据结构知识点详解

文章目录 1. 引言1.1 数据结构的重要性1.2 软件设计师考试中数据结构的考察目标 2. 基本概念和术语2.1 数据结构的定义2.2 算法和数据结构的关系2.3 抽象数据类型&#xff08;ADT&#xff09; 3. 线性结构3.1 数组3.1.1 数组的定义和特点3.1.2 数组的存储结构3.1.3 数组的优缺点…...

11前端项目总结----详情页放大镜和轮播图

商品详情页 DOM元素尺寸和位置相关属性1. 尺寸相关属性2.位置相关属性3.鼠标事件相关位置属性 放大镜排他Swiper和组件通信 DOM元素尺寸和位置相关属性 1. 尺寸相关属性 ①offsetWidth/offsetHeight&#xff1a;内容宽度/高度paddingborder&#xff08;滚动条&#xff09; ②c…...

Linux课程五课---Linux进程认识1

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…...

Nacos简介—4.Nacos架构和原理一

大纲 1.Nacos的定位和优势 2.Nacos的整体架构 3.Nacos的配置模型 4.Nacos内核设计之一致性协议 5.Nacos内核设计之自研Distro协议 6.Nacos内核设计之通信通道 7.Nacos内核设计之寻址机制 8.服务注册发现模块的注册中心的设计原理 9.服务注册发现模块的注册中心的服务数…...

splitchunk(如何将指定文件从主包拆分为单独的js文件)

1. 说明 webpack打包会默认将入口文件引入依赖js打包为一个入口文件&#xff0c;导致这个文件会比较大&#xff0c;页面首次加载时造成加载时间较长 可通过splitchunk配置相应的规则&#xff0c;对匹配的规则打包为单独的js,减小入口js的体积 2. 示例 通过正则匹配&#xff…...

MCP+A2A协议终极指南:AI系统构建技术全解析(医疗/金融实战+Streamable HTTP代码详解)

简介 2025年,MCP协议与A2A协议成为AI系统互联的核心技术。本文从通信机制到企业级应用,结合Streamable HTTP、零信任安全、多模态处理等最新技术,提供Go/Python/Java多语言实战代码,覆盖医疗诊断、金融风控等场景。含15+完整案例、性能优化方案及安全架构设计,助你掌握下…...

关于定时任务原理

关于定时任务原理 计算机是怎么计时的关于本地定时任务实现小根堆实现时间轮实现 关于分布式任务的实现管理未来的执行时间点 今天来聊一下工作中经常使用的定时任务的底层实现原理 计算机是怎么计时的 计算机内部使用多种方式来计时&#xff0c;主要依赖于硬件时钟&#xff0…...

【vue3】购物车实战:从状态管理到用户体验的全流程实现

在电商项目中&#xff0c;购物车是核心功能之一&#xff0c;需要兼顾数据一致性、用户体验和逻辑复杂度。 本文结合 Vue3 Pinia 技术栈&#xff0c;详细讲解如何实现一个高效且易用的购物车系统&#xff0c;重点剖析 添加购物车 和 头部购物车预览 的核心逻辑与实现细节。 一…...

日本IT|UIUX主要的工作都是哪些?及职业前景

在日本IT行业中&#xff0c;UI/UX&#xff08;用户界面/用户体验&#xff09;设计的工作涵盖从用户研究到界面实现的全流程&#xff0c;尤其在数字化服务、电商、金融科技等领域需求旺盛。 本篇是UI/UX在日本的主要工作内容、行业特点及职业前景分析&#xff1a; 一、UI/UX的主…...

Tailwind CSS 实战:基于 Kooboo 构建企业官网页面(二)

基于上篇内容&#xff0c;继续完善企业官网页面&#xff1a; Tailwind CSS 实战&#xff1a;基于 Kooboo 构建企业官网页面&#xff08;一&#xff09; 3.3 服务亮点&#xff1a;用于展示企业主要的服务项 1. 整体结构&#xff1a; <section class"py-16">&…...

第7章 内部类与异常类

7.1 内部类 在一个类中定义另一个类&#xff0c;这样的类称为内部类&#xff0c;包含内部类的类称为内部类的外部类。 关系&#xff1a; 内部类的外嵌类的成员变量在内部类中仍然有效&#xff0c;内部类中的方法也可以调用外嵌类中的方法。 内部类的类体中不可以声明类变量和…...

优先队列、堆笔记(算法第四版)

方法签名描述构造函数MaxPQ()创建一个优先队列MaxPQ(int max)创建一个初始容量为 max 的优先队列MaxPQ(Key[] a)用 a[] 中的元素创建一个优先队列普通方法void insert(Key v)向优先队列中插入一个元素Key max()返回最大元素Key delMax()删除并返回最大元素boolean isEmpty()返回…...

7.14 GitHub命令行工具测试实战:从参数解析到异常处理的全链路测试方案

GitHub命令行工具测试实战:从参数解析到异常处理的全链路测试方案 GitHub Sentinel Agent 用户界面设计与实现:测试命令行工具 关键词:命令行工具测试, 接口集成测试, 参数化测试, 异常处理测试, 测试覆盖率分析 1. 命令行工具测试架构设计 通过三层测试体系保障 CLI 工具…...

使用CubeMX新建USART1不定长接收工程

目录 1、新建板级支持包 2、修改中断服务函数 3、修改main.c文件 4、程序流程 新建工程的基本操作步骤参考这里&#xff1a;STM32CubeMX学习笔记&#xff08;6&#xff09;——USART串口使用_unused(huart)-CSDN博客 1、新建板级支持包 在本地保存新建工程的文件夹中新建Us…...

【C++QT】Layout 布局管理控件详解

文章目录 一、QVBoxLayout 垂直布局1.1 特点1.2 常用方法1.3 应用场景1.4 示例代码 二、QHBoxLayout 水平布局2.1 特点2.2 常用方法2.3 应用场景2.4 示例代码 三、QGridLayout 网格布局3.1 特点3.2 常用方法3.3 应用场景3.4 示例代码 四、QFormLayout 表单布局4.1 特点4.2 常用…...

w~嵌入式C语言~合集6

我自己的原文哦~ https://blog.51cto.com/whaosoft/13870384 一、开源MCU简易数字示波器项目 这是一款采用STC8A8K MCU制造的简单示波器&#xff0c;只有零星组件&#xff0c;易于成型。这些功能可以涵盖简单的测量&#xff1a; 该作品主要的规格如下&#xff1a; 单片机…...

坐标转换:从WGS-84到国内坐标系(GCJ-02BD-09)

目录 &#x1f345;点击这里查看所有博文 随着自己工作的进行&#xff0c;接触到的技术栈也越来越多。给我一个很直观的感受就是&#xff0c;某一项技术/经验在刚开始接触的时候都记得很清楚。往往过了几个月都会忘记的差不多了&#xff0c;只有经常会用到的东西才有可能真正记…...