
MCU
文章平均质量分 87
嵌入式MCU开发
boringhex.top
这个作者很懒,什么都没留下…
展开
-
合并HEX文件
合并Intel HEX文件是嵌入式系统开发中的常见任务。通过理解HEX文件格式和合并逻辑,可以轻松实现HEX文件的合并。本文提供了一个基于Rust的简单实现,并讨论了处理复杂场景的方法。希望本文能帮助你更好地理解和处理HEX文件!rust库中有一个crate,用于开发中的合并情形基本够用,ihex-merge。这是个命令行工具,编译后只有 ~700KB,可以直接使用。注意,这个工具不支持段冲突的合并。后台回复ihex可以获取Windows二进制文件。公众号 | FunIO。原创 2025-03-11 10:36:14 · 768 阅读 · 0 评论 -
深入解析Intel HEX文件格式
Intel HEX文件格式是一种将二进制数据转换为ASCII文本的格式,适用于8位、16位和32位微处理器。它的主要优点是可以将二进制数据存储在非二进制介质(如纸带、穿孔卡片)上,并且可以通过CRT终端或行式打印机显示。ASCII表示:每个字节的二进制值被转换为两个ASCII字符。例如,二进制值00111111(十六进制3F)被表示为ASCII字符'3'和'F'。记录结构:HEX文件由多个记录组成,每个记录包含记录类型、长度、地址、数据和校验和。原创 2025-03-11 10:35:12 · 1022 阅读 · 0 评论 -
嵌入式系统中的状态机模式
并发模式主要关注如何管理多个任务的并行执行,旨在提高系统的响应速度和资源利用率。线程池模式(Thread Pool Pattern)互斥锁模式(Mutex Pattern)生产者-消费者模式(Producer-Consumer Pattern)信号量模式(Semaphore Pattern)这些模式通过不同的方式组织任务的并行执行,解决了嵌入式系统中常见的资源竞争、任务调度等问题。线程池模式通过创建和管理一组线程来执行任务,避免了频繁创建和销毁线程的开销。线程池模式可以提高系统的性能和资源利用率。原创 2025-03-04 09:40:15 · 406 阅读 · 0 评论 -
嵌入式系统中的并发模式
并发模式主要关注如何管理多个任务的并行执行,旨在提高系统的响应速度和资源利用率。线程池模式(Thread Pool Pattern)互斥锁模式(Mutex Pattern)生产者-消费者模式(Producer-Consumer Pattern)信号量模式(Semaphore Pattern)这些模式通过不同的方式组织任务的并行执行,解决了嵌入式系统中常见的资源竞争、任务调度等问题。线程池模式通过创建和管理一组线程来执行任务,避免了频繁创建和销毁线程的开销。线程池模式可以提高系统的性能和资源利用率。原创 2025-03-04 09:39:09 · 728 阅读 · 0 评论 -
嵌入式软件开发中的行为型模式
行为型模式主要关注对象之间的通信和职责分配,旨在提高系统的灵活性和可维护性。策略模式(Strategy Pattern)观察者模式(Observer Pattern)命令模式(Command Pattern)状态模式(State Pattern)责任链模式(Chain of Responsibility Pattern)这些模式通过不同的方式组织对象之间的交互,解决了嵌入式系统中常见的控制流复杂、代码耦合度高等问题。策略模式定义了一系列算法,并将每个算法封装起来,使它们可以互换。原创 2025-01-21 10:00:36 · 922 阅读 · 0 评论 -
敏捷在嵌入式软件开发中的应用
以上案例和描述表明,敏捷方法可以在嵌入式软件开发中取得成功。关键在于根据具体的项目特点和约束条件,选择合适的敏捷实践和工具,并结合嵌入式开发的特点进行调整。例如,需要更加重视硬件集成和测试、安全性、可靠性和实时性等方面。虽然公开的详细案例不多,但越来越多的公司开始尝试将敏捷方法应用到嵌入式软件开发中,并取得了积极的效果。随着相关技术和工具的不断发展,相信敏捷在嵌入式领域将会得到更广泛的应用。原创 2025-01-21 09:59:12 · 957 阅读 · 0 评论 -
嵌入式系统软件设计模式:结构型模式
在嵌入式软件设计中,结构型模式扮演着至关重要的角色,它主要描述的是如何将类或对象按特定的布局组成更大的结构,以此来满足复杂的软件设计需求。简单来说,就是如同搭建积木一般,把不同的类或者对象当作积木块,按照一定的规则和方式组合在一起,构建出功能更强大、结构更完善的软件架构。这些模式可以帮助开发者更好地组织代码,提高软件的可维护性、可扩展性以及复用性。原创 2025-01-14 10:00:08 · 1067 阅读 · 0 评论 -
嵌入式软件开发:原型模式和建造者模式
原型模式是一种创建型设计模式,它通过复制现有对象来创建新对象,而不是通过实例化类来创建对象。原型模式适用于创建对象成本较高或复杂的场景,通过复制现有对象可以提高效率。建造者模式是一种创建型设计模式,它通过一步一步地构建复杂对象,将对象的构建过程与表示分离。建造者模式适用于创建复杂对象的场景,通过将对象的构建过程封装在建造者类中,可以更灵活地创建对象。原型模式和建造者模式在嵌入式软件开发中有着广泛的应用。原型模式通过复制现有对象来创建新对象,适用于创建对象成本较高或复杂的场景。原创 2025-01-14 09:59:13 · 568 阅读 · 0 评论 -
嵌入式系统软件开发:工厂模式的应用与分析
简单工厂模式:通过一个工厂类来创建不同类型的对象。工厂方法模式:定义一个用于创建对象的接口,但由子类决定实例化哪个类。抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。这些模式在嵌入式软件开发中非常有用,可以帮助我们创建不同类型的对象,减少代码耦合,提高代码的可维护性和扩展性。公众号 | FunIO微信搜一搜 “funio”,发现更多精彩内容。个人博客 |原创 2025-01-06 10:57:27 · 770 阅读 · 0 评论 -
嵌入式系统软件开发:单例模式的应用与分析
在嵌入式系统中,单例模式广泛应用于资源管理、配置管理和通信管理等场景。通过单例模式,可以确保系统中只有一个实例来管理共享资源,避免资源冲突和配置不一致的问题。资源独占:确保共享资源(如GPIO、定时器、串口、I2C等)只有一个实例来管理,避免资源冲突。配置一致性:确保系统配置的一致性,避免多任务环境中的配置冲突。数据一致性:确保数据传输和通信的顺序和一致性,避免数据混乱。性能优化:减少内存开销和资源竞争,提高系统性能。通过合理应用单例模式,开发者可以构建出更加高效、可靠和易于维护的嵌入式系统。原创 2025-01-06 10:56:25 · 881 阅读 · 0 评论 -
嵌入式系统软件设计模式:创建型模式
设计模式是嵌入式系统开发中不可或缺的一部分,它们帮助开发者们在有限的资源下,实现高效的系统设计。希望通过本文系列,能够帮助开发者们更好地理解和应用这些模式,从而构建出更加高效、可靠的嵌入式应用。在下一篇文章中,我们将深入探讨创建型模式在嵌入式系统中的应用,敬请期待!公众号 | FunIO微信搜一搜 “funio”,发现更多精彩内容。个人博客 |原创 2024-12-31 09:45:10 · 986 阅读 · 0 评论 -
嵌入式系统设计模式:构建高效、可靠的嵌入式应用
设计模式是嵌入式系统开发中不可或缺的一部分,它们帮助开发者们在有限的资源下,实现高效的系统设计。希望通过本文系列,能够帮助开发者们更好地理解和应用这些模式,从而构建出更加高效、可靠的嵌入式应用。在下一篇文章中,我们将深入探讨创建型模式在嵌入式系统中的应用,敬请期待!公众号 | FunIO微信搜一搜 “funio”,发现更多精彩内容。个人博客 |原创 2024-12-31 09:43:55 · 1021 阅读 · 0 评论 -
Embassy: 革新嵌入式Rust开发的异步框架
Embassy是一个为嵌入式系统设计的异步Rust执行时和HAL(硬件抽象层)框架。提供零成本的异步抽象支持多种微控制器平台实现高效的资源利用简化嵌入式应用程序的开发Embassy的核心思想是将嵌入式开发中的各种操作(如I/O、定时器等)抽象为异步任务,并通过高效的调度器来管理这些任务。原创 2024-12-02 10:30:29 · 1391 阅读 · 0 评论 -
ESP32 Rust开发环境搭建指南
ESP32是一款功能强大的微控制器,而Rust作为一种安全、并发的系统编程语言,越来越受到嵌入式开发者的青睐。本文将详细介绍如何搭建ESP32的Rust开发环境,让你能够使用Rust语言开发ESP32项目。原创 2024-11-19 10:06:36 · 1450 阅读 · 0 评论 -
ESP32 CYD 使用 LVGL 在屏幕上显示图像 | Random Nerd Tutorials
在这个项目中,你将学习如何使用LVGL在CYD上显示图像。我们将创建一个示例来显示如下图片所示的猫的图像,但你可以根据需要加载任何其他图像。CAT在本教程中,你学习了如何使用LVGL库在Cheap Yellow Display (CYD) 板上显示图像。原创 2024-08-29 14:21:21 · 1435 阅读 · 0 评论 -
MCU中OTP的一些用途
在微控制器(MCU)中,OTP(One-Time Programmable)内存用于存储无法更改或仅能编程一次的数据。:将固件或引导加载程序永久存储在OTP中,确保设备启动时的代码不可更改,增加安全性。:在OTP中存储唯一的序列号或设备ID,用于设备认证和追踪。:存储设备的配置参数,如校准数据、网络设置等,这些数据在出厂时设置,之后不再更改。:存储加密密钥或安全认证密钥,用于加密通信或设备认证,提高安全性。:通过在OTP中存储特定的认证数据或密钥,防止软件或固件被非法复制。原创 2024-07-16 09:40:15 · 1461 阅读 · 0 评论 -
可能是当下最能打的MCU图形库:LVGL
LVGL 是当前最流行的免费开源嵌入式图形库,能够为任何MCU、MPU和显示器类型创建美观的用户界面。它得到了许多行业领先供应商和项目的支持,包括Arm、STM32、NXP、Espressif、Nuvoton、Arduino、RT-Thread、Zephyr、NuttX、Adafruit等。原创 2024-06-05 09:50:14 · 4095 阅读 · 0 评论 -
Rust在嵌入式系统开发中的应用
传统上,C和C++是嵌入式系统开发的主要语言选择,但随着Rust的引入,开发者们开始意识到Rust在嵌入式系统开发中的潜力。通过使用Rust,开发者能够提高嵌入式系统的可靠性、安全性和性能,从而推动嵌入式系统技术的发展。例如,嵌入式物联网平台Tessel就是使用Rust开发的,它具有高度的可靠性和灵活性。Rust具有良好的与C语言和C++语言的互操作性,使得开发者能够轻松地集成现有的C/C++代码和库。Rust通过所有权和借用系统来保证内存安全,避免了常见的内存安全问题,如缓冲区溢出和空指针异常。原创 2024-03-18 10:04:22 · 1269 阅读 · 0 评论 -
生物电信号测量技术
脑电图、心电图、肌电图和眼电图是常见的生物电信号测量技术,它们可以提供有关大脑、心脏、肌肉和眼部的电活动信息。生物电信号是生物体内的电活动产生的电流或电压信号,它反映了生物体的生理状态和活动。血氧饱和度是一种测量血液中氧气含量的技术,通过在指尖或耳垂上放置传感器,测量血液中氧气的饱和度。总结起来,血氧饱和度测量的关键技术包括传感器的选择与放置、信号的采集与处理、数据的分析与解释等。脉搏血氧饱和度的测量通常使用光学传感器,传感器通过放置在患者的指尖或耳垂上,利用红外光和红光的吸收特性来测量血氧饱和度。原创 2024-03-07 14:02:35 · 1636 阅读 · 0 评论 -
让人眼花缭乱的`C`语言声明
C 语言的声明是描述变量或函数的类型的语句。在 C 语言中,声明可以包括基本类型、指针、数组、结构体、联合体和函数等。声明的复杂性取决于它所描述的实体的复杂性,以及使用的修饰符和符号。原创 2024-02-02 10:36:01 · 1158 阅读 · 0 评论 -
电子实验室设备:从零开始配置实验室(一)
本文译自随着多次国际迁徙以及在几家公司(或其分支机构)工作,尤其是在没有强大电子工程团队的情况下,我不得不为自己和客户设置多个电子实验室。那些计划进行内部测试的初创公司也需要建立实验室并获取适当的设备。有时,这一切都在非常有限的预算内进行,而在其他情况下,我有几百万美元的预算可供使用。在这篇文章中,我将尝试涵盖不同预算范围,因此,无论您是业余爱好者、一家大型公司/组织打算拓展到尖端电子领域,还是介于两者之间,您都将找到从零开始建立新实验室所需的设备。原创 2024-01-08 10:09:29 · 2589 阅读 · 0 评论 -
实际项目中的环形缓冲区
在实际项目中,环形缓冲区的设计要比讲到的原型稍微复杂一些,需要一些接口函数来实现数据结构封装。GitHub上有个大帅哥写了一个轻量的环形缓冲区库,可以学习参考,也可以直接集成到自己的项目中,功能已经非常完善。size_t!defined||uint16_t0x0001uint16_t0x0001首先,代码包含了一些必要的头文件,并检查是否在C++环境中。如果是,就使用extern "C"来确保C++编译器以C语言的方式处理这个库。然后,定义了一些类型和枚举。例如,lwrb_sz_t和。原创 2024-01-08 10:08:30 · 1097 阅读 · 0 评论 -
C语言环形缓冲区
环形缓冲区,也称为循环缓冲区或环形队列,是一种具有固定大小的缓冲区,其特点是当缓冲区已满时,新的数据将覆盖最旧的数据。它主要由两个指针(头指针和尾指针)和一个固定大小的数组组成。通过本文的介绍,我们了解了C语言环形缓冲区的定义、原理和应用。环形缓冲区作为一种高效的数据结构,可以在各种实际应用中发挥重要作用。公众号 | FunIO微信搜一搜 “funio”,发现更多精彩内容。个人博客 |原创 2024-01-04 10:03:07 · 1176 阅读 · 2 评论 -
FreeRTOS 中的中断处理
在 FreeRTOS 中,中断处理是通过中断服务例程(ISR,Interrupt Service Routine)实现的。FreeRTOS 提供了一些用于在中断处理中使用的函数,以确保在中断上下文中正确使用实时操作系统。这是因为在 FreeRTOS 中,一些函数需要在任务上下文中调用,而不能在中断上下文中调用。这种方式保证了中断处理的实时性,同时避免了在中断服务例程中直接调用 FreeRTOS API。:处理器在中断发生时都会保存当前上下文,执行相应的中断服务例程,然后恢复之前的上下文。原创 2023-12-27 09:37:03 · 3822 阅读 · 0 评论 -
FreeRTOS 时间管理和定时器
FreeRTOS 是一个开源的实时操作系统,提供了丰富的时间管理和定时器功能,用于实现任务调度、延时等操作。在本文中,我们将深入探讨 FreeRTOS 的时间管理和定时器相关的内容。原创 2023-12-21 10:03:14 · 1652 阅读 · 0 评论 -
FreeRTOS任务间通信与同步
在FreeRTOS中,任务是由一个或多个函数组成的独立的执行流,它们可以独立的运行和调度。任务之间的通信和同步是任务管理的核心内容之一。任务间的通信是指一个任务向另一个任务传递信息,而同步则是指多个任务按照一定的顺序执行。FreeRTOS提供了多种任务间通信和同步的机制,包括信号量,队列,互斥锁和事件标志组等。在FreeRTOS中,任务间的通信和同步是一个重要的部分,它涉及到信号量,队列,互斥锁和事件标志组等概念。通过理解和掌握这些概念,可以有效地管理和调度任务,提高系统的效率和稳定性。原创 2023-12-11 10:27:57 · 3720 阅读 · 0 评论 -
FreeRTOS中的任务调度
实时操作系统(RTOS)是为了能在规定的时间内完成特定任务的操作系统。与通用操作系统不同,实时性是其最重要的特征。原创 2023-12-11 10:26:18 · 1923 阅读 · 0 评论 -
FreeRTOS中的任务管理
任务是FreeRTOS中最基本的调度单元,它是一段可执行的代码,可以独立运行。FreeRTOS中的任务是基于优先级的抢占式调度,优先级高的任务可以抢占优先级低的任务的CPU资源。任务的创建、删除、挂起、恢复、设置优先级等操作都是通过调用API函数来实现的。原创 2023-12-05 09:42:02 · 1085 阅读 · 0 评论 -
FreeRTOS下的“Hello World”
实时操作系统(RTOS)是一种专为实时应用程序设计的操作系统。实时应用程序需要在特定时间内做出预测的响应,因此RTOS专注于提供对时间约束的强调,以确保系统能够满足实时性能要求。原创 2023-12-05 09:40:51 · 511 阅读 · 0 评论 -
FreeRTOS简介
FreeRTOS作为一款成熟、稳定且广泛应用的RTOS,为嵌入式系统的开发提供了坚实的基础。其小巧高效、易移植的特点使得它在资源受限的环境中表现出色。而ESP-IDF作为ESP32的开发框架,则在FreeRTOS的基础上提供了更加便利和高级的功能,使得ESP32的开发变得更为高效。随着物联网和嵌入式系统的不断发展,FreeRTOS和ESP-IDF都将继续演进和壮大,为更多的开发者提供强大的工具和框架。这也将推动着嵌入式技术的不断创新和进步,为未来智能设备的发展打下坚实的基础。原创 2023-11-29 10:18:19 · 2514 阅读 · 4 评论 -
IDF 组件管理器
通过在文本编辑器直接编辑,你可以轻松定义清单文件中的依赖项。以下是有关定义依赖项的简单示例:# 定义来自[注册表](https://components.espressif.com/component/example/cmp) 的依赖项# 从 Git 仓库定义依赖项dependencies : # 通过相对路径定义本地依赖项 some_local_component : path : ../../projects/component有关清单文件格式的详细信息,请参阅清单文件格式文档。原创 2023-11-29 10:16:52 · 3238 阅读 · 0 评论 -
ESP32C3小飞控调试
ESP32C3小飞控板赶在国庆节前发出打样,假期后上班就收到了样板,但是迟迟没有动手调试,这两天终于抽出时间调试了,调试过程还算顺利,基本没有遇到什么大问题,下面记录一下调试过程。原创 2023-11-20 17:35:48 · 1756 阅读 · 2 评论 -
Tiny Plane固定翼小飞机机身硬件整理开源
Tiny Plane是一个固定翼小飞机飞控项目,旨在DIY一款操控良好、飞行时间长、可玩性高的固定翼小飞机。目前基于48cm翼展手抛机进行改装,飞控采用ESP32-C3。原创 2023-11-01 10:04:55 · 965 阅读 · 2 评论 -
【开源】调测利器:I2C电流计 功率计
小飞机的板子画成这样:然后就开始溜号了。。。真心希望有小伙伴能来一起搞一下啊~溜号是因为这次想在马达控制中加入电流闭环,所以就想测一下720空心杯带桨和不带桨状态下用锂电池供电的电流,正当要测时发现手上的万用表没电了,很是恼火。并且我的万用表也无法连续记录数据,这样就无法得到锂电池的放电曲线,所以干脆自己做一个吧!原创 2023-10-30 11:20:23 · 746 阅读 · 0 评论 -
分享一个高颜值开源计算器
今天逛同性交友社区时发现一个高颜值的开源计算器,分享给大家,希望对大家有所帮助。原创 2023-10-13 09:43:02 · 912 阅读 · 0 评论 -
ESP32C3 UDP数据传输
运行多次,结果都差不多,在5.5KB/s左右,这个结果应该是远低于phy速率的,跟配置有关,这种测量方法本身也不能反应真实物理速率,但是跟实际使用场景比较接近,可以作为参考。这段python代码不严谨地测试了通信速率,发送一段100个字节的数据,esp32c3收到后会立即返回,然后计算时间。本文主要介绍ESP32C3的UDP数据传输,ESP32C3作UDP server,工作在ap模式。遥控小飞机的电池舱已经画好发去打样,不过座舱还没搞定,先弄弄遥控和数据传输。打印输出有多耗时呢?公众号 | FunIO。原创 2023-10-11 09:47:30 · 557 阅读 · 0 评论 -
简单强大的时序图绘制工具
今天分享一个简单强大的时序图绘制工具——WaveDrom。Wavedrom 是一款功能强大且简单易用的文本转图表工具,被广泛应用于生成时序图、波形图等交互式波形。其特点在于使用简单的文本语法,使得开发人员能够以可视化的方式表示数字信号和时间序列数据。Wavedrom 的优势在于其高度灵活性和可扩展性,使用户能够快速绘制复杂的波形和图表,并轻松与其他文档和代码进行整合。Wavedrom 的基本语法相对简单,以 JSON 对象或简洁的文本描述波形和时序信息。原创 2023-10-09 14:36:16 · 1965 阅读 · 0 评论 -
CH347读取MPU6050传感器数据和显示
姿态估计支持:由于同时具备加速度计和陀螺仪,MPU6050 能够用于姿态估计和导航,例如通过融合算法计算物体的俯仰角、滚转角和航向角。因为MPU6050传感器数据寄存器地址是连续的,获取传感器数据时其实可以快读,理论上会更快,上面的代码还没有优化,先可用。数字输出:MPU6050 输出的数据以数字形式呈现,通过 I2C 接口与微控制器或其他处理器通信,简化了数据获取和处理过程。高精度:MPU6050 提供高精度的测量性能,能够在多种环境条件下稳定工作,并具有较低的噪声和漂移。公众号 | FunIO。原创 2023-10-02 17:18:44 · 343 阅读 · 0 评论 -
CH347读写SPI Flash
上图中,红色LED的是W25Q32FV SPI Flash模块,绿色LED的是MPU6050。前面耽搁了几天,今天终于把CH347 SPI接口调试好了。微信搜一搜 “funio”,发现更多精彩内容。至此就可以读写SPI Flash了。要实现SPI通信,至少要用到。公众号 | FunIO。原创 2023-09-30 09:59:11 · 611 阅读 · 0 评论 -
详解SPI
在设计中,需要根据从设备的要求和主设备的特性来选择合适的CPOL和CPHA参数,以确保通信的正确和稳定。在模式2下,时钟处于空闲状态时为高电平,数据在时钟的下降沿进行采样,数据输出则在时钟的上升沿。在模式0下,时钟处于空闲状态时为低电平,数据在时钟的上升沿进行采样,数据输出则在时钟的下降沿。在模式1下,时钟处于空闲状态时为低电平,数据在时钟的下降沿进行采样,数据输出则在时钟的上升沿。在模式3下,时钟处于空闲状态时为高电平,数据在时钟的上升沿进行采样,数据输出则在时钟的下降沿。原创 2023-09-27 09:34:01 · 247 阅读 · 0 评论