自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(191)
  • 资源 (1)
  • 收藏
  • 关注

原创 FreeRTOS 二值信号量应用

应用场景核心思想信号量初始值典型调用方任务同步等待一个预期的事件0任务Take-> 任务Give中断与任务同步ISR通知任务处理0任务Take-> ISR单向信号通知(门控)标志一个状态/条件0任务Give-> 任务Take(带超时)简单来说,当你需要让一个任务“等待某事发生”时,二值信号量是一个极佳的选择。而如果需要保护共享资源,则应使用互斥量来避免优先级反转问题。

2025-11-28 15:52:24 435

原创 reeRTOS 二值信号量为什么会存在优先级反转的问题,说明原理,并举例说明

问题根源:普通的二值信号量不具备优先级继承功能。低优先级任务持有资源时,无法抵抗中优先级任务的抢占,导致高优先级任务被无限期推迟。关键区别:在 FreeRTOS 中,用于同步的二值信号量和用于互斥的互斥量是不同的。互斥量内部实现了优先级继承协议,而二值信号量没有。实践建议如果你要保护共享资源,防止优先级反转,请务必使用互斥量,而不是二值信号量。在 FreeRTOS 中,应使用来创建互斥量,而不是。

2025-11-28 14:31:26 353

原创 freeRTOS临界段资源

不能被其他任务抢占不能被中断服务程序打断必须完整执行,不能部分执行临界段代码必须原子性执行的代码段执行期间禁止任务切换和中断用于保护共享资源或关键硬件操作应该保持尽可能短通过和来保护正确使用临界段是确保FreeRTOS应用程序稳定性和可靠性的关键。

2025-11-26 23:44:22 309

原创 为什么有的mcu烧录的时候是用hex,有的是用bin

特性HEX 文件BIN 文件格式ASCII 文本纯二进制地址信息内置在文件中需要外部指定数据连续性支持不连续的数据块必须是连续的数据块文件大小较大(有冗余信息)较小(纯数据)可读性可用文本编辑器查看不可读(乱码)错误校验每行有校验和无典型应用开发调试、复杂内存布局的MCU量产烧录、Bootloader升级、简单MCU选择HEX还是BIN,并非由MCU本身绝对决定,而是由**“工具链 + 内存布局 + 应用场景”**共同决定的。

2025-10-29 08:21:28 1409

原创 物理电气协议标准:RS485 RS232

是的,RS232和RS485本质上是物理层和电气层的协议标准,它们定义的是信号的电气特性(如电压范围、传输介质、抗干扰能力等),而不涉及数据格式和软件时序。数据链路层协议是计算机网络体系结构(如OSI七层模型)中的第二层协议,主要负责相邻两个设备(如两个路由器、计算机与打印机)之间通过物理链路传输数据时的规范和控制。简单来说,它解决的是“如何在物理线路上可靠地传递数据”的问题。

2025-08-21 21:55:41 1105

原创 在嵌入式单片机开发中,通过校验和或者校验码来比对程序版本好有何优劣势

根据具体需求(资源、可靠性、安全性)权衡选择即可。

2025-08-18 22:22:45 496

原创 51单片机软件架构分层设计的思路是什么?

将硬件驱动的底层细节屏蔽,对上层提供统一接口。

2025-08-12 13:09:29 891

原创 51 单片机分层架构的模块依赖关系图

并配一份可直接套用的代码框架。

2025-08-12 13:08:43 565

原创 C语言深度剖析

register这个关键字请求编译器尽可能将变量存在CPU内部寄存器中,而不是通过内存寻址以提高效率。注意是:尽可能、而不是绝对。

2025-08-10 23:07:46 368

原创 qt从入门到放弃

【代码】qt从入门到放弃。

2025-07-24 23:12:33 109

原创 No executable specified.QT报错

在qt。

2025-07-22 09:11:12 409 1

原创 计算机网络中:传输层和网络层之间是如何配合的

应用层数据││ 传输层(TCP) │ 分段、编号、确认、重传、流量控制│ TCP段│ 网络层(IP) │ 路由、寻址、转发(不保证可靠性)│ IP数据报│ 链路层 │ 真正在物理媒介上发帧网络层提供“主机到主机”的可达性;传输层在网络层之上提供“进程到进程”的端到端语义(可靠或不可靠)。二者一前一后,共同完成完整的网络通信。客户端进程不监听端口,但操作系统为它临时“注册”了四元组;所有返回包按四元组精准投递,因此绝不会搞错收件人。

2025-07-21 23:56:09 1110 1

原创 wifi配网

物联网设备,当我们购置回家的时候,一开始厂家并不知道你家的wifi账号密码,所以没办法写到程序中去,所以需要设计一种特殊的程序,让买回来的设备能连接上家里的wifi,对于有界面的产品来说,可以直接在图形化UI界面上操作,比如智能液晶电视,可以直接用户输入SSID,password、但是对于没有图形化界面的设备,比如智能插座而言,就需要用到智能配网了这里我就讲解其中一种配网技术,是由 TI(德州仪器)最早提出的一种无线配网技术,后被广泛应用到如 ESP8266 / ESP32 等平台中。它允许设备。

2025-07-05 18:19:38 740

原创 #ifdef和#if 的应用差异

可以灵活控制代码的编译行为,适应不同的硬件、配置或调试需求。中检查宏是否定义,避免未定义宏导致的错误。(必须是常量表达式)决定是否编译代码。在嵌入式软件开发中,

2025-06-26 09:47:43 844

原创 从bootloader跳到APP需要几步?

中断向量表存放在。

2025-06-15 16:05:20 787

原创 举例说明单片机,主循环和中断资源访问冲突的案例

当主循环和中断服务程序异步地(即发生时机不确定)访问同一个资源,并且至少有一个访问是“写”操作时,如果访问不是“原子性”的(即不能被中断打断的最小操作单元),就可能出现冲突,导致数据损坏、程序逻辑错误或硬件操作异常。好的,我们来举几个单片机中主循环(主程序)和中断服务程序访问共享资源(如全局变量、硬件寄存器、缓冲区等)发生冲突的典型案例,并解释冲突是如何发生的。这个例子本身冲突不明显,主循环成功读取了位置5的数据,中断正确写入了位置10的数据并更新了写索引。对于案例2,保护读写索引的更新;

2025-06-13 22:54:07 1275

原创 单片机,主循环和中断资源访问冲突的案例

本文分析了单片机系统中主循环与中断程序共享资源时可能引发的冲突问题,通过三个典型场景(共享变量、缓冲区操作和外设配置)展示了冲突现象及其解决方案。文章重点阐述了竞态条件的发生机制,并提供了关中断保护、状态标志管理、缓冲区检测等具体解决方法。最后总结了冲突预防的五项原则,包括最小化临界区、原子操作和中断优先级控制等。这些案例和原则对嵌入式系统开发中避免资源冲突具有实际指导意义。

2025-06-13 22:42:01 1143

原创 运放负反馈电路原理分析

A 非常大,可以到几十万斜坡非常陡峭,或者说其区间非常窄。

2025-06-13 00:08:51 270

原创 火线、零线、地线 基础知识

变压器二次侧中性点(N)引出的线路,与相线(L)构成回路,对用电设备进行供电。通常情况下,零线在变压器二次侧中性点(N)处与保护地线(PE)重复接地(PEN),起到双重保护作用。:电路中输送电的电源线。: 不用于工作回路,只作为保护线。利用大地的绝对“0”电压,当设备外壳发生漏电,电流会迅速流入大地,即使发生PE线有开路的情况,也会从附近的接地体流入大地。(从变压器中性点接地后引出主干线并每间隔20-30米重复接地)

2025-06-12 23:36:39 2082

原创 C语言中的段错误(Segmentation Fault):底层原理及解决方法

在嵌入式单片机开发中,除了段错误外,还有许多其他常见的运行时错误,这些错误可能导致系统崩溃、功能异常或性能下降。嵌入式单片机的运行时错误类型多样,需结合硬件特性和软件逻辑综合排查。通过防御性编程和调试工具的结合,可以有效减少运行时错误,提高系统稳定性。

2025-06-09 23:08:00 1235

原创 嵌入式软件架构规范之 - 分层设计

该规范是嵌入式软件“分层设计”的核心原则之一,核心目标是通过驱动层→底层适配层→应用层的解耦,实现“一次编写,多平台复用”的驱动代码。实际开发中,可结合具体项目需求,通过硬件抽象层(HAL)或板级支持包(BSP)实现底层接口的隔离,确保驱动模块的独立性和可移植性。

2025-05-22 15:26:13 1309

原创 51单片机同一个timer 作为定时器和波特率发生器么?

在51单片机中,同一个Timer不能同时作为普通定时器和波特率发生器。为了避免冲突,建议使用不同的Timer来实现不同的功能。如果硬件资源有限,可以考虑分时复用或使用外部定时器芯片,但这些方法实现复杂,且可能影响系统稳定性。

2025-05-06 18:16:46 1129

原创 *** ERROR L127: UNRESOLVED EXTERNAL SYMBOL

在嵌入式开发中使用 Keil 编译器时,是一个常见的错误。这个错误表示编译器在链接过程中找不到某些外部符号的定义。在代码里引用了某个函数或者变量,不过该函数或者变量却没有被定义。例如,在一个源文件里调用了一个函数,但是这个函数的实现代码并未包含在项目中。// main.c// 调用未定义的函数return 0;在这个例子中,函数未被定义,链接时就会出现未解析外部符号的错误。保证所有被引用的函数和变量都有定义。查看代码,确认在源文件中实现了所有被调用的函数。

2025-05-06 08:59:56 1881

原创 关于堆栈指针的那些事 | bootloader 如何跳转app

将堆栈指针的值存储在向量表的第一个位置(

2025-04-28 00:03:18 1033

原创 OTA和IAP的关系

OTA是Over-the-Air的简写,即空中下载技术,通过网络远程给用户进行系统更新和升级。IAP是In Application Programming的简写,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。IAP主要包括BootLoader和应用程序两部分,基于IAP的OTA设计思路是先通过OTA接收升级固件,再利用IAP进行固件搬移、校验和程序跳转,实现空中升级的目的。,但两者并非完全等同。

2025-04-26 21:56:28 1039

原创 C++ / 引用 | 类

作用: 给变量起别名。

2025-04-23 00:03:53 302

原创 C++ 学习指南

【代码】C++ 学习指南。

2025-04-22 23:31:36 271

原创 C语言 转义字符

在C语言中,转义字符是一种特殊的字符序列,用于表示一些无法直接输入或具有特殊含义的字符。它以反斜杠“\”开头,后面跟随一个字符或一组字符,用来表示一个特定的字符或控制功能。

2025-03-22 22:13:05 779

原创 win10 添加项目右键用vscode

1、新建reg文件;在vscode安装目录下新建一个文本文件,然后将文件后缀改为:*.reg,文件名任意,例如:vsCodeOpenFolder.reg。文件编辑好了之后保存关闭.然后双击运行 vsCodeOpenFolder.reg ,遇到提示点击 “确定"或"是”;

2025-03-13 08:56:28 263

原创 %d %c %x

这种设计的核心在于数据的二进制本质和格式化符号的灵活性。它使得程序员可以根据需要以不同的方式解释和处理数据,从而提高编程的灵活性和效率。这种设计不仅适用于C语言,也是现代编程语言处理数据的通用方式。

2025-03-08 00:24:26 1046

原创 产品规格书和产品说明书的区别

简要介绍产品及其主要功能。

2025-02-24 14:29:52 822

原创 Win10(Win7)局域网设置共享文件夹,超全面步骤。

Win10(Win7)局域网设置共享文件夹,超全面步骤。

2025-02-10 23:32:32 380

原创 示波器使用指南

直流耦合:传递信号的所有频率成分,包括直流和交流。交流耦合:仅传递交流信号,滤除直流成分。接地耦合:将输入端接地,显示零电平(仅用于参考或校准)。

2025-02-10 23:29:43 324

原创 MCU应用踩坑笔记(ADC 中断 / 查询法)

2.同时使用查询法和中断法且芯片温度超过47℃导致采样时间过长原因为高温下芯片内部HRC频率会产生漂移(频率变快,但时钟精度控制在±1%),该状态下MCU采样ADC ADC中断标志会比while语句更快速,CPU优先处理中断服务函数,导致采样完成标志在中断服务函数中清除,进一步导致MCU卡死在while循环中无法清除WDT致使WDT超时溢出复位,且外部电路也会受温度影响,综合影响下最终表现为MCU 47℃下ADC采样卡死。在使用过程中,因配置了ADC中断使能,在中断服务程序中,清除了了中断标志位。

2025-02-07 11:23:55 1091

原创 KEIL修改工程名

假设原来的工程文件名是first,要改成second1.在工程文件目录中,将first.uvopt和first.uvproj名字改成second.uvopt和second.uvproj。2.其他first文件统统删除。3.打开second.uvproj,4.点击品字形图标,在弹出的界面上,双击“Progect Components”下面的工程名,修改成second。

2025-02-06 10:00:25 1551

转载 嵌入式开发中观察者模式实现(转)

观察者模式(Observer Pattern)是一种广泛应用于软件设计的行为型设计模式。在该模式中,存在两种关键的角色:被观察者(Subject 或Observable):这是一个包含了一系列观察者对象的集合,并提供了增加、删除观察者对象以及通知所有观察者的接口。当被观察者的状态发生变化时,它负责触发通知机制,使所有关联的观察者得到更新。观察者(Observer):这是从被观察者那里接收状态变更通知的一组类的接口或者抽象类。每个具体观察者都必须实现这个接口,以便在接收到通知时执行相应的操作。

2025-01-05 11:53:46 125

原创 void * 的妙用

使用void *指针作为函数参数的核心出发点是灵活性和通用性。避免重复代码:使得函数和数据结构可以处理多种不同类型的数据。代码复用void *提供了一种通用的接口,可以用于许多不同的应用场景,减少了重复编写类型特定代码的需求。提高模块化:使得不同模块和系统之间的接口更加通用和抽象,简化了模块间的耦合。虽然void *提供了极大的灵活性,但也需要开发者注意类型安全问题。传递void *后,必须手动进行类型转换,并确保对其使用时的类型正确,否则可能会导致运行时错误。

2025-01-05 11:47:29 671

原创 示波器使用指南

直流耦合:传递信号的所有频率成分,包括直流和交流。交流耦合:仅传递交流信号,滤除直流成分。接地耦合:将输入端接地,显示零电平(仅用于参考或校准)。

2025-01-05 10:35:16 885

原创 如何提高自己的结构化思考问题的能力

提高结构化思考问题的能力是一项重要的技能,可以帮助你更清晰、高效地分析和解决问题。

2025-01-01 22:24:39 1431

原创 时序 | 通讯 | 技巧 | 中断干扰

平衡小车制作分享 - 软件篇

2025-01-01 21:40:20 233

STM32开发教程:Keil环境引入cJSON进行JSON解析

内容概要:本文档详细讲述了在 Keil 环境下为 STM32 工程添加并配置 cJSON,以实现在嵌入式项目中轻松地对 JSON 数据包进行解析的技术方法与操作步骤,并提供了一个基本的应用实例。 适用人群:熟悉 STM32 和 C 编程,具有一定嵌入式开发经验的开发者以及初学者。 使用场景及目标:适用于 IoT 设备开发过程中对云端通信、本地数据分析或者任意涉及 JSON 数据格式的场合下需要解析或生成 JSON 的 STM32 程序设计。 其他说明:本指南提供了从 cJSON 文件下载直至 STM32 中集成的所有具体步骤及示例代码,并针对一些常见问题给出了指导性的建议。

2024-10-16

C语言编程思想

设计模式

2017-05-14

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除