- 博客(252)
- 资源 (8)
- 收藏
- 关注
原创 Day 2:C语言中的字符串结尾与缓冲区溢出
C语言字符串操作安全指南:C语言字符串以'\0'结尾,但标准库函数如strcpy/strcat不检查长度,易导致缓冲区溢出(严重安全漏洞)。常见陷阱包括字符串未正确结尾、拷贝超长内容等。安全建议:声明时预留'\0'空间、初始化数组、使用strncpy/strncat等安全函数、显式设置结尾、检查输入长度。示例对比展示不安全与安全代码的差异,强调手动管理边界的重要性。底层原理上,字符串遍历依赖\0终止,溢出可能破坏栈数据甚至被利用攻击。核心建议:操作字符串时始终考虑边界和结尾问题,优先使用安全函数。
2025-06-10 09:15:36
682
原创 Day 1:C语言中的野指针(Dangling Pointer)
野指针是C语言中最隐蔽的bug来源之一。它可以导致数据损坏、难以调试的崩溃、甚至安全漏洞。指针一定要初始化,资源释放后要置NULL,避免返回局部地址。养成良好的“指针管理”习惯,多用工具进行检测,写关键代码时反复review与测试。不要侥幸依赖“没出错就是对的”,因为野指针的危害往往是潜伏的。“每一次用到指针,都要问自己:‘它现在指向的内存是有效且可用的吗?’”公众号 | FunIO微信搜一搜 “funio”,发现更多精彩内容。个人博客 |
2025-06-10 09:12:26
214
原创 双路串口转百兆以太网模块的设计
CH9121是一款支持双路串口转百兆网络的透传芯片,具有两路独立串口和百兆网口特性。该芯片内置以太网MAC和PHY,兼容IEEE802.3协议,支持TCP/UDP四种工作模式,串口波特率最高达10Mbps。芯片设计简单,提供TSSOP20和LQFP64M封装,并可通过上位机软件配置参数。常见问题包括串口乱码(波特率或编码错误)和网络分包(可通过调整报文间隔时间解决)。适用于串口设备快速联网场景,性价比高。
2025-06-04 09:40:14
424
原创 Day 0:C语言中的数组越界访问
C语言数组越界是常见的编程陷阱,其本质是连续内存块的直接访问,编译器不进行下标检查。由于C追求高效而牺牲安全性,越界访问属于未定义行为,可能导致内存破坏、程序崩溃或安全漏洞。规避方法包括:严格检查下标合法性、封装数组操作、使用sizeof计算长度、优先选用安全库函数。图示展示了越界访问未定义内存区域的情形。建议开发者养成边界检查习惯,使用工具检测越界问题,并牢记"任何数组访问都要明确边界"的原则。通过封装和自动化检查,可显著提升代码健壮性。
2025-06-04 09:36:15
346
原创 深入理解 ARM Serial Wire Debug (SWD) 协议
SWD 是 ARM 为替代传统 4 线 JTAG 所开发的两线制同步串行调试协议。引脚极少:仅需 SWDIO(数据线,双向)和 SWCLK(时钟线,单向)。速度高效:支持高达 50 MHz 的时钟频率。布线简单:极大方便小型封装和高密度 PCB 设计。主机主导:所有通信均由调试主机发起,实现无歧义主从关系。物理连接推荐SWDIO/SWCLK 各串 10kΩ 上拉电阻并对地 33pF 滤波电容。信号线尽量短(<15cm),与地线分组走双绞线,提升抗干扰性。
2025-05-23 10:00:49
857
原创 SWD接口详解:原理、连接与应用
SWD(Serial Wire Debug)是ARM Cortex-M系列微控制器中广泛使用的两线制调试接口,因其引脚简单、传输高效而受到青睐。本文详细介绍了SWD的工作原理、物理连接及实际应用。SWD仅需两根信号线(SWDIO和SWCLK),通过请求、响应、数据传输和校验四个阶段完成通信。与JTAG相比,SWD引脚更少、协议更简单,但传输效率相当。SWD常用于芯片调试、固件烧录和芯片解锁等场景。文章还通过Mermaid和SVG图表直观展示了SWD的连接方式和通信流程,并解答了常见问题,帮助开发者更好地理解
2025-05-23 09:59:55
928
原创 液晶屏逻辑板编程工具
名称:T-Con(Timing Controller,时序控制板),又称逻辑板、主板驱动板。功能接收来自主板(Main Board)的LVDS或eDP信号,将其转换为驱动液晶面板所需的时序信号(STH/STV、CKV/CKH等)。控制液晶分子的偏转角度,实现图像灰度显示。管理伽马电压(Gamma Voltage)和VCOM电压,确保色彩和对比度准确。
2025-05-15 09:54:31
616
原创 螺旋Pi代码
gpt-4o支持图片生成后,凑热闹试了下,个人感觉效果确实很OK,之前用mj或sd生成的图片,可能是不会提示词的原因,总感觉风格怪怪的,指令跟随不太好。微信搜一搜 “funio”,发现更多精彩内容。公众号 | FunIO。
2025-05-15 09:53:42
158
原创 CH347 USB2UART/SPI/I2C/GPIO/JTAG更新
CH347F #硬件开发 #嵌入式开发 #Python #Rust #开发工具。USB串口芯片很多,但支持高速USB、波特率能干到9M的可不多见。微信搜一搜 “funio”,发现更多精彩内容。公众号 | FunIO。
2025-04-01 09:56:34
467
原创 PCB设计错误案例
前几天我想做个烧写程序的探针,类似下面这样:这种探针有些是用塑胶件固定探针,比如亚克力钻孔;但是上图中这个看着应该是用PCB固定的,我决定也用PCB试试。
2025-04-01 09:55:27
372
原创 合并HEX文件
合并Intel HEX文件是嵌入式系统开发中的常见任务。通过理解HEX文件格式和合并逻辑,可以轻松实现HEX文件的合并。本文提供了一个基于Rust的简单实现,并讨论了处理复杂场景的方法。希望本文能帮助你更好地理解和处理HEX文件!rust库中有一个crate,用于开发中的合并情形基本够用,ihex-merge。这是个命令行工具,编译后只有 ~700KB,可以直接使用。注意,这个工具不支持段冲突的合并。后台回复ihex可以获取Windows二进制文件。公众号 | FunIO。
2025-03-11 10:36:14
932
原创 深入解析Intel HEX文件格式
Intel HEX文件格式是一种将二进制数据转换为ASCII文本的格式,适用于8位、16位和32位微处理器。它的主要优点是可以将二进制数据存储在非二进制介质(如纸带、穿孔卡片)上,并且可以通过CRT终端或行式打印机显示。ASCII表示:每个字节的二进制值被转换为两个ASCII字符。例如,二进制值00111111(十六进制3F)被表示为ASCII字符'3'和'F'。记录结构:HEX文件由多个记录组成,每个记录包含记录类型、长度、地址、数据和校验和。
2025-03-11 10:35:12
1406
原创 嵌入式系统中的状态机模式
并发模式主要关注如何管理多个任务的并行执行,旨在提高系统的响应速度和资源利用率。线程池模式(Thread Pool Pattern)互斥锁模式(Mutex Pattern)生产者-消费者模式(Producer-Consumer Pattern)信号量模式(Semaphore Pattern)这些模式通过不同的方式组织任务的并行执行,解决了嵌入式系统中常见的资源竞争、任务调度等问题。线程池模式通过创建和管理一组线程来执行任务,避免了频繁创建和销毁线程的开销。线程池模式可以提高系统的性能和资源利用率。
2025-03-04 09:40:15
603
原创 嵌入式系统中的并发模式
并发模式主要关注如何管理多个任务的并行执行,旨在提高系统的响应速度和资源利用率。线程池模式(Thread Pool Pattern)互斥锁模式(Mutex Pattern)生产者-消费者模式(Producer-Consumer Pattern)信号量模式(Semaphore Pattern)这些模式通过不同的方式组织任务的并行执行,解决了嵌入式系统中常见的资源竞争、任务调度等问题。线程池模式通过创建和管理一组线程来执行任务,避免了频繁创建和销毁线程的开销。线程池模式可以提高系统的性能和资源利用率。
2025-03-04 09:39:09
761
原创 嵌入式软件开发中的行为型模式
行为型模式主要关注对象之间的通信和职责分配,旨在提高系统的灵活性和可维护性。策略模式(Strategy Pattern)观察者模式(Observer Pattern)命令模式(Command Pattern)状态模式(State Pattern)责任链模式(Chain of Responsibility Pattern)这些模式通过不同的方式组织对象之间的交互,解决了嵌入式系统中常见的控制流复杂、代码耦合度高等问题。策略模式定义了一系列算法,并将每个算法封装起来,使它们可以互换。
2025-01-21 10:00:36
956
原创 敏捷在嵌入式软件开发中的应用
以上案例和描述表明,敏捷方法可以在嵌入式软件开发中取得成功。关键在于根据具体的项目特点和约束条件,选择合适的敏捷实践和工具,并结合嵌入式开发的特点进行调整。例如,需要更加重视硬件集成和测试、安全性、可靠性和实时性等方面。虽然公开的详细案例不多,但越来越多的公司开始尝试将敏捷方法应用到嵌入式软件开发中,并取得了积极的效果。随着相关技术和工具的不断发展,相信敏捷在嵌入式领域将会得到更广泛的应用。
2025-01-21 09:59:12
1019
原创 嵌入式系统软件设计模式:结构型模式
在嵌入式软件设计中,结构型模式扮演着至关重要的角色,它主要描述的是如何将类或对象按特定的布局组成更大的结构,以此来满足复杂的软件设计需求。简单来说,就是如同搭建积木一般,把不同的类或者对象当作积木块,按照一定的规则和方式组合在一起,构建出功能更强大、结构更完善的软件架构。这些模式可以帮助开发者更好地组织代码,提高软件的可维护性、可扩展性以及复用性。
2025-01-14 10:00:08
1148
原创 嵌入式软件开发:原型模式和建造者模式
原型模式是一种创建型设计模式,它通过复制现有对象来创建新对象,而不是通过实例化类来创建对象。原型模式适用于创建对象成本较高或复杂的场景,通过复制现有对象可以提高效率。建造者模式是一种创建型设计模式,它通过一步一步地构建复杂对象,将对象的构建过程与表示分离。建造者模式适用于创建复杂对象的场景,通过将对象的构建过程封装在建造者类中,可以更灵活地创建对象。原型模式和建造者模式在嵌入式软件开发中有着广泛的应用。原型模式通过复制现有对象来创建新对象,适用于创建对象成本较高或复杂的场景。
2025-01-14 09:59:13
588
原创 我的创作纪念日
其次,我在平台上结识了许多志同道合的领域同行,我们互相交流技术心得,分享项目经验,共同探讨行业发展趋势。通过与他们的交流,我拓宽了视野,也获得了许多新的灵感和思路,使我在技术上不断成长和进步。我相信,通过不断的努力和坚持,我能够在技术创作的道路上走得更远,为技术社区做出更大的贡献。同时,我也计划学习更多的相关技术,如物联网、人工智能等,拓宽自己的技术边界,为未来的职业发展打下坚实的基础。
2025-01-09 09:54:27
435
原创 嵌入式系统软件开发:工厂模式的应用与分析
简单工厂模式:通过一个工厂类来创建不同类型的对象。工厂方法模式:定义一个用于创建对象的接口,但由子类决定实例化哪个类。抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。这些模式在嵌入式软件开发中非常有用,可以帮助我们创建不同类型的对象,减少代码耦合,提高代码的可维护性和扩展性。公众号 | FunIO微信搜一搜 “funio”,发现更多精彩内容。个人博客 |
2025-01-06 10:57:27
816
原创 嵌入式系统软件开发:单例模式的应用与分析
在嵌入式系统中,单例模式广泛应用于资源管理、配置管理和通信管理等场景。通过单例模式,可以确保系统中只有一个实例来管理共享资源,避免资源冲突和配置不一致的问题。资源独占:确保共享资源(如GPIO、定时器、串口、I2C等)只有一个实例来管理,避免资源冲突。配置一致性:确保系统配置的一致性,避免多任务环境中的配置冲突。数据一致性:确保数据传输和通信的顺序和一致性,避免数据混乱。性能优化:减少内存开销和资源竞争,提高系统性能。通过合理应用单例模式,开发者可以构建出更加高效、可靠和易于维护的嵌入式系统。
2025-01-06 10:56:25
928
原创 嵌入式系统软件设计模式:创建型模式
设计模式是嵌入式系统开发中不可或缺的一部分,它们帮助开发者们在有限的资源下,实现高效的系统设计。希望通过本文系列,能够帮助开发者们更好地理解和应用这些模式,从而构建出更加高效、可靠的嵌入式应用。在下一篇文章中,我们将深入探讨创建型模式在嵌入式系统中的应用,敬请期待!公众号 | FunIO微信搜一搜 “funio”,发现更多精彩内容。个人博客 |
2024-12-31 09:45:10
1037
原创 嵌入式系统设计模式:构建高效、可靠的嵌入式应用
设计模式是嵌入式系统开发中不可或缺的一部分,它们帮助开发者们在有限的资源下,实现高效的系统设计。希望通过本文系列,能够帮助开发者们更好地理解和应用这些模式,从而构建出更加高效、可靠的嵌入式应用。在下一篇文章中,我们将深入探讨创建型模式在嵌入式系统中的应用,敬请期待!公众号 | FunIO微信搜一搜 “funio”,发现更多精彩内容。个人博客 |
2024-12-31 09:43:55
1203
原创 通过手机WiFi或者数据线利用网络共享来实现局域网内设备上网
上面这些方法在出差调试设备的时候很实用。这些都是我在出差设备调试时候踩过的坑。公众号 | FunIO微信搜一搜 “funio”,发现更多精彩内容。个人博客 |
2024-12-25 10:04:46
2775
原创 原创力不足与能用就行
举个不太恰当的例子,别的行业不太了解,以电子行业为例,我目光所及,我们这代所谓工程师的基本功,远不及以前那些用电子管晶体管做电路的老师傅,但是产值却可能高出数倍,这里面的水分到底是怎么来的。这样的教学方式,不仅让学生对仿真软件产生了依赖性,而且也让学生对电路的原理产生了模糊性,只大致记得仿真结果。其实一个简单的电路仿真引擎在现在的计算机上不难实现,老师多花一点时间,把这里的原理讲清楚,再让学生自己实现一个简单的仿真引擎,对学生的学习有很大的帮助,对学生一定会有很大的启发。公众号 | FunIO。
2024-12-25 10:03:50
167
原创 AI 辅助编程:现状与未来
Kabir et al, CHI’24] 的研究发现,ChatGPT 生成的代码中有 52% 包含错误信息,25% 的代码是错误的。[Perry et al, CCS’23] 的研究表明,使用 AI 辅助工具的程序员生成的代码安全性较低,并且他们更倾向于相信 AI 生成的代码是安全的。未来的研究方向包括通过实时编程、现场解释和探索建议空间等方法来提高 AI 辅助工具的可用性和程序员的编程体验。通过这些研究和工具的不断发展,AI 辅助编程的未来将更加智能化和人性化,帮助程序员更高效地完成任务。
2024-12-24 09:57:14
1595
原创 开发者应该如何押注技术栈
技术发展日新月异,技术栈的选择往往决定了项目的成败。随着技术的不断演进,新框架、新工具层出不穷,开发者该如何在这片汪洋大海中选择合适的技术栈呢?本文将分享一些关于如何押注技术栈的经验和最佳实践,以帮助开发者在技术决策中更加明智。
2024-12-24 09:56:28
343
原创 利用飞书实现物料管理
飞书作为一款集成了办公协作、知识管理、项目管理等功能的工具,可以帮助企业实现物料管理的全流程数字化。飞书文档可以创建格式丰富的文档,包括文字、图片、表格等。我们可以利用飞书文档来记录物料的详细信息,例如物料名称、规格、批次、供应商等。这个脚本主要用于批量生成文档和对应的二维码,并将它们组织在Word文档中,同时在飞书多维表格中保存相关信息。之所以在保存在word中,是为了使用普通打印机打印,这样可以批量生成二维码,然后打印在A4贴纸上,贴在物料上,这样就可以实现物料的追踪和管理。公众号 | FunIO。
2024-12-16 09:54:36
1383
原创 有效学习:形成知识的二十条规则
这里又是制定知识的二十条规则。您会注意到前 16 条规则围绕着让回忆变得简单!一些规则非常重叠。Avoid setsPrioritize公众号 | FunIO微信搜一搜 “funio”,发现更多精彩内容。个人博客 |
2024-12-16 09:53:31
904
原创 数字万用表能测自身电池的电压吗
各位伟大工程师想想,再实践一下,bingbing~更加伟大!就这样量一下,对吗?若你实践了,那恭喜你大概率会得到一块新的万用表(自己买块新的)。
2024-12-12 09:45:04
1186
原创 分享一个Gerber工具
这个项目是几年前的,提供了一套操作Gerber文件的小工具,非常小巧好用,可以用来查看Gerber文件,也可以用来编辑Gerber文件,最近没有更新了。仓库地址👉 https://github.com/ThisIsNotRocketScience/GerberTools这个工具是用C#写的,我用的时候是在Windows上,不过作者说可以在Linux上用Mono运行,我没有试过。Help在电子设计自动化(EDA)领域,Gerber格式是用于描述印刷电路板(PCB)设计的行业标准。
2024-12-12 09:44:09
1794
原创 RUST编写CH347命令行工具
这几天在学习rust,就想着用rust写一个命令行工具,用来操作CH347芯片。之前已经用python实现了ch347的spi、iic通信接口,相比之下,rust链接c库的方式更加简单,所以就用rust来实现这个工具。这个版本只实现了单一通道进行测试,在Windows10上,频率到1kHz,频率波动就很大了,实测在600Hz到750Hz之间,占空比相对来说误差还不算大。在python版中,没有将gpio和jtag功能封装,这次用rust实现时优先搞了这两个功能。公众号 | FunIO。
2024-12-05 09:56:53
574
原创 Rust 中的基本数据类型详解
标量类型(Scalar Types):表示单个值。复合类型(Compound Types):表示多个值的组合。在本文中,我们详细介绍了 Rust 中的基本数据类型,包括标量类型和复合类型。理解这些基础知识对于进行 Rust 编程至关重要。Rust 的类型系统不仅提供了强大的功能,还有助于提高代码的安全性和可读性。希望这篇文章能帮助你更好地理解 Rust 中的数据类型!如有任何问题或建议,欢迎在评论区讨论。公众号 | FunIO微信搜一搜 “funio”,发现更多精彩内容。个人博客 |
2024-12-05 09:55:59
660
原创 Pixi: 跨平台的包管理和环境管理工具
不同的项目可能需要不同版本的库和工具,而在团队协作中保持一致的开发环境更是至关重要。Pixi 应运而生,旨在解决这些问题,为开发者提供一个强大而灵活的包管理和环境管理解决方案。Pixi 是一个强大而灵活的工具,可以显著简化项目依赖和环境管理。无论你是单独开发还是在团队中协作,Pixi 都能帮助你维护一个一致、可重现的开发环境。它的目标是简化项目依赖的管理,并提供一致的开发环境。通过使用 Pixi,你可以专注于编码和创新,而不必担心环境配置和依赖管理的复杂性。公众号 | FunIO。
2024-12-02 10:31:54
1058
原创 Embassy: 革新嵌入式Rust开发的异步框架
Embassy是一个为嵌入式系统设计的异步Rust执行时和HAL(硬件抽象层)框架。提供零成本的异步抽象支持多种微控制器平台实现高效的资源利用简化嵌入式应用程序的开发Embassy的核心思想是将嵌入式开发中的各种操作(如I/O、定时器等)抽象为异步任务,并通过高效的调度器来管理这些任务。
2024-12-02 10:30:29
1577
原创 ESP32 Rust开发环境搭建指南
ESP32是一款功能强大的微控制器,而Rust作为一种安全、并发的系统编程语言,越来越受到嵌入式开发者的青睐。本文将详细介绍如何搭建ESP32的Rust开发环境,让你能够使用Rust语言开发ESP32项目。
2024-11-19 10:06:36
1664
原创 深入了解 Nuitka:Python 编译器的革命性工具
Nuitka 为 Python 开发者提供了一种有效的方式来提高代码性能,生成可执行文件并增强代码安全性。通过将 Python 代码编译为 C++,Nuitka 不仅提高了执行速度,还保持了与 CPython 的兼容性。希望本文能够帮助你更好地理解 Nuitka,并激励你在项目中尝试使用这一强大的工具。解析:Nuitka 首先解析 Python 源代码,构建抽象语法树(AST)。转换为中间表示:将 AST 转换为中间表示,这个表示形式更接近于机器语言。
2024-11-19 10:02:10
1048
原创 使用牛顿法求解立方根
牛顿法基于泰勒级数展开,通过迭代的方法逐步逼近函数的根。对于一个函数fxf(x)fx,假设我们已经有了一个初始猜测x0x_0x0xn1xn−fxnf′xnxn1xn−f′xnfxn这里,f′xf'(x)f′x是函数fxf(x)fx的导数。我们想要找出一个数aaa的立方根a33afxx3−a0fxx3−a0f′x3x2f′x3x。
2024-11-13 09:57:03
822
原创 晶振详解:从原理到应用
晶振,即石英晶体振荡器,是利用石英晶体的压电效应制成的一种谐振器件。它通过机械共振产生具有精确频率的电信号,广泛用于时钟电路、微处理器和其他需要稳定频率信号的电子设备中。
2024-11-13 09:44:05
2638
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人