2.1.3.5-回调函数及产品应用
程序架构的核心理念或需求 掌握回调函数的作用 掌握回调函数的程序编写 掌握回调函数在产品中的应用 程序结构的核心理念和需求 很多人认为好的程序就是代码紧凑、算法精妙、执行效率高。 这个说法非常片面, 因为这些都是代码的局部特征, 局部写得好不代表代码整体上写得好。而好的架构要以 “大局” 为重, 思维不能局限于当前架构下的产品功能, 还要考虑到以后功能的增加和裁剪。 对于单片机开发来说, 一个好的程序架构至少要达到以下要求: 硬件层和应用层的程序代码分开, 相互之间的控制和通讯使用接口, 不共享全局变量或数组。目的是提升可移植性和可扩展性。 硬件层可以通过 stm32 的库函数打开单片机对应功能来调用, 应用层是产品具体功能的程序代码, 他们之间需要数据的交互(通讯)。 编写较小的项目时, 可以使用全局变量来传输数据。 但是设计较大的项目时, 大量使用全局变量使得代码的可移植性和可拓展性大大降低, 最好是通过接口(函数)来传输数据。 编写 51 单片机代码时, 用一个 .c 文件就可以完成所有功能, 包括寄存器配置、产品功能, 这是没有架构的程序。 编写 stm32...
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...
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); ...
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灯。开漏模式省电,可用于接收外部电平变化并进入中断。 所有接口都可利用宏定义进行命名,如下图。 ...
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电压。 ...
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 总而言之,使用...
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...