2.1.3.4-队列算法及产品应用
在算法的学习过程中,应当从功能和原理出发理解代码,而不能从代码出发尝试倒推功能和原理,后者不仅效率极低而且还给人带来挫败感,损伤学习兴趣。
队列的应用场景
循环缓冲区(也被称为环形缓冲区或循环队列)在许多产品和应用中都有着重要的作用,特别是在需要处理数据流的场景中。以下是一些常见的使用案例:
数据流处理: 循环缓冲区常用于处理不断流入的数据,例如网络数据包、串口数据、音视频数据等。循环缓冲区可以保持数据的连续性,并能平滑处理数据流的速率差异(例如,数据的生成速率和处理速率不匹配的情况)。
操作系统: 在操作系统中,循环缓冲区被广泛用于内核和驱动程序,处理如键盘输入、鼠标移动等硬件事件。这些事件由硬件在任何时刻产生,而操作系统需要在适当的时机处理它们。
实时系统: 在实时系统中,循环缓冲区用于处理实时任务,例如传感器数据的收集和处理。实时系统需要快速响应,循环缓冲区可以作为一个"先进先出"(FIFO)的队列,保证数据的实时性。
音频和视频处理: 在音频和视频处理中,循环缓冲区用于缓存音频样本和视频帧。这样可以保持数据的连续性,并允许多个处理步骤(例如解码、处理、渲 ...
2.1.3.3-结构体使用及产品应用
掌握结构体的概念和用法
掌握结构体数组和结构体指针
掌握结构体的结构体
掌握结构体搭建链表的方法
掌握结构体及链表在产品上的应用
一般的数据类型只能构造同一个类型的数据,但是在不同情况下,我们需要将不同的数据类型组合成一种新的数据结构,比如说像学生的信息包含学生姓名、学号、性别、年龄等信息。那么这些参数里可能有些是数组型、字符型、整型甚至是结构体类型的数据,基于这种需求,结构体就诞生了。结构体就是所谓“面向对象”的编程思想,将某个物体视为一个对象,把这个对象的特性封装在结构体中,用到哪个特性就将其从对象中提取出来。
定义语法
结构体有以下两种定义方式,在中大型产品中往往使用typedef版本,因为这样可以大大提高代码可读性。
标准语法
12345678910111213141516#include <stdio.h>struct Date{ unsigned short year; unsigned short mon; unsigned short day;};int main(){ struct Date T ...
2.1.3.2-指针基础及产品应用
使用指针可以分离硬件层驱动程序(GPIO、串口、定时器)和应用层程序,达到程序分离、提高程序可移植性的目的,但是容易出bug。
1234567891011121314151617181920212223242526272829// Pointer.cpp#include <stdio.h>int main(){ int a; int *p; //将int*视为一个关键字来理解,这个关键字是为了创建指向int类型数据的指针地址 a = 10; p = &a; printf("//-----------------变量a地址-------------------//\r\n"); printf("&a=0x%x\r\n",&a); printf("p=0x%x\r\n",p); printf("&p=0x%x\r\n\r\n",&p); printf("//------------- ...
2.1.3.1-从typedef和#define的差异理解typedef关键字的使用
typedef <原类型> <新类型名>:是一种语句,为已有数据类型取别名。
作用:使代码更加简洁易懂,用typedef定义数组、指针、结构等类型将带来很大的方便,不仅使程序书写简单而且使意义更为明确,因而增强了可读性。
#define <宏名/标识符> <字符串>:是一种预编译指令,在编译前会把源程序中的<宏名/标识符>用对应的<字符串>来替代。
#define 是C中定义的语法,typedef 是 C++ 中定义的语法,二者在C++中可以通用,但 #define 成了预编译指令,typedef 当成语句处理。
Typedef 和 define 都可以用来给对象取一个别名,但是两者却有着很大不同。
参考资料1 参考资料2
执行时间不同
typedef 在编译阶段有效,所以有类型检查的功能,出现变量和数据类型错误时能及时报错。
而 #define 则发生在预处理阶段,只进行简单机械的字符串替换,不进行任何检查,也不占用程序空间(FLASH ROM)。
功能不同
对于 typedef :
使类型易于记 ...
2.3.3-无线门磁探测器软件设计
软件开发必要条件
STC 51单片机开发环境
常用的单片机开发环境 Keil、IAR。将STC头文件导入到软件文件夹内。利用STC-ISP中的范例程序进行高效率的开发。
单片机C语言
定义变量的方法
算数逻辑运算符的使用
if、while、for、switch/case、do-while语句
头文件的用途与调用,头文件是硬件和软件关联的关键。
详情见板块“C语言基础”。
无线门磁探测器软件逻辑
门磁探测器软件共可分为四块:IO口初始化配置、门磁开关检测程序设计、低压检测程序设计、射频电路程序设计。
其中,IO口初始化配置并非放在第一步直接完成,应根据模块需求对接口进行配置。
STC15W10X系列芯片如下图所示。
IO口初始化配置
以MCU为核心,看MCU的中英文资料,根据每个接口的用途,确定各个管脚的工作模式,编写初始化代码。
关于IO口的各种模式,此博客中有详细的介绍: GPIO输入输出各种模式详解
12推挽输出能输出大电流,能点亮LED灯。开漏模式省电,可用于接收外部电平变化并进入中断。
所有接口都可利用宏定义进行命名,如下图。
LED驱动引脚(P3.0、P3 ...
2.3.2-无线门磁探测器硬件设计
硬件设计流程
关键物料选型
MCU: STC15W104
干簧管: 磁簧开关(Reed Switch)也称之为干簧管,它是一个通过所施加的磁场操作的电开关。基本型式是将两片磁簧片密封在玻璃管内,两片虽重叠,但中间间隔有一小空隙。当外来磁场时将使两片磁簧片接触,进而导通。 一旦磁体被拉到远离开关,磁簧开关将返回到其原来的位置。
电源模块: "12A"电池 + HT7530稳压管
PCB设计软件(Altium Designer)
Altium Designer安装
理解原理图、PCB、原理图库、PCB库。
注意建立完成的工程的后缀对应的文件。
AD设计不是为了电路仿真,是为了导出印刷电路板,电路仿真可以考虑使用Multisim。
无线门磁探测器原理图设计以及绘制
理解visible grid和snap grid。
元件库的建立以及元件库内元件的设计,放置。(设计干簧管)
电磁控制电路和电源电路的讲解,干簧管控制输入电源的电平高低,电源电路采用HT7530将12V电压输出为3V电压。
电源模块
使用23A电池,12V输入电压,应使用HT7530芯片将电压 ...
1.5-利用hexo-abbrlink插件为HEXO博客文章添加永久短链
引入
HEXO默认生成的博客链接格式为 “https://{domain}/year/month/day/article_name/” 如果后期需要修改博客标题,会导致原有链接失效,而且中文标题会有非常长的编码,非常不利于分享和搜索引擎收录,所以使用 hexo-abbrlink 插件为HEXO中的每一篇文章编上一个特有的 abbrlink ID ,用这个ID号来识别文章。
通过插件修改后的博客文章链接格式为 “https://{domain}/posts/abbrlink_ID.html” 明显简洁了不少。
接下来举个例子感受一下:
配置插件前的链接:
1https://www.magicconch.top/2023/09/01/2.3.1-%E6%97%A0%E7%BA%BF%E9%97%A8%E7%A3%81%E6%8E%A2%E6%B5%8B%E5%99%A8%E5%BC%80%E5%8F%91%E6%A6%82%E8%A6%81/
配置插件后的链接:
1https://www.magicconch.top/posts/51745.html
总而言之,使用 hexo-abbrl ...
2.3.1-无线门磁探测器开发概要
电子产品开发流程
电子产品立项有以下要点
要点
备注
成本评估
BOM单品成本、开发物料成本、人工成本、时间成本
开发周期评估(开题报告)
开发周期、开发阶段性成果要求
风险评估
技术风险、认证风险等
开发团队的组建
硬件、软件、测试、结构、UI工程师等
…
门磁探测器简单介绍
门磁探测器是用来探测门、窗、抽屉等是否被非法打开或移动的报警器,由门磁主体和永磁体构成。
门磁产品的分类:
类别
通讯方式
有线门磁
485通讯, 开关信号…
无线门磁
ASK, FSK, 蓝牙, WIFI, NB-Iot, Lora等
独立门磁
现场报警提示
门磁探测器开发主要内容
门磁探测器开发需求
产品设计说明
门磁探测器是基于433MHz无线技术开发的安防门窗状态检测探测器,配套市场上众多品牌的安防报警主机使用。
产品支持开关门两种状态检测上报,支持电池低压报警。提供硬件、软件、测试等整体资料,需要配套无线主机使用,只需做简单修改即可。
产品模具与外壳
本产品的外壳选择的是基于携达科技的一款公模外壳。购买方式
产品要求 ...
2.2.3-单片机外围电路中的重要模块
常用电源电路
参数
典型值
常用的供电电源
AC220V, DC24V, DC12V, DC9V, DC5V
常用的电池
12V, 9V, 7.4V, 3.7V, 3V, 1.5V, 1.2V等
常用芯片供电电压
5V, 3.3V, 1.8V等
常见的电源芯片
LM1117-5.0 (-3.3V), HT7550(7530), LM7850, LM29302, EL1513E, LM2596
电源设计注意事项:
输入电压
输出电压
输出最大电流
输出电源纹波
其他参数
LED驱动电路
如P2.1所示电路为常规LED驱动电路。LED-WIFI为单片机IO口,当此IO口为低电平时,三极管工作在截止区,LED灯不亮; 反之则反之。
如P2.2所示电路为错误的LED驱动电路。将LED灯直接接在IO口上,看似能实现功能,实际上会产生大电流损坏单片机。
数码管检测电路
led数码管(LED Segment Displays)是由多个发光二极管封装在一起
分类:
共阴数码管:共阴极数码管是把所有led的阴极连接到共同接点COM
共阳数码管:共阳极数 ...
2.2.2-电阻丨电容丨二极管丨三极管 - 基础知识
电阻(Resistor)
贴片电阻的识别方法(两种):
三位:它的第一位和第二位为有效数字,第三位表示在有效数字后面所加“0”的个数.这一位不会出现字母。
例如:“472”表示“4700Ω”;“151”表示“150”
四位:前三位表示有效数字,第4位表示在有效数字后面所加“0”的个数。
例如:“2702”表示27000Ω=27kΩ
电容
电容器在调谐、旁路、耦合、滤波等电路中起着重要的作用。
在直流电路中,电容器是相当于断路的。电容器是一种能够储藏电荷的元件,也是最常用的电子元件之一(通交流 隔直流)。
二极管
判别正、负电极
观察外壳上的符号标记。通常在二极管的外壳上标有二极管的符号,带有三角形箭头的一端为正极,另一端是负极。
观察外壳上的色点。在点接触二极管的外壳上,通常标有极性色点(白色或红色)。一般标有色点的一端即为正极。还有的二极管上标有色环,带色环的一端则为负极。
以阻值较小的一次测量为准,黑表笔所接的一端为正极,红表笔所接的一端则为负极。
观察二极管外壳,带有银色带一端为负极。
分类
发光二极管、光电二极管、稳压管、面接触型二极管、点接触型二极管…
(肖特 ...