- 博客(39)
- 资源 (26)
- 收藏
- 关注
原创 PC U盘格式化与删除操作对 FatFS 的影响及同步机制
《FatFS文件系统在PC操作下的影响与恢复策略》摘要:本文分析了U盘在PC端操作对嵌入式FatFS文件系统的影响,包括格式化(快速/完全)和文件删除(普通/安全擦除)两种主要操作类型及其风险等级。通过对比关键数据结构变化,提出了嵌入式设备检测机制(物理介质变更检测和文件系统一致性检查)和自动恢复策略。文章详细介绍了格式化检测恢复流程和文件删除同步方案,并给出预防措施建议,包括硬件写保护机制实现和文件系统状态持久化方法。最后提供了C语言实现的关键代码片段,为嵌入式系统应对PC操作影响提供了完整解决方案。
2025-07-04 08:33:51
625
原创 FATFS CSV 文件异常修复方案
摘要:本文针对SPIFLASH结合FATFS时断电导致CSV文件异常的问题,提出了一种稳定可靠的解决方案。方案通过检查行长度、字段数量等规则定位异常行,并自动修复文件至最后有效位置。核心包括:1)CSV有效性检测函数;2)异常行修复机制;3)安全写入封装;4)上电自动检查流程。该方案仅使用标准FATFS接口,不影响文件系统结构,提供了CSV_SUCCESS/INVALID_FORMAT等明确状态码,建议根据实际需求调整行/列长度参数,并在关键操作后执行f_sync确保数据持久化。
2025-06-18 09:24:14
344
原创 基于裸机环境、完全静态内存分配的事件订阅机制实现示例
本文实现了一个基于静态内存分配的事件驱动按钮控制系统,包含五个模块:1) 事件定义模块规范事件类型和数据结构;2) 静态事件队列实现环形缓冲区管理;3) 订阅者管理模块采用静态数组存储4个订阅者;4) 硬件抽象层处理按钮中断和定时器事件;5) 应用层实现短按翻转LED、长按(>2秒)快速闪烁的功能。系统通过中断保护机制确保线程安全,采用零动态内存分配设计,支持最大16个事件和4个订阅者,展现了裸机环境下可靠的事件驱动架构实现方案。
2025-06-10 16:21:04
443
原创 多分辨率 LCD 的 GUI 架构设计与实现
本文提出了一套完整的嵌入式GUI系统解决方案,针对多分辨率LCD屏幕适配和单色/彩屏兼容性问题,设计了抽象显示层、相对布局系统和字体管理系统。通过统一的显示接口定义(display_abstraction.h)屏蔽硬件差异,采用百分比布局(layout_manager.h)实现界面自适应,并开发颜色抽象层(color_abstraction.h)处理单色/彩屏转换。系统包含240×160单色屏和320×480彩屏的驱动实现范例,通过GUI应用示例验证了方案的可行性。
2025-06-04 11:42:33
1046
原创 服务定位器模式在嵌入式系统中应用实现
本文介绍了一种嵌入式系统服务定位器模式的设计与实现。该系统提供了5个核心服务模块:时钟服务(管理时间和延时)、日志服务(分级日志输出)、通信服务(统一接口管理)、存储服务(非易失存储访问)和传感器服务(多类型传感器管理)。采用服务定位器模式,通过统一的服务ID定义和注册机制实现模块解耦。系统初始化时自动注册所有服务实例,应用程序通过service_get()接口获取服务,避免了直接依赖。该架构提高了代码复用性和可维护性,为嵌入式系统开发提供了清晰的服务管理方案。
2025-06-04 10:44:22
755
原创 本文展示了两种实现通信协议的方案:协程版本和基于OS的版本。 分别采用不同方式实现任务之间异步和同步操作实例
本文展示了两种实现通信协议的方案:协程版本和基于OS的版本。协程方案通过PT_THREAD实现非阻塞式串口通信,包含数据包收发、等待数据包和命令发送等功能,采用重试机制和超时控制。OS方案使用任务、信号量和消息队列构建状态机,包含初始化、任务调度、消息处理和中断服务程序,实现了带重试机制的可靠传输。两种方案都注重超时处理和错误恢复,协程方案更轻量级,OS方案则提供了更完善的资源管理机制。两种实现均支持重试机制和超时控制,确保通信可靠性
2025-05-28 17:26:17
512
原创 PT_THREAD 的嵌套协程示例
本文介绍了在资源受限的单片机系统中使用嵌套协程实现复杂任务的方法。通过将任务分解为主协程和子协程,实现结构化和非阻塞的任务管理。主协程控制整体流程,子协程处理特定功能(如文件下载和校验),各协程维护独立状态变量避免全局污染。示例代码展示了文件下载和校验的实现过程:下载协程分块获取数据并更新进度,校验协程计算CRC值进行验证,主协程协调这两个子协程的顺序执行。该方法提高了代码可读性和复用性,同时保持系统的响应能力,特别适合嵌入式开发场景。
2025-05-26 13:33:31
409
原创 在单片机裸机开发环境下实现组件化插件式架构是一种提高代码可维护性和扩展性的有效方法
在单片机裸机开发环境下实现组件化插件式架构是一种提高代码可维护性和扩展性的有效方法.高内聚低耦合:每个组件只关注自身功能,减少模块间依赖。可扩展性:新增功能时无需修改现有代码,只需添加新组件。可维护性:单个组件的修改不会影响其他模块。复用性:组件可以在不同项目中复用
2025-05-09 11:35:29
258
原创 在单片机编程中充分使用抽象工厂模式,确保对象创建的限制,多使用抽象接口避免多变具体实现类
在单片机编程中充分使用抽象工厂模式,确保对象创建的限制,多使用抽象接口避免多变具体实现类
2025-04-28 11:32:03
622
原创 架构整洁之道 心得
通常认为面向对象的核心是抽象,封装,继承,和多态,然而实际上这只是一些特点或者是技术特征,而真正的对象应该是以动态为技术手段来对源代码中的依赖关系进行控制的能力,这种能力让软件架构可以构建出插件式架构,让高层策略性组件与底层实现性组件相分离,底层组件可以被编译成插件,实现独立于高层组件的开发和部署。
2025-04-26 12:47:40
158
原创 SOLID 原则在单片机环境下的 C 语言实现示例,结合嵌入式开发常见场景进行详细说明
SOLID 原则在嵌入式中的价值,在单片机环境下具体应用场景使用说明
2025-04-25 14:30:13
745
原创 通过泛型化实现一个通用的 发送,接收判断,超时判断,重试次数一个通用处理以及解决方案;适配UART TCP IIC SPI 等等需要发送、接收判断,超时重试通用处理框架
通过泛型化实现一个通用的 发送,接收判断,超时判断,重试次数一个通用处理以及解决方案;适配UART TCP IIC SPI 等等需要发送、接收判断,超时重试通用处理框架
2025-04-21 19:25:21
777
原创 如何在实际项目中使用 Protothreads,轻量级线程在裸机编程中的 应用
PT_THREAD是一种用于实现轻量级线程(也称为协程)的宏,它在嵌入式系统和资源受限的环境中非常有用,能够以一种非阻塞的方式处理多个任务。PT_THREAD通常用于 Protothreads 库,该库允许在单线程环境下模拟多线程行为,避免了传统线程切换带来的开销。
2025-04-21 15:06:15
523
原创 按照三级缓存机制,在单片机中实现大文件10M级别以上文件读写、解析实现方法,基于LIBCSV库和fatfs进行实现
按照三级缓存机制,在单片机中实现大文件10M级别以上文件读写、解析实现方法,基于LIBCSV库和fatfs进行实现。当在裸机环境下实现SD卡或者U盘数据存储,在文件规模较大时,单片机自身资源的限制,其运行实时性和响应性将变得很重要。
2025-04-21 14:49:32
892
原创 将长循环任务拆分成多个小步骤,以非阻塞的方式执行,在裸机环境下的实现方法
Protothreads 是一种轻量级的协程实现,特别适合在资源受限的裸机环境中使用。它允许你将复杂的长循环任务拆分成多个小步骤,以非阻塞的方式执行,避免了传统长循环带来的阻塞问题。以下是一个使用 Protothreads 实现的通用处理函数示例。
2025-04-21 14:35:35
333
原创 基于C语言实现的观察者模式 以温度监控系统为例
/ 当前观察者数量。:当温度传感器检测到温度变化时,自动通知所有注册的显示器(如LCD、手机App)更新显示。:显示器(LCD显示器、手机App),订阅温度数据并在温度变化时更新显示。#define MAX_OBSERVERS 10 // 最大观察者数量。void *data;// 观察者私有数据(如显示器名称)// 观察者抽象接口(结构体 + 函数指针)// 温度传感器(主题)结构体。
2025-03-21 09:24:47
832
原创 断码屏通用显示框架,基于驱动,用户界面,参数管理,按键状态机等通用处理框架,采用面向对象技术,便于扩展,易于维护
断码屏通用显示框架,基于驱动,用户界面,参数管理,按键状态机等通用处理框架,采用面向对象技术,便于扩展,易于维护
2025-02-25 13:46:11
889
原创 光伏并离网储能一体机系统设计方案:全面资料与教程,详解软硬件设计与实施
光伏并离网储能一体机系统设计方案:全面资料与教程,详解软硬件设计与实施;软件DSP ARM 从DSP源代码全部开源产品级别开发板。
2024-07-21 13:46:16
369
原创 通过U盘 读去BIN文件进行校验写入到外部存储FLASH算法
/ 这里的变量名m_erase可能是个误导,因为它通常表示擦除操作,但这里用作读取操作的返回值。// 则需要计算从当前位置到文件末尾(减去校验和或尾部信息的长度)的数据的校验和。if(DataRemain < 1024) // 如果剩余要读取的字节数小于1024。if(m_erase) // 如果读取操作失败(假设m_erase非零表示失败)// 判断是否到了文件末尾附近的区域,这部分通常包含数据的校验和或尾部信息。// 计算读取到的数据的校验和。// 将读取到的数据写入外部flash。
2024-06-14 16:01:49
888
原创 单片机串口通过查询接收数据,同时具备接收超时、异常判断,常规通用处理算法实现
HAL_UART_Transmit函数用于将接收到的数据发送回去,在实际应用中,你可能需要将这些数据用于其他目的。如果接收到数据,它将返回1,并将接收到的数据存储到缓冲区中。另外,这段代码使用了HAL_GetTick()函数来获取当前的时间(以毫秒为单位),你需要确保你的系统中已经启动了HAL的滴答定时器。处理接收到的数据:如果接收到数据且未超时,则处理这些数据,比如存储到缓冲区或者进行进一步的处理。(5)清理和重置:在每次接收完成后,需要清理串口的状态,重置相关变量,以便进行下一次的接收。
2024-03-30 14:43:58
1327
原创 实现FLASH跨页写入,不采用先读取后写入的方式,提高内存利用率,从任意FLASH地址写入指定长度的 通用处理函数框架
实现FLASH跨页写入,不采用先读取后写入的方式,提高内存利用率,从任意FLASH地址写入指定长度的 通用处理函数框架
2024-03-27 15:45:53
1094
原创 EXCEL中利用VBA将16进制数据按照BIT进行解析,并按照BIT的数值分别显示不同的状态字符串
例如:在EXCEL中 用 VBA实现 一个16进制数据 按照BIT进行拆解,分成多列进行显示,BIT0=0 显示ON BIT0=1 OFF BIT 1= 1 显示欠压 ,BIT1=0显示正常。然后,它遍历这个范围中的每一个单元格,将16进制数转换为二进制字符串,并根据每一位的值在相应的列中显示状态。注意,这个脚本假设你最多有8位,并且根据你的描述为前两位设置了特定的状态显示。' 请注意,上面的Case是根据你的描述假设的,你可能需要调整它们以匹配你的实际需求。' ... 其他位的情况,你可以按照需要添加。
2024-03-27 09:11:47
1795
原创 以具体通信数据帧内容解析YMODEM协议的详细实现过程
一 、缘由 当前在查询或者检索下相关协议时,多偏重于描述性,本文通过实际案例和测试 详细接收一下 YMODEM协议的具体实现。发送端若无下一个文件传输则发送结束帧 01 00 FF。下位机 响应NAK 要求第二次确认 15。接收端 请求发送端开启下一个文件传输 C。接收端 响应 ACK 06。接收端响应ACK 06。上位机 发送EOT。
2024-03-26 10:04:06
1216
原创 串口接收无协议判断,在接收整包数据后再统一进行处理的软件算法实现框架。
在串口数据编程中,由于存在不同的协议,通常多采用状态机解决方案,但是不同帧格式不同,最好的方式是在接收时不进行协议和接收数据长度的判断,实现无协议接收,串口接收不定长数据,且没有特定的协议来标识数据包的开始和结束,通常需要定义一些规则或者条件来识别数据的完整性。常用的解决方式是假设数据在一段时间内没有新的字节接收就认为是完整的,或者可以设定一个特定的超时时间。2、基于STM32进行该编程模型的框架实现方案。
2024-03-24 13:40:29
875
1
原创 业务逻辑中针对if ---else或者 else if 等多层嵌套常用优化实现方法总结
业务逻辑中针对if ---else或者 else if 等多层嵌套常用优化实现方法;查找表(Lookup Table); 函数指针数组; 状态机; 策略模式。
2024-03-21 13:49:26
1741
1
原创 在STM32F103,RAM 64K的单片机上,利用fatfs文件系统,实现一个存储文件大小等于600K的CRC 文件校验,分块读取循环校验计算
(2)文件读取:由于单片机的RAM只有64KB,需要处理一个600KB的文件,因此不能直接一次性将整个文件加载到RAM中进行CRC计算。(4)合并CRC值:由于文件是分块读取的,因此需要一个方法来合并每个缓冲区的CRC值,以得到整个文件的CRC值。这通常涉及到在每次计算新缓冲区的CRC时,将之前的CRC值作为初始值传递给CRC计算函数。如果文件非常大,而且内存有限,可以将文件分成多个段,分别计算每段的CRC值,然后再将这些CRC值合并成一个最终的CRC值。// 计算当前块的CRC,并合并到总CRC中。
2024-03-19 17:21:29
1143
原创 LVGL多个控件共享一个共享一个事件回调函数实现方法
lv_label_set_text(lv_label_get_from_obj(obj), "下拉列表值改变");lv_label_set_text(lv_label_get_from_obj(obj), "按钮被点击");lv_label_set_text(lv_label_get_from_obj(obj), "标签被点击");/* 下拉列表的值改变 *//* 按钮被点击 *//* 标签被点击 *//* 创建4个下拉列表 *//* 创建10个标签 *//* 初始化LVGL *//* 创建3个按钮 */
2024-03-02 12:27:12
1503
1
原创 开源PLC系统解决方案,人机交互解决方案
模块化设计,汇集众多模块化设计,汇集众多功能,真实工业场景应用工业PLC主板功能,真实工业场景应用工业PLC主板 项目 式样 点数 备注 输入电源 AV220V±10% 1 用于电源检测 DC12V 2 直流电源输入 DC24V ...
2021-01-08 21:37:20
337
1
原创 可编程工控板 国产自主PLC PLC国产 分布式IO模块 开源PLC方案 定制PLC 仿西门子 仿三菱 定制化系统解决方案。美标、储能一体机ARM 、DSP、辅助DSP 源代码 系统解决方案
等全部标准化,只需要在对应的模块中进行配置既可以完成不同硬件驱动,无需做任何代码开发。接口允许系统开发工程师开发出各种现场应用程序,根据行业应用自行定义工艺包。注释详尽,编程规范,状态表,函数指针,状态机,泛型编程,表驱动法等高级。无需任何操作系统支持,就能够直接在。根据需要采用编译或解释方式执行。高级语言编写行业专用指令,对。单片机实现,成本较低廉。可自由定制:可扩展的。
2021-01-08 21:33:57
1060
2
原创 C语言实现的PLC软定时器 上升沿,下降沿判断算法及功能
一、序言 使用单片机开发开发过程控制中,经常会用到定时,变量上升沿动作,下降沿动作,在业余做了个单独工具处理模块二、C代码组成如下共有.h文件和.c文件组成。2.1 F00200_utils.h代码构成#ifndef __F00200_UTILS_H__#define __F00200_UTILS_H__#include "stm32f10x.h"#define P...
2020-01-10 16:01:54
8127
原创 无线远程监控用网关设计开发以及远程监控系统搭建
现场由与存在多种控制器,三菱,松下,西门子等PLC种类,协议不同,连接方式不同,有一些重要数据需要在断电时保持,在系统上电后将数据上传到数据中心。 各种PLC通信协议解析,三菱协议解析,松下协议解析,POFIBUS协议解析,自定义协议解析,MODBUS协议 以上协议软件驱动设计 5路串口通信设计 终端设备远程设定参数,设定参数写入、读取,保持
2016-03-13 20:20:01
695
原创 定时链表处理 程序 采用 链表结构 同时运行多个定时器 仿PLC定时器结构实现
定时链表:typedef void (* sys_timeout_handler)(void *arg);struct sys_timeo { struct sys_timeo *next; u32_t time; sys_timeout_handler h; void *arg;};//定时链表首部结构struct sys
2015-11-06 09:43:23
1093
原创 面向对象程序设计思想 在单片机中的应用
//将菜单的属性和操作封装在一起typedef struct tagSysMenu{ char *Text;//菜单文本 unsigned char xPos;//菜单在LCD上的X坐标 unsigned char yPos;//菜单在LCD上的Y坐标 void (*OnOkFun)();//在该菜单上按下OK按键 void (*O
2015-11-06 09:41:21
961
原创 函数指针模型与状态转换表
在工作中,经常使用一些列表操作,经过总结提炼,汇总了一下函数指针结合状态转换的通用编程模型。单片机状态机编程思想。在PLC固件开发中,通信协议,指令解析与处理,以及通用的AD处理程序大量使用了这种程序设计架构。现总结如下:1 查表 算法模型enum{ADD=0,SUB,MUL,DIV,};int FuncAdd(int i ,int j)
2015-11-05 15:51:30
1862
原创 模拟量信号滤波算法
模拟量信号滤波算法 收集的关于基础滤波算法:理论上讲单片机从A/D芯片上采集的信号就是需要的量化信号,但是由于存在电路的相互干扰、电源噪声干扰和电磁干扰,在A/D芯片的模拟输入信号上会叠加周期或者非周期的干扰信号,并会被附加到量化值中,给信号带来一定的恶化。考虑到数据采集的实时性和安全性,有时需要对采集的数据进行软处理,一尽量减小干扰信号的影响,这一过程称为数据
2015-11-05 15:49:20
13816
原创 按键通用程序处理模型
/****************************************************************************** 文件名: sysytick.c* 内容简述: 本模块实现3个按键的检测,具有滤波机制,支持按下,弹起和长按动作。* 通过GetKey()函数可以读取键值**//* Includes -----------
2015-11-05 15:48:02
790
色谱仪,光谱仪,X射线管,探测器DPP,频谱分析仪
2010-03-21
电力电子电路精讲,常用电力电子元器件,实用电路,功率驱动电路,开关电路,充电电路,加热与温度控制电路,电源变换电路,高频高压电路,输出可调电源电路,监控电路,保护电路,直流电源设计等电路
2009-10-30
gps显示仪,接受并显示8颗卫星的定位时间,使用AT89C51调试通过
2009-09-27
电子工程师常用资料包括常见的电气原理,国家标准,以及与工程算法相关的数学,矩阵论,概率,常见的复变函数与数理方程
2009-10-23
1单片机学习的源代码,主要与基础知识.AD.USB.PWM.LCD及串口通讯.rar
2009-09-28
20180612_RESU3.3_6.5_10_Matching test case guideline_V1.5.pdf
2024-05-24
RESU Smart Communication Specification_Rev1.4 - 副本.pdf
2024-05-24
基于国民技术芯片N452,实现SPI FLASH +FAL+FATFS+EASYFLASH+FLASHDB 移植OK
2024-03-18
UART_Demmo.rar 英飞凌 XMC四路串口并行通信 多路串口并行通信 基本例程
2021-12-01
BOOTLOADER N32G45x_FR_WB系列芯片IAP升级应用笔记_V1.0 XCOM 串口IAP升级C代码
2022-02-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人