自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

LinuxTaoist的博客

分享Linux驱动、C/C++开发学习经验。微信公众号"开源519",获取文章源码。

  • 博客(123)
  • 资源 (16)
  • 问答 (1)
  • 收藏
  • 关注

原创 握高效分支管理:从混乱到有序的蜕变之路

初期项目小,版本管理看似不重要,但随着迭代频繁和团队扩大,混乱的版本管理会直接拖慢交付节奏。业界有很多成熟的实践,但不同项目(如嵌入式、前端、后端)对分支、发布、协同的需求不同,应根据实际情况灵活调整,建立适合团队自身的版本管理规范。需要注意的是,分支不宜过多,否则会导致维护乏力,反而影响协作效率,这也是部分管理者不愿意多开分支的原因之一。建议长期保留主干master和开发分支dev,其他稳定版本同步至master,通过标签tag进行标记和管理。打标签并不只是形式,而是标记每一个功能稳定的版本。

2025-06-10 09:03:30 248

原创 利用堆栈打印快速定位程序崩溃

实现崩溃堆栈信息跟踪流程很简单:先捕获异常信号(如SIGSEGVSIGABRT等),然后在信号处理函数中打印堆栈信息即可。需要注意的是,C++接口存在名称修饰,故需要调用还原函数名。关于名称修饰,查了一下相关资料,描述如下:g++ 编译 C++ 代码:会进行名称修饰,需用 abi::__cxa_demangle 还原。g++ 编译 C 代码:若未使用 extern "C",会按 C++ 规则修饰函数名,导致链接错误;添加 extern "C" 后则不会修饰。

2025-05-11 20:41:04 415

原创 单例模式中的隐藏陷阱:你真的了解单例吗?

结合全文,crash的问题根源在于单例析构函数中调用其他单例对象的接口。进程退出阶段,全局单例对象的析构顺序未明确,可能导致调用了已释放的单例对象接口,引发crash。尽管可以通过控制单例调用的顺序来规避此类问题。但这种方式并非最优解,而且大型项目中难以实施。另外,程序健壮性不应依赖这种非确定性的语言特性,而应通过设计优化从根本上避免此类问题。最后,代码运行的行为和结果应是可预见的,不应依赖特殊操作或非确定性行为。若有此类依赖,应是程序设计缺陷,该加以优化。

2025-04-15 23:10:20 377

原创 # C/C++右移高位补0还是1?

C/C++右移高位补0还是1?[TOC]场景列举问题  先抛出代码,如下输出的结果应该是什么?int main(){ int16_t val1 = 0xF000; int16_t val2 = 0x7700; int16_t val3 = val1 >> 8 | val2; printf("val3 = %x", val3); return 0...

2025-02-23 20:41:44 353 1

原创 2个类轻松构建高效Socket通信库

2个类轻松构建高效Socket通信库引言  在接触Linux网络编程前,一直觉得网络编程充满了神秘与挑战,遥不可及。这种观念一度让我对网络编程望而却步。当项目需求迫使我直面这一领域,经过层层bug考验,发现网络编程的困难更多源于心理障碍而非技术本身。  在实际调试中,通过掌握TCP协议、socket接口、I/O复用和TCP抓包等技能,可以有效解决网络编程中的问题。许多看似难以解释的"灵异事件...

2024-12-15 17:04:25 959

原创 4步实现状态机驱动的MQTT客户端,快速接入OneNet (1)

4步实现状态机驱动的MQTT客户端,快速接入OneNet (1)[TOC]引言  开源项目 Sparrow 的基础框架搭建已接近完成,中间件的基础功能大多已经具备。为了验证该框架的实用性,在工程中引入了业务模块 OneNetMqtt。从模块命名可以推断其主要功能是通过 MQTT 协议连接 OneNet 平台。  最初接触 OneNet 还是在大学期间,当时的毕业设计基于 OneNet 实现...

2024-12-12 22:40:32 857

原创 7个设置/获取接口了解Linux时间管理

7个设置/获取接口了解Linux时间管理[TOC]引言  最近的项目开发中,频繁遇到了时间戳相关的问题,如时间回退至1970年、时区错误及时间同步不准确等。鉴于此前仅对时间接口的使用有所了解而未深入探究其原理,本篇文章进行一次系统性整理,以便后续参考。文章若存在一些错误,可在留言区明确指出。<span style="font-size: 12px;"><span sty...

2024-11-24 21:36:25 974

原创 4步实现C++插件化编程,轻松实现功能定制与扩展(2)

4步实现C++插件化编程,轻松实现功能定制与扩展(2)[TOC]引言  此文是对先前文章《4步实现C++插件化编程,轻松实现功能定制与扩展》 的延伸,重点记录在原版本基础上新增的插件热拔插功能。  起因源于读者的一个评论,如下:  看到这个问题时,当时的软件尚不具备“热拔插”功能。 但思考了一下,不支持“热拔插”的插件,应属于一种功能缺陷。于是乎,在原有的基础上增加了这一功能。...

2024-10-30 21:41:47 788

原创 【实战指南】从零构建嵌入式远程Shell,提升跨地域协作效率(2)

【实战指南】从零构建嵌入式远程Shell,提升跨地域协作效率(2)[TOC]引言  之前曾发布过一篇关于构建嵌入式远程Shell的文章,详细介绍了基础版本的实现方法,详见【实战指南】从零构建嵌入式远程Shell。然而,该版本在功能性和稳定性方面还有待提升。本文将在此基础上进行改进和优化,进一步完善远程Shell的功能。概述  本次改进主要集中在模块化设计与功能增强上。模块化方面,我们将系...

2024-10-15 07:29:57 1011

原创 4步实现C++插件化编程,轻松实现功能定制与扩展

4步实现C++插件化编程,轻松实现功能定制与扩展[TOC]引言  在项目开发中,我们经常面临为适应不同市场或产品层级而需调整功能的需求。从软件工程的角度来看,这意味着使用同一套代码,通过配置来实现产品的功能差异化。实现这一目标的方法多种多样,本文将探讨如何通过 插件化编程 优雅地满足这一需求。概述  插件化编程 是一种通过动态加载功能模块(即插件)来增强主程序功能的软件设计策略。通过制定...

2024-09-28 17:31:46 949

原创 【实战技巧】使用inotify实现实时文件监控

【实战技巧】使用inotify实现实时文件监控开篇  之前阅读《Linux系统编程》时,留意到了一个Linux原生接口inotify。它能够监控文件的移动、读取、写入和删除等操作。今天利用空闲时间,简单研究了一下如何使用这个接口,并在这里记录下来,方便将来需要查询和参考。概述  inotify 是 Linux 内核提供的一种文件系统事件监控机制,允许用户空间程序监视文件或目录的各种操作。...

2024-07-01 21:37:13 896

原创 C++ STL容器操作:6种常用场景算法

C++ STL容器操作:6种常用场景算法[TOC]引言  在日常软件开发工作中,容器操作如查找、排序、和元素替换等任务极为常见。幸运的是,C++的标准化利器——STL(Standard Template Library,标准模板库)为我们封装了一系列高效且灵活的算法,极大简化了这些操作。特别是自C++11版本以来,STL引入了一批新晋的通用算法,它们不仅功能强大,而且设计得更加人性化,旨在进...

2024-05-19 22:33:11 461

原创 实战Linux I/O多路复用:借助epoll,单线程高效管理10,000+并发连接

[TOC]引言  在应对高并发连接的传统策略中,普遍采取为每个连接配置单独线程或进程的直接方式,管理其I/O操作。此法虽直观易行,但随业务规模扩张,线程资源需求急剧上升。相反,Linux下的I/O多路复用技术,尤其是epoll,展示了一种高效路径:单一线程即可监控成千上万的文件描述符,极大提升了资源使用效率。  I/O 多路复用的场景有很多,也比较实用。通常用法epoll线程 + 线程/协程...

2024-05-10 06:01:50 1132

原创 嵌入式RPC框架设计实践:六大核心类构建高效RPC框架

[TOC]引言  在先前发布的文章中,我们构建了RPC底层数据传输的基础设计并实现了其功能(详尽代码与深入分析可参阅《实战高效RPC方案在嵌入式环境中的应用与揭秘》)。本文将继续以此为基础,探讨如何通过分层封装来提升RPC框架的易用性,旨在提供更便捷和正式的使用接口。概述  在之前的文章中,我们阐述了结合共享内存与环形缓冲区技术,设计并实现了一种创新的共享环形缓冲区机制,用以支持RPC进程...

2024-04-28 22:56:54 772

原创 Linux环境下的C/C++开发学习之旅

在当今软件开发领域,C和C++作为底层与系统级编程的重要语言,在Linux操作系统环境下具有极高的应用价值。在学习过程中,动手实现一些小型项目,如文件复制程序、简单的HTTP服务器、多线程并发任务调度器等,可以帮助你巩固所学知识,并对Linux环境下的C/C++开发有更深入的理解。:掌握Linux下的套接字编程,包括TCP/IP协议栈的理解,socket API的使用,以及并发服务器模型的设计。:C++引入了类、对象、继承、封装、多态等面向对象特性,这是C++区别于C的重要部分,需要深入理解和熟练运用。

2024-04-13 12:01:24 572

原创 轻松自研嵌入式日志框架,6大功能亮点一文读懂

日志框架作为一种普遍应用于软件开发领域的关键工具,已发展出众多成熟案例,诸如Android平台的logcatglogLog4cpp等。汲取这些成熟的框架的经验,本篇主要从需求分析、设计方案、实现细节和难点、测试、总结部分记录自研嵌入式框架的细节。对于项目来说,移植并使用像Android logcat这样的成熟日志框架至关重要,本文的实现正是以此为参考依据。虽然日志系统看似与实际功能模块无直接关联,但其重要性不可忽视;真正动手实现一套完善的日志系统,对个人技术水平的成长有着极大的提升。

2024-04-13 11:58:11 1398

原创 开源项目约束框架

制定明确的行为准则,鼓励积极正面、尊重他人的社区氛围,处理冲突和争议的指导方针。:详细介绍从fork项目到提交PR的完整步骤,以及合并前的准备事项。:介绍新成员如何克隆项目、设置开发环境、提交第一个PR等入门流程。:明确任务认领、进度汇报、代码评审和最终验收的工作流程。

2024-04-10 10:24:16 713

原创 记一次定位fd泄漏问题

在Linux中,给每个进程分配的资源是有限制的,为的是避免某个进程把Linux资源耗尽,导致其他进程异常。同样在开发中要时刻关注这些资源是否异常。进程打开的文件数量限制(ulimit -n):限制进程能够同时打开的文件数量,可以在/etc/security/limits.conf文件中设置。进程内存使用限制(ulimit -m):限制进程在虚拟内存中使用的最大字节数,可以在/etc/security/limits.conf文件中设置。

2024-03-26 08:10:11 502

原创 Linux系统编程 - 进程异常自动重启

在开发阶段,应优先查后台进程异常终止的原因。通常由系统配置生成coredump文件,配合gdb可以快速定位到crash代码行号。至于方案一偶尔收不到SIGCHLD,缩短处理函数的响应时间,排除信号处理函数不可重入因素,还是存在问题。网上查到的原因此信号不可靠,具体原因尚不清晰。经过此方案,在Linux系统部署用户进程时,加入此方案,能够避免进程异常导致的系统宕机等其他严重问题。

2024-03-26 08:06:49 1692

原创 用最小堆实现通用的高效定时器组件

对于定时器容器,本篇用到了STL接口的容器,通过重载Timer运算符,实现按照时间戳(mExpired)从小到大排序。将定时器任务抽象处三个类,各自负责自己的业务,逻辑上更加清晰明了。使用一个系统定时器资源,完成所有定时任务的响应。实现基础功能的同时,降低对系统定时资源的消耗。

2024-03-24 22:19:13 799

原创 《Effective Modren C++》 进阶学习(上)

在阻止类的某些特定成员函数被外部调用时,有两种常见的方法:使用private访问修饰符将其声明为私有,或者使用delete关键字将其声明为已删除。一般情况,优先考虑deletedelete明确表示该成员函数被删除或禁止使用。C++11中实现一个空类,编译器会自动声明六个函数:默认构造函数、析构函数、拷贝构造函数、拷贝赋值运算符、移动构造函数、移动赋值运算符。由于编译器会自动生成上述函数,导致即使不定义,第三方仍然可以调用编译器自动生成的这些函数,这不是期望的动作!若使用private。

2024-03-24 22:17:27 674

原创 快速上手:用二叉树实现高性能共享内存管理

使用二叉树管理共享内存优势很明显,搜索更快,封装出的共享内存接口使用也更简单。本代码还存在优化点,例如key值可以换成字符串;key属性也可以增加掉电存储、掉电不存储等属性。基于此代码,可以做一些项目上的通用功能,例如项目配置、进程间通信等功能。

2024-03-24 22:15:22 786

原创 实战高效RPC方案在嵌入式环境中的应用与揭秘

本文介绍了一种实用高效的RPC(远程过程调用)解决方案。传统的IPC机制在处理服务间的双向通信时存在挑战,比如无法很好地支持同步返回结果。于是,受Android Binder机制的启发,运用共享环形缓冲区,实现一套轻量化RPC框架。共享内存配合上数据结构,用起来还是挺高效和方便的。例如之前的《高性能共享内存》用的是二叉树和共享内存;这篇文章是环形缓冲区和共享内存。应该还有其他数据结构配合共享内存用于新的场景,等待学习。

2024-03-24 22:13:24 1367

原创 深入了解23种设计模式:程序员必读指南

为什么会有一系列设计模式的产生,而且还有23种?代码复用在软件开发过程中,经常会遇到相似的问题需要解决。

2024-03-22 07:47:01 685

原创 23种设计模式总览

深入了解23种设计模式:程序员必读指南引言  随着编码时间拉长,遇到的问题增加,发现设计模式对于解决某类场景问题确实帮助很大。其实在不了解设计模式,其设计思想也已经在日常开发中有所体现,只是没有总结出来。设计模式像是经验老道的程序员将他的编程经验毫无保留的开源,引导新手更好的处理某一类问题。  之前我发布了一系列关于设计模式的文章。通过总结这个系列,有助于以后回顾和修改。如果用C++来实现所...

2024-03-18 23:30:25 895

原创 快速上手:二叉树实现高性能共享内存

开篇  之前看过一段时间Android property源码,发现其中对共享内存的使用方式挺优秀,对于实际的工作开发也有借鉴意义。于是乎参考其设计思想,个人用C++也完成一篇共享内存的使用代码。共享内存的使用可参考进程间通信 共享内存, 本篇记录一种比较优雅的共享内存使用方式。常见的使用方案  在项目初期,由于需要存储的属性相对较少,对于共享内存的使用,没有很好的规划,常见的使用共享内存的方...

2023-10-22 21:47:29 101

原创 进程自动重启

Linux系统编程 - 进程异常自动重启开篇  在Linux平台,自研服务进程通常以守护进程的形式在后台常驻运行。但偶尔也会遇到服务进程异常crash,导致产品基本功能异常,影响恶劣。  解决这种问题,通常两种应对措施:  ① 定位crash原因,上传补救措施。  ② 后台重新拉起异常进程,避免影响基本功能。对于措施①,系统部署coredump文件,通过gdb解析coredump文件就...

2023-05-03 21:23:17 107

原创 C++11 智能指针

开篇  C/C++开发过程中,动态内存的管理通过new/delete完成。new在动态内存中为对象分配一块空间并返回一个指向该对象的指针;delete指向一个动态独享的指针,销毁对象,并释放与之关联的内存。在日常动态内存的使用中,经常会出现以下问题:申请动态内存后忘记释放,造成内存泄漏,长时间运行会导致内存耗尽;尚有指针引用动态内存的情况下就释放了它,造成引用非法内存指针,导致程序异常c...

2023-03-12 14:53:02 203

原创 网络编程 - Linux socket编程

前言  socket(套接字)是网络编程编程的一种技巧。通过socket不仅可以实现跨进程通信,还可以实现跨主机的网络通信。使用这种技术,就可以实现全国各地的通讯。例如:深圳的一台电脑接收来自北京一台电脑发来的信息。  本篇不涉及太底层的网络原理,仅说明socket的基本使用方法。主要参考《Linux网络编程》。Socket的功能  socket是通过标准的UNIX文件描述符和其他的程序通...

2023-01-02 20:41:19 771 2

原创 CMake搭建编译环境总结

前言  交叉编译算是每个嵌入式开发者都会经历的一道坎吧,通俗的描述就是搭建Arm板代码编译环境,让代码能够在Arm板子上跑起来。常用到的编译工具为Makefile和CMake,本篇记录下CMake的常用技巧。入门案例:单个源文件代码路径:https://gitee.com/LinuxTaoist/DesignMode/tree/master/FactoryMode工程结构. ├── C...

2022-11-21 22:08:50 1583

原创 C/C++ 枚举转字符串

枚举转字符串[TOC]1.开篇  在代码调试时,我们经常需要直观地定位当前枚举变量为哪个枚举常量。通常通过打印枚举值就可以确定,但是当枚举常量表过多时,就不那么直观了。本篇记录一种C/C++枚举变量转字符串的实用技巧。2.实现原理  在学习C语言宏的时候,有看到 “#” 在宏(#define)中有一些特殊的用法,这里先回顾一下:#: 预处理阶段,将宏参数转化为字符串##: 预处理阶...

2022-10-23 10:34:13 3771

原创 C++ lambda表达式

lambda表达式目录一、开篇二、lambda初识三、lambda基本用法四、lambda表达式捕获列表五、总结六、参考一、开篇  lambda表达式是C++11引进的一个新特性,其写法比较新颖,经常被一些"老鸟"用到C++的日常开发中,看的"菜鸟"一脸懵逼。  初看lambda表达式,语法怪异,感觉就是用来炫技的奇技淫巧。研究一番后,发现这语法"真香"!二、lambda...

2022-09-24 20:57:10 205

原创 C++并发编程 - 原子操作

所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch(切换到另一个线程)。 --百度百科  原子操作可以保证正在进行的动作不被打断,即一旦开始,持续结束。对比互斥锁其优势在于,原子操作在C/C++的层面,是无锁操作,其既能解决并发问题又不会导致死锁。原理  先说明一下,非原子操作。从开始执行到结束的过程中,可能会被...

2022-09-13 10:05:28 2689

原创 C++并发编程 - 同步并发操作

本文主要总结了同步并发常用的一些技巧,其中条件变量使用被广泛使用,而c++11新引进的相对来说很少被用到。

2022-08-27 19:00:15 615

原创 C++并发编程 - 线程管理

线程管理  多线程编程是开发中经常用的技术,多数情况下,我们只是知道怎么启线程、回收线程以及常规的一些用法,对于其具体技术细节以及还有哪些巧妙的用法并未挖掘。  本篇参考《C++并发编程实战》及其他优秀的博客,做一次对C++的线程管理的梳理,方便后续使用查阅。并发编程的方法  计算机领域的并发指的是在单个系统里同时执行多个独立的任务, 而非顺序的进行一些活动。通常并发方式有两种: 多进程和...

2022-08-07 21:49:58 179

原创 C++并发编程 - 互斥锁(lock_guard和unique_lock)

C++并发编程 - 互斥锁在多线程的编程中,共享数据的修改限制是必不可少的环节。期望的是:当一个线程访问共享数据期间,此数据不应该被其他线程修改;当某个线程修改了共享数据,应通知其他线程。例如,买车票场景: 座位为共享数据,每个用户属于一个访问共享数据的线程,当一个用户开始购买某个座位车票期间,该座位就应该禁止被其他用户购买。从而避免同一个座位同时被两个用户买到。通常情况下,解决类似并发问题...

2022-07-24 10:47:14 4578 2

原创 S21. 迭代器模式

迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。C++ STL中各个容器都有迭代器的体现,通过迭代器能够顺序的访问该容器各成员。意义有利于隐藏聚合类的内部实现,外部通过迭代器来实现对聚合类的顺序访问。场景实现聚合类的一种顺序访问。注: 对于开发者来讲,基本上不会实现一套迭代器。因为现存的标准库都有提供各种容器List、Array等,都有提供迭代...

2022-05-04 14:46:39 153

原创 S20. 模板方法模式

模板方法模板方法模式是一种行为设计模式, 它在超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。模板方法模式利用C++多态特征,在父类定义一套结构流程,其中通用部分在父类实现,子类继承父类实现差异性的接口。意义模板方法模式是比较实用的一种设计模式,将不变部分的流程和接口在父类实现,变化部分的接口预留出来交由子类实现。如此,有利于代码的复用性、可扩展性。应用...

2022-05-03 12:32:36 106

原创 S19. 访问者模式

访问者模式将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。简单的说,就是已经存在稳定的数据类。由于外部需求,需要访问特定的类成员。希望在不改变原数据类接口,仅通过增加外部模块实现需求。此模式,是行为模式中最复杂的一种模式。意义此模式主要用于在存在多个同类型的数据类情况下,统...

2022-05-02 14:15:40 149

原创 S18. 备忘录模式

备忘录模式在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。就是实际的回退功能,将不同时间段的各状态数据依次存储至列表。当需要回退时,从列表取出各状态值载入即可。该模式又叫快照模式。意义备忘录模式 有点类似后悔药的功能,软件回档和撤回的功能就是备忘录的体现。应用场景玩游戏时,人物的状态(等级和血量)是随时间和...

2022-05-01 10:04:09 165

EEPROM、EPROM、FLASH、SRAM、DRAM、SDRAM的区别

单片机常用的内存EEPROM、EPROM、FLASH、SRAM、DRAM、SDRAM的区别。单片机必学。

2019-04-03

SIM808连接外网服务器

stm32F103驱动SIM808,通过串口5发送指令成功实现了GPRS连接外网服务器,并成功发送数据。主要TCP透传协议。效率不太高,但是能够连接上,有借鉴意义。

2018-05-13

stm32f103串口空闲中断收发

为了解决stm32f103串口一次接收不定长度且没有结束标志的数据,选择空闲中断接收。经过修改,目前收发稳定,仅供参考。

2018-12-20

stm32f030c8t6串口空闲中断

主控stm32f030c8t6芯片,采用stm32CubeMX软件生成代码,由于没有串口空闲中断接收,经过编程已加上了这个功能,供嵌入式同行借鉴使用。

2018-12-19

stm32+Modbus从机读取

Modbus协议从机上传数据,主机发送Modbus指令给从机,从机上传。亲测可用!stm32单片机。

2018-07-14

串口屏动态实时显示时间

stm32F103开启内部RTC功能,将时间实时上传串口屏实现机屏同步功能。。。。主要是串口通讯,将单片机数据实时刷到串口。

2018-05-13

C++工厂模式源码及文档说明

C++简单工厂模式、工厂方法和抽象工厂模式源码,亲测可用。

2021-10-18

stm32虚拟串口实现

由stm32CubeMX生成代码工程,基于stm32f302单片机实现usb虚拟串口的功能。单片机可与PC通过USB直接通信。

2019-07-16

singlelist.c

本人自己写的单链表基本操作,包括增删改查等拓展功能。gcc编译器可过,其他编译器没有试过,代码易懂可借鉴。

2019-11-14

红外无线抢答器

STC89C51单片机开发的基于红外抢答器。解码分析锁定抢答选手。

2018-05-13

stm32f103+esp8266

本例程实现了stm32f103配置esp8266成功连接已存在热点,并能够实现与服务器的通信。

2018-05-25

dx_driver_test.zip

在写完安卓驱动后,为了方便测试其驱动的功能,可以像linux一样写一个C的测试文件,然后编译成可执行文件push到机器中执行。

2019-12-25

dnw驱动linux

基于JZ2440的win7 64位dnw驱动。打开dnw软件检测到硬件更新此驱动。。

2018-06-30

万能红外学习代码 单片机

51单片机红外学习代码,能学习美的格力空调并解码存储至EEProm中实现掉电存储功能。由于下载太多,导致积分过高。积分重新调到5。

2017-11-24

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

TA关注的人

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