- 博客(158)
- 资源 (1)
- 收藏
- 关注
转载 嵌入式开发中观察者模式实现(转)
观察者模式(Observer Pattern)是一种广泛应用于软件设计的行为型设计模式。在该模式中,存在两种关键的角色:被观察者(Subject 或Observable):这是一个包含了一系列观察者对象的集合,并提供了增加、删除观察者对象以及通知所有观察者的接口。当被观察者的状态发生变化时,它负责触发通知机制,使所有关联的观察者得到更新。观察者(Observer):这是从被观察者那里接收状态变更通知的一组类的接口或者抽象类。每个具体观察者都必须实现这个接口,以便在接收到通知时执行相应的操作。
2025-01-05 11:53:46 17
原创 void * 的妙用
使用void *指针作为函数参数的核心出发点是灵活性和通用性。避免重复代码:使得函数和数据结构可以处理多种不同类型的数据。代码复用void *提供了一种通用的接口,可以用于许多不同的应用场景,减少了重复编写类型特定代码的需求。提高模块化:使得不同模块和系统之间的接口更加通用和抽象,简化了模块间的耦合。虽然void *提供了极大的灵活性,但也需要开发者注意类型安全问题。传递void *后,必须手动进行类型转换,并确保对其使用时的类型正确,否则可能会导致运行时错误。
2025-01-05 11:47:29 476
原创 示波器使用指南
直流耦合:传递信号的所有频率成分,包括直流和交流。交流耦合:仅传递交流信号,滤除直流成分。接地耦合:将输入端接地,显示零电平(仅用于参考或校准)。
2025-01-05 10:35:16 305
原创 中断系统 | 高优先级抢占原理
因此51的内核设置了一个高优先级的向量表,注册在高优先级向量表的先会被优先执行,而且可以打断正在执行的低优先级任务。中,不仅他们中断的执行顺序是固定的,而且在执行中断服务函数的过程中,如果有更紧急的任务,也无法被打断了。如果INT0 和TIM0 的中断同时发生,CPU会有执行INT0的服务函数,然后再执行TIM0的函数。如果PT0 设置最高优先级,如果此时,其他的中断一起发生,cpu会优先执行T0.或者说,如果此时下面的红框发生中断,此时如果发生T0中断,会马上执行T0中断。如果所有的中断都分配在同一个。
2025-01-01 21:22:28 298
转载 SourceInsight4.0的使用
一、项目管理1、新建一个项目快捷键Alt+Shift+N可以打开新建项目对话框,然后根据提示填好项目存储位置,源文件位置等,然后会出现添加删除项目文件对话框,选中自己想要编辑和浏览的文件添加即可,这样就建好了一个项目。2、添加和删除项目文件(1)、在添加删除文件前,可以先设置文件过滤器,菜单栏-选项-文档选项,就可以看到文件过滤器了,怎么设置应该是一目了然的。(2)、菜单栏-项目-添加或删除文件,即可打开添加和删除项目文件对话框。3、关闭项目、打开项目、删除项目。
2024-12-21 22:38:41 126
原创 C语言 - 变量
在C语言中,定义一个变量时,编译器会为该变量分配一块内存区域,并将其关联到一个名字(变量名)。从程序员的视角来看,这个名字就是变量,但从计算机的角度来看,变量只是内存地址的一个。
2024-12-21 17:03:34 418
原创 51单片机 串口UART
数据写入SBUF寄存器后,8051会自动开始数据的串行传输。传输完成后,TI(发送中断标志)位会被置1,表示发送完成。发送前直接写入SBUF , 然后单片机就在串口时钟的驱动下,一位一位发送,全部发送完成之后 , 发送完成标志位置1。当你想要通过串口发送数据时,需要将数据写入SBUF寄存器。1 , 当单片机通过串口接收到外部设备发送的数据时,这些数据会被存入SBUF寄存器中。2 , 当数据成功接收并存入SBUF后,RI(接收中断标志)位会被置1,表示接收完成。
2024-12-11 23:40:33 309
原创 51单片机-内部扩展RAM的应用
RAM是在程序运行中存放随机变量的数据空间,51单片机球认的内部RAM只有128B,c清于编程者来说,一个芯片的RAM空间越大,RAM不够用怎么办,连过多的变量都不敢定义。写起程序来就越容易得心应手,不会总考忠压前面我们写程序时曾讲到过,如果定义个变量后,不对这个变量进行初始化,这个修就是0,其实这个结论是流要一定的条的闲四写.政酸石用防学节之利要于品东粗烘器技式内叫限款边装控观有初哈化时编译器会默认将变量值设定为0。一旦程序中的总变量超过128娜,
2024-12-11 22:45:02 688
原创 电位器分段编码识别挡位
最近接到一个需求,就是使用电位器实现,某个用电器的功率控制,一共控制3个挡位:1、0挡位2、1挡位3、2挡位4、3挡位由于电位器本质一个是电阻,我们若希望通过电位器来控制不同挡位,就需要对其进行分段处理,然后使用单片机的IO口对adc进行采集。由于电位器本身存在一定的线性度或者回差问题,我们的做法是这样的。
2024-12-05 22:54:16 163
原创 串口通讯 | ascii | hex | 字符串(解析理解)
实验环境搭建使用一个usb转ttl的模块,将其中的TX 、RX 短接在一起,波特率随意实验截图上位机字符串发送 - > 上位机字符串接收上位机字符串发送 - > 上位机hex接收上位机HEX发送 - > 上位机字符串接收上位机hex发送 - > 上位机hex接收
2024-11-27 11:59:20 206
原创 串口通信:hex、非hex格式
HEX格式:在HEX模式下,数据以十六进制的形式显示和发送,适合发送原始的字节数据,如协议数据或者二进制数据。这种方式在底层通信和硬件调试中非常常见,因为它可以精确地控制和查看每个字节的数据。非HEX(ASCII)格式:在非HEX模式下,数据以字符的形式显示和发送,适合发送可打印的文本数据。这种方式在高层通信中更常用,因为它可以直接显示和处理文本信息,易于阅读和理解。这两种模式的选择取决于你的具体需求,包括数据的类型、用途、以及你希望如何解析和处理这些数据。
2024-11-27 11:39:02 1059
原创 高阻输入的应用 | 浮空输入
现在我使用一款51内核的单片机,单片机的引脚连接着一个按键检测电路,引脚已经被一个外部电阻上拉到5V,那么请问呢,在配置该引脚的工作模式的时候,是应该配置成高阻输入,还是上拉输入模式,还是什么其它模式?模式是比较合适的,因为这样可以减少单片机内部的功耗,并且利用外部上拉电阻来确保引脚在按键未按下时为高电平。模式,这样在按键未按下时,内部上拉电阻会将引脚拉高,按键按下时,引脚被拉低。:引脚内部连接到一个上拉电阻,当引脚悬空时,会被内部上拉电阻拉高到高电平。:引脚只能输出低电平,需要外部上拉电阻来确定高电平。
2024-11-26 10:32:07 541
转载 转载:EC11的中断实验——NVIC&EXTI
这样为了记录下完整的表述1和表述2,我们定义两个全局变量flag1和flag2,当没有进入中断的时候,默认我们将其初始化为0,当发生了属性为“下1”的中断后,我们将flag1=1;正常的EC11编码器有15档、20档等,这里的档可以理解为,我们转动一圈,开关内部闭合与打开多少次,由原理图可知,我们编码器的内部实际上是一个单刀开关,转动一次之后,开关改变一次状态,A与B的电平就发生翻转。A在下降沿的时刻B是低电平,A在上升沿的时刻B是高电平,这可以表述为(A 下 B 0,A 上 B 1),记作表述2。
2024-11-26 09:34:28 140
原创 赛元MCU 脱机烧录步骤
1、 将SC-LINK 使用外部5V电源供电2、将烧录口对准主板烧录接口3、busy亮红灯,进入烧录ing,烧录成功后,OK灯亮蓝灯。
2024-11-07 16:49:34 496
原创 51单片机 定时器、计数器
在 51 单片机中,定时器/计数器可以被配置为计时或计数定时模式:单片机内部的振荡器(通常由外部晶振提供时钟信号)驱动定时器按固定频率计数。计数模式:定时器由外部输入信号触发,每检测到一个上升或下降沿时,计数器的值会增加1。定时器 0和定时器 1,它们各自都有独立的寄存器和控制方式。在部分改进版 51 单片机中(如 8052),还增加了定时器 2,功能更为丰富。51 单片机的定时器功能强大且灵活,支持多种模式和应用场景。合理配置定时器,不仅可以实现精准的定时操作,还可以用于事件计数和外部触发事件。
2024-11-06 09:13:48 1059
原创 nop() 指令详解
nop()nop()虽然是一条“无操作”指令,但在 51 单片机中有着独特的应用价值。它可以用于精确延时、时序调整、指令对齐、硬件兼容等场景,辅助开发人员实现更加可靠、稳定的嵌入式系统。合理运用nop指令可以使程序运行更符合预期,但在大多数情况下,应结合其他更为高效的方式(如定时器、外设中断)来实现精确的时间控制。
2024-11-06 09:06:34 1900
转载 单片机程序的整体框架设计的一些思路体会
单片机系统开发人员的目标之一是在编程环境中创建固件,以实现低成本系统、软件可靠性以及快速的开发迭代时间。实现这种编程环境的最佳方法实践是使用统一的固件架构体系结构,该体系结构在产品开发过程中充当框架并支持“固件模块化”,或称为子系统。可以结合固件模块化、可测试性和兼容性的正确组合的设计体系架构结构应用于任何固件开发项目,以最大程度地提高代码可复用性,加快固件调试速度并提高固件可移植性。模块化编程将程序功能分解为固件模块/子系统,每个模块执行一个功能,并包含完成该功能所需的所有源代码和变量。
2024-10-31 00:12:56 82
原创 逻辑推理学习笔记
论证1.演绎推理(最优) 4.设证推理(次优)2.归纳推理(次优) 5.反向推理(最差)3.类比推理(最差) 6.当然推理(次优)
2024-10-27 20:15:45 563
原创 按键驱动框架
首先,定义可能的按键事件类型,例如按下、释放等。KEY_PRESS,KEY_LONG_PRESS, // 可以根据需要添加长按事件// 其他事件类型...定义一个函数指针类型,用于处理按键事件。
2024-10-18 09:38:47 290
原创 esp idf 版本切换
然后同时 按住shift + ctrl, 选择idf 扩展器。然后选择具体的现存版本进行安装就配置即可。现在本地安装好不同的版本idf。
2024-10-15 14:28:52 280
原创 LVGL 报错记录
由于项目有多个屏幕,guider 生成的代码,会默认给每个屏幕添加一个flag = true,表示当前屏幕未加载,需要进行初始化。但是我发现,如果发生了屏幕跳转之后,也就是原来的屏幕flag 不设置成 flag = false;就会触发系统的看门狗复位。
2024-10-05 10:33:11 389
转载 51 | data | idata | xdata | code
51单片机的运行内存分前128字节和后128字节。前面128个字节好像cpu里的寄存器,读写非常快。后面的128字节只能用指针访问。单片机可以外扩运行内存条,外扩的这部分内存叫xdata。
2024-09-25 09:23:32 331
原创 蜂鸣器驱动程序
如果你的蜂鸣器任务是定期执行的(例如每100毫秒调用一次),那我们可以用来避免使用阻塞式的延时函数。通过在每次任务调用时检查蜂鸣器的状态、时间来实现非阻塞的控制逻辑。下面是基于状态机的蜂鸣器驱动程序,适合在周期性任务中调用。
2024-09-25 09:21:04 321
原创 蜂鸣器驱动程序
如果你的蜂鸣器任务是定期执行的(例如每100毫秒调用一次),那我们可以用来避免使用阻塞式的延时函数。通过在每次任务调用时检查蜂鸣器的状态、时间来实现非阻塞的控制逻辑。下面是基于状态机的蜂鸣器驱动程序,适合在周期性任务中调用。
2024-09-25 08:58:37 402
原创 TM1629B数码管驱动IC 应用
为什么需要使用数码管驱动IC一般情况下,如果是驱动一个数码管,我们可以使用共阳、共阴数码管。通过固定共阳数码管的一端为高电平1,然后控制seg 口为0 ,低电平即可点亮。但是当数码管数量过多的时候,比如有8位数码管,那么就会占用单片机的 8 + 8个seg口 = 16个IO在这种场景下,数码管驱动IC 应运而生。
2024-09-18 00:13:45 611
STM32开发教程:Keil环境引入cJSON进行JSON解析
2024-10-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人