<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[tangdongming的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/tangdongming</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; tangdongming]]></copyright><item><title><![CDATA[FatFs文件系统的使用技术和移植方法总结]]></title><link>https://blog.csdn.net/tangdongming/article/details/123481768</link><guid>https://blog.csdn.net/tangdongming/article/details/123481768</guid><author>tangdongming</author><pubDate>Mon, 14 Mar 2022 16:25:34 +0800</pubDate><description><![CDATA[最近想探索一下文件系统-FATFS相关的一些知识，于是乎收集了相关资料，将其总结在下。



一、介绍一下FATFS

　　　　FatFs是一个通用的文件系统(FAT/exFAT)模块，用于在小型嵌入式系统中实现FAT文件系统。

　　　　其特点如下：

　　　　（1）DOS/Windows兼容的FAT/exFAT文件系统

　　　　（2）平台独立性，容易使用

　　　　（3）程序代码量少，占用资源低

　　　　（4）配置参数丰富，配置详情可参考官方网站FatFs - Generic FAT Filesys]]></description><category></category></item><item><title><![CDATA[使用回调函数，降低模块之间的耦合程度]]></title><link>https://blog.csdn.net/tangdongming/article/details/123360985</link><guid>https://blog.csdn.net/tangdongming/article/details/123360985</guid><author>tangdongming</author><pubDate>Tue, 08 Mar 2022 19:29:16 +0800</pubDate><description><![CDATA[一、前言

耦合性是程序结构中各个模块之间相互关联的度量。它取决于各个模块之间接口的复杂程度、调用模块的方式以及哪些信息通过接口。

编写代码有两个核心点：隔离变化、降低复杂度，而解耦是达到这两个目标的重要手段。

关于回调函数两篇不错的文章：





二、使用回调函数降低耦合

问题描述：实现回家函数come_home，传入出发的时间，打印回家的方式以及到家的时间，有两种回家方式：开车、走路。其中开车需要1小时，走路需要3小时。

功能分析：由于回家方式不同，所用时间不同，因此到家的时间不同，可以将co]]></description><category></category></item><item><title><![CDATA[示波器（ADC）的采样率]]></title><link>https://blog.csdn.net/tangdongming/article/details/123309533</link><guid>https://blog.csdn.net/tangdongming/article/details/123309533</guid><author>tangdongming</author><pubDate>Sun, 06 Mar 2022 13:56:25 +0800</pubDate><description><![CDATA[示波器的原理简单来说就是一个ADC转换，然后根据采集的不同电压在屏幕上显示出来。

今天就是说说示波器采样率到底是怎么回事。

1、举例描述采样率

1.存储深度

想象一下一张照片要怎么样才能清晰？当然是像素点越多，照片包含的原始信息就越接近真实，自然看起来也就越清晰。







我们从示波器上看到的波形其实也可以理解成一张照片，那么这张照片包含的点越多，自然也就越接近真实的样子。

示波器的存储深度就是表达了示波器最多能存储多少个数据点。比如28Mpts的存储深度，说明示波器最多可以存储两千八百万个]]></description><category></category></item><item><title><![CDATA[嵌入式软件可靠性设计的编程要点]]></title><link>https://blog.csdn.net/tangdongming/article/details/119892173</link><guid>https://blog.csdn.net/tangdongming/article/details/119892173</guid><author>tangdongming</author><pubDate>Tue, 24 Aug 2021 19:39:00 +0800</pubDate><description><![CDATA[嵌入式软件可靠性设计的编程要点简介1、判错2、判断实参是否合法3、仔细检查函数的返回值4、防止指针越界5、防止数组越界6、数学算数运算7、其他可能出现运行时错误的地方8、编译器语义检查9、关键数据多区备份，取数据采用“表决法”10、非易失性存储器的数据存储11、软件锁12、通信数据的检错13、开关量输入的检测、确认14、开关量输出15、初始化信息的保存与恢复16、while循环17、系统自检18、其他一些编程建议
简介
设备的可靠性涉及多个方面：稳定的硬件、优秀的软件架构、严格的测试以及市场和时间的检验等等]]></description><category></category></item><item><title><![CDATA[STM32命名规则]]></title><link>https://blog.csdn.net/tangdongming/article/details/117305292</link><guid>https://blog.csdn.net/tangdongming/article/details/117305292</guid><author>tangdongming</author><pubDate>Wed, 26 May 2021 21:00:15 +0800</pubDate><description><![CDATA[]]></description><category></category></item><item><title><![CDATA[STM32分类]]></title><link>https://blog.csdn.net/tangdongming/article/details/117305251</link><guid>https://blog.csdn.net/tangdongming/article/details/117305251</guid><author>tangdongming</author><pubDate>Wed, 26 May 2021 20:58:55 +0800</pubDate><description><![CDATA[]]></description><category></category></item><item><title><![CDATA[模拟量传输4-20ma电流]]></title><link>https://blog.csdn.net/tangdongming/article/details/107747103</link><guid>https://blog.csdn.net/tangdongming/article/details/107747103</guid><author>tangdongming</author><pubDate>Sun, 02 Aug 2020 16:52:32 +0800</pubDate><description><![CDATA[大家可能会非常熟悉RS232，RS485，CAN等工业上常用的总线，他们都是传输数字信号的方式。那么，我们用什么方式来传输模拟信号呢？工业上普遍需要测量各类非电物理量，例如温度、压力、速度、角度等，这些都需要转换成模拟量电信号才能传输到几百米外的控制室或显示设备上。工业上最广泛采用的是用4~20mA电流来传输模拟量。



采用电流信号的原因是不容易受干扰，因为工业现场的噪声电压的幅度可能达到数V，但是噪声的功率很弱，所以噪声电流通常小于nA级别，因此给4－20mA传输带来的误差非常小；电流源内阻趋于无穷.]]></description><category></category></item><item><title><![CDATA[PID算法通俗解释]]></title><link>https://blog.csdn.net/tangdongming/article/details/107746975</link><guid>https://blog.csdn.net/tangdongming/article/details/107746975</guid><author>tangdongming</author><pubDate>Sun, 02 Aug 2020 16:46:08 +0800</pubDate><description><![CDATA[啥是PID？

PID，就是“比例（proportional）、积分（integral）、微分（derivative）”，是一种很常见的控制算法。在工程实际中，应用最为广泛的调节器控制规律为比例、积分、微分控制，简称PID控制，又称PID调节。它以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。



算法是不可以吃的。



PID已经有107年的历史了。



它并不是什么很神圣的东西，大家一定都见过PID的实际应用。



比如四轴飞行器，再比如平衡小车......还有汽...]]></description><category></category></item><item><title><![CDATA[电力系统仿真算法]]></title><link>https://blog.csdn.net/tangdongming/article/details/107129261</link><guid>https://blog.csdn.net/tangdongming/article/details/107129261</guid><author>tangdongming</author><pubDate>Sat, 04 Jul 2020 19:49:52 +0800</pubDate><description><![CDATA[]]></description><category></category></item><item><title><![CDATA[电力电子电路仿真二]]></title><link>https://blog.csdn.net/tangdongming/article/details/107129154</link><guid>https://blog.csdn.net/tangdongming/article/details/107129154</guid><author>tangdongming</author><pubDate>Sat, 04 Jul 2020 19:36:57 +0800</pubDate><description><![CDATA[]]></description><category></category></item><item><title><![CDATA[电力电子电路仿真一]]></title><link>https://blog.csdn.net/tangdongming/article/details/107129091</link><guid>https://blog.csdn.net/tangdongming/article/details/107129091</guid><author>tangdongming</author><pubDate>Sat, 04 Jul 2020 19:29:40 +0800</pubDate><description><![CDATA[]]></description><category></category></item><item><title><![CDATA[冯.诺伊曼结构与哈佛结构区别]]></title><link>https://blog.csdn.net/tangdongming/article/details/103911232</link><guid>https://blog.csdn.net/tangdongming/article/details/103911232</guid><author>tangdongming</author><pubDate>Thu, 09 Jan 2020 16:43:02 +0800</pubDate><description><![CDATA[一、冯.诺伊曼结构
 1945年，冯.诺伊曼首先提出了“存储程序”的概念和二进制原理，后来，人们把利用这种概念和原理设计的电子计算机系统统称为“冯.诺伊曼型结构”计算机。冯.诺伊曼结构的处理器使用同一个存储器，经由同一个总线传输，如下图所示：



图 冯.诺伊曼结构



冯.诺伊曼结构处理器具有以下几个特点：

必须有一个存储器；

必须有一个控制器；

必须有一个运算器，用于完成算术...]]></description><category></category></item><item><title><![CDATA[HAL库 EEPROM字符串读写]]></title><link>https://blog.csdn.net/tangdongming/article/details/83271550</link><guid>https://blog.csdn.net/tangdongming/article/details/83271550</guid><author>tangdongming</author><pubDate>Mon, 22 Oct 2018 13:28:23 +0800</pubDate><description><![CDATA[
配置I2C 和串口
串口的配置就不做详细介绍


 



 1 #include &quot;stm32f1xx_hal.h&quot;
 2 #include &quot;Eeprom.h&quot;
 3 #include &quot;string.h&quot;
 4 extern I2C_HandleTypeDef hi2c1;
 5 /*------Ð´×Ö·û´®µ½EEPROMÖÐ*/
 6 void I2C_eepWritePage(u...]]></description><category></category></item><item><title><![CDATA[使用keil MDK5.23的CMSIS Driver层的USART驱动]]></title><link>https://blog.csdn.net/tangdongming/article/details/77466547</link><guid>https://blog.csdn.net/tangdongming/article/details/77466547</guid><author>tangdongming</author><pubDate>Tue, 22 Aug 2017 06:03:16 +0800</pubDate><description><![CDATA[前言 
keil mdk自版本5以来，就主推使用包管理器来灵活开发应用。推出了Management Run-Time Environment。用户在新建工程的时候，可以根据项目需要，选择组件。简单的说就是，ARM推出这些标准，旨在用户快速开发的自己的应用程序，无需用户关心底层的逻辑实现。因此，我们尽可放心使用。 
一、创建工程 
新建工程时选择目标设备芯片，然后弹出的运行环境管理窗口，开始选]]></description><category></category></item><item><title><![CDATA[数组指针与指针数组]]></title><link>https://blog.csdn.net/tangdongming/article/details/73695248</link><guid>https://blog.csdn.net/tangdongming/article/details/73695248</guid><author>tangdongming</author><pubDate>Sat, 24 Jun 2017 22:16:25 +0800</pubDate><description><![CDATA[int   *a[10] ：指针数组，数组a里存放的是10个int型指针 




int (*a)[10] ：数组指针，a是指针，指向一个数组，此数组有10个int型元素

 

int   *a[10] 先找到声明符a,然后向右看，有[]说明a是个数组，再向左看，是int *，说明数组中的每个元素是int *。所以这是一个存放int指针的数组。 




int (]]></description><category></category></item><item><title><![CDATA[sizeof和strlen的区别]]></title><link>https://blog.csdn.net/tangdongming/article/details/73694440</link><guid>https://blog.csdn.net/tangdongming/article/details/73694440</guid><author>tangdongming</author><pubDate>Sat, 24 Jun 2017 19:23:34 +0800</pubDate><description><![CDATA[1、sizeof和strlen的区别
（1）sizeof是一个操作符，strlen是库函数
（2）sizeof的参数可以是数据的类型，也可以是变量，strlen只能是以“\0”结尾的字符串
（3）sizeof是在编译时运算出结果，strlen是运行时调用函数计算出结果
（4）sizeof计算的是数据类型或者变量所占的内存大小，strlen计算的是字符串的实际长度。
（5）数组做sizeo]]></description><category></category></item><item><title><![CDATA[malooc和new的区别]]></title><link>https://blog.csdn.net/tangdongming/article/details/73693759</link><guid>https://blog.csdn.net/tangdongming/article/details/73693759</guid><author>tangdongming</author><pubDate>Sat, 24 Jun 2017 19:15:36 +0800</pubDate><description><![CDATA[1、在C中的malloc和C++中的new有什么区别
（1）new、delete是操作符，可以重载，只能在C++中使用
（2）malloc和free是函数，可以覆盖，C、C++中都可以使用
（3）new可以调用对象的构造函数，对应的delete可以调用相应的析构函数
（4）malloc仅仅分配内存，free仅仅回收内存，并不执行构造和析构函数
（5）new、delete返回的是某种数据类]]></description><category></category></item><item><title><![CDATA[关于static静态变量的几个问题]]></title><link>https://blog.csdn.net/tangdongming/article/details/73693399</link><guid>https://blog.csdn.net/tangdongming/article/details/73693399</guid><author>tangdongming</author><pubDate>Sat, 24 Jun 2017 18:31:30 +0800</pubDate><description><![CDATA[1、C语言中的关键字static和C++中的关键字static有什么区别
在C中static用来修饰局部静态变量和外部静态变量、函数。而C++中除了上述功能外，还可以用来定义类的成员变量和函数，即静态成员和静态成员函数。
2、static变量的作用
1）static变量有2个特性，全局性和记忆性
2）在函数体内，一个被声明为静态的变量在这一函数被调用的过程中其值维持不变
3）在模块内（但]]></description><category></category></item></channel></rss>