- 博客(55)
- 资源 (2)
- 收藏
- 关注
原创 【FreeRTOS】基于FreeRTOS发布订阅服务架构设计
本文介绍了基于FreeRTOS的发布-订阅架构实现方案。该方案采用C语言开发,在STM32F407平台上验证通过,具有高效稳定的运行表现。核心特点包括:双模式发布(直接回调/队列转发)、双模式订阅(回调/队列)、线程安全(每个topic独立互斥锁)、ISR支持、静态内存分配避免碎片等。文章提供了完整的头文件和源文件实现,并附带简单的使用demo,展示了如何发布消息和通过两种方式订阅消息。该架构适用于实时性要求不高的场景,能有效解耦数据生产者和消费者,简化系统复杂度。
2025-12-14 07:30:00
383
原创 【C】环形缓冲区的C语言实现
环形缓冲区提供了一个共享的、线程/中断安全的(如果正确实现)数据区域,完美地将两者解耦。简单来说,环形缓冲区是一种高效的数据结构,用于在生产者(产生数据)和消费者(处理数据)之间安全地传递数据,特别是在两者速度不匹配或异步运行的场景下。上面代码实现过程,临界区保护使用了关闭中断的方式,为了保证在临界区停留时间尽量短,要保证代码运行效率高,同时,也尽量只关闭与缓冲区读写操作相关的中断源。低速的数据生产与高速的数据消费(等待CANFD数据到达),或高速的数据生产与低速的数据消费(通过串口发送log)。
2025-12-07 18:52:22
286
原创 【C】枚举的妙用
枚举的定义与使用那是相当广泛,上面只是抛砖引玉给同志们汇总一下。这些内容,如果我们用不同的数值表示,这是非常难于理解的!程序开发过程中,我们会抽象出很多种业务类别,每种类别可能有很多种。所以,以后写代码,有事没事多想想如何用枚举来管理各种常量集合内容吧,越用越开心!5.边界检查:可通过枚举计数进行边界验证(第一个枚举值与最后一个枚举值)4.自动编号:编译器自动分配连续值(也可以手动赋值哈)1.类型安全:编译器检查枚举值的有效性。2.可读性:有意义的名称代替魔术数字。3.易于维护:添加新状态只需扩展枚举。
2025-12-04 08:00:00
146
原创 如何编写高质量程序代码
本文探讨了高质量程序代码的编写原则。作者通过类比建筑工程强调软件设计的重要性,提出五点核心要求:结构清晰(功能单元划分明确)、复杂度低(简化计算过程)、良好的编码风格(规范命名和注释)、重复率低(减少冗余代码)以及算法严谨(确保逻辑严密)。文章指出,遵循这些原则能提高代码的可读性、可维护性和运行效率。作者基于多年实践经验总结这些观点,建议开发者关注"嵌入式系统开发者之家"公众号获取更多经验分享。
2025-12-01 18:30:00
382
原创 【C】状态机设计与C语言实现
本文介绍了C语言中状态机的实现方法。状态机通过定义状态、事件、状态转换规则和动作来处理复杂的状态转换逻辑。文章详细展示了状态枚举、事件定义、状态转换表等核心概念,并提供了一个完整的C语言状态机Demo示例。该示例演示了如何通过事件触发状态转换,并调用相应的状态处理函数。状态机是嵌入式系统开发中处理复杂逻辑的有效方法,掌握这一技术可以显著提高代码的可维护性和扩展性。
2025-11-30 12:25:09
264
原创 【C】自定义数据类型--struct的妙用
是各种自定义数据结构的根基,结构体在C语言中扮演着数据组织者的角色,是构建更复杂数据结构的基础单元!等因素,我们需要采用一种科学而高效的方法,实现统一且集中的数据管理。,可以让程序的变量整齐划一的组织在一起,想想都舒畅、用起来更顺心!内存管理可控,合理的内存对齐,提升访问效率,可以实现内存连续分布。要把相关的参数存储在合适数据类型的变量中,变量按照。集中管理,相关变量集中存放,便于维护和传递与引用。当中,完成数据结构的抽象定义集中管理。类型安全,明确的成员类型,减少类型错误。的归纳思想,放置在合适的。
2025-11-29 08:50:48
430
原创 【C】ModBus协议解析中的回调函数
本文展示了在ModBus协议解析中使用回调函数的实现框架。通过定义协议解析回调函数类型(如帧开始、功能码、数据域等),建立回调函数注册机制,并实现解析引擎的核心逻辑。文中详细介绍了数据类型抽象定义、上下文数据结构、初始化流程以及解析引擎的实现方法,并给出了应用示例代码。该设计通过回调函数机制实现了协议解析过程的事件驱动处理,使代码结构清晰且易于扩展。虽然示例未包含完整的数据收发处理,但充分展示了回调函数在协议解析中的优势,为类似场景的开发提供了参考模板。
2025-11-28 19:30:52
157
原创 【C】函数指针与回调机制
摘要:C语言开发中常因缺乏架构思维导致代码混乱。模块化设计、低耦合高内聚是关键,函数指针和回调机制是构建灵活架构的核心技术。函数指针可实现动态调用、函数表和多态行为,回调机制支持异步编程和插件架构。通过typedef定义函数指针类型,可创建高阶函数实现通用计算框架。这些技术能提高代码灵活性、增强模块化、支持扩展性,是构建可维护软件的重要方法。掌握几十种常用编程思想足以应对大多数开发需求,重点在于理解架构设计而非单纯语法。
2025-11-27 18:30:00
232
原创 【C】__attribute__实现原理及应用
本文介绍了GCC编译器中的__attribute__机制,这是一种用于控制代码编译行为的强大工具。文章列举了常见的__attribute__属性及其功能,包括内存对齐(packed/aligned)、函数行为控制(noreturn/noinline)、代码段管理(section)等。这些属性可以优化代码、严格检查错误并实现特定功能。作者强调这些扩展属性在嵌入式开发中的重要性,特别是在ARM架构SOC开发中,建议开发者必须了解这些特性以便灵活运用。文章最后还介绍了微信公众号"嵌入式系统开发者之家&q
2025-11-25 18:30:00
869
原创 【C】 volatile关键字项目应用规则
嵌入式开发中,volatile关键字用于防止编译器优化关键变量访问,确保硬件寄存器和多线程共享变量的正确性。其核心作用包括:禁止优化访问、保持操作顺序、确保修改可见性。典型应用场景包括:内存映射硬件寄存器、中断服务程序共享变量、多线程标志变量、硬件FIFO/DMA访问和看门狗定时器等。需注意volatile不能保证原子性和替代同步机制。合理使用volatile是编写稳定嵌入式系统的基础,但应避免过度使用影响性能。
2025-11-24 18:30:00
389
原创 【C】“位运算”必须要完全掌握的基本技巧
摘要:嵌入式系统中,位运算是C语言的核心技能,在资源受限环境下具有关键作用。文章详细介绍了位运算的四大优势:内存优化、硬件交互、实时性要求和代码精简;分类讲解基本位运算(与、或、异或、取反)和移位运算的实际应用,包括寄存器操作、数据压缩等嵌入式场景;提供了GPIO配置、数据打包等典型实例,并强调可读性、移植性和原子性等最佳实践。通过系统掌握位运算,开发者能显著提升嵌入式软件的效率和可靠性。
2025-11-23 18:30:00
673
原创 【C】嵌入式C与标准C的编程区别
嵌入式C语言编程与标准C的核心差异在于思维模式和工程实践:标准C关注逻辑算法和抽象问题解决,而嵌入式C直接控制硬件,需精确掌控底层资源。嵌入式C特点包括:1) 依赖更少的库函数,避免动态内存分配;2) 严格受限的资源环境(KB级RAM/MHz主频);3) 通过内存映射直接操作硬件寄存器;4) 追求极致效率和确定性(微秒级延时);5) 重视资源节约,频繁使用volatile等关键字。这些特点使得嵌入式C编程更贴近硬件底层,要求开发者对系统资源、时序和内存管理有精确把控。
2025-11-20 18:31:32
544
原创 【C】C语言实战技巧开篇
本文分享了嵌入式开发中的核心实践技巧与工程哲学。作者通过UART寄存器访问的两种实现方式对比,揭示了类型安全和硬件抽象的重要性。文章重点阐述了防御性编程(断言与属性关键字)、内存布局控制和C语言的硬件抽象优势,指出嵌入式开发需要在代码优雅与硬件精确间取得平衡。作者旨在帮助开发者跨越理论到实践的鸿沟,构建可靠的工业级嵌入式系统,并邀请读者共同探讨开发中的挑战与解决方案。
2025-11-19 19:21:21
688
原创 【IDE】Linux下使用openocd烧录bin文件
本文介绍了在Linux环境下使用OpenOCD工具刷写STM32Fxxx系列ARM芯片的解决方案。通过开发一个Bash脚本,实现了对bootloader、app_a和app_b三个分区的bin文件烧录功能。脚本支持自定义文件路径和烧录地址,提供错误检查、进度显示等实用功能,并可通过命令行参数灵活配置。相比Windows下的图形化IDE,该方案虽然需要在终端操作,但通过脚本封装简化了流程,提高了开发效率。文中还给出了完整的脚本代码,并确认该方案已通过实际测试验证。
2025-10-06 20:38:34
791
原创 【ARMv7】ARMv7的七种工作模式以及其对应的代码示例
本文介绍了ARMv7架构的七种工作模式及其状态转换机制,重点分析了用户模式(线程模式)与特权模式(处理程序模式)的切换方式。通过代码示例展示了中断触发、SVC调用等模式切换场景,并详细说明了异常处理流程,包括MPU保护配置、内存管理错误和硬错误处理。文章还探讨了在RTOS环境下常见的模式切换场景,为开发者提供了系统级编程的实践指导。这些模式管理机制是ARM架构安全性和可靠性的重要基础。
2025-09-13 21:14:24
491
原创 【ARMv7】系统复位上电后的程序执行过程
摘要:ARMv7-M SOC(如STM32F407)采用XIP模式启动,流程分为硬件初始化、软件初始化和应用启动三个阶段。硬件自动从0x00000000读取MSP和复位向量,跳转至Reset_Handler;软件初始化完成.data/.bss段处理、时钟配置(最高168MHz)等;最后跳转至main()执行用户程序。整个过程确保硬件环境和内存正确初始化,为应用提供稳定基础。
2025-09-10 22:54:31
946
原创 【ARMv7-M】复位向量与启动过程
ARMv7系统启动流程的核心在于中断向量表的重映射与初始化操作。系统上电后,CPU从0x0000_0000地址获取堆栈指针和复位向量,而实际向量表存储在Flash中(如0x0800_0000)。通过VTOR寄存器实现物理地址到逻辑地址的重映射,确保CPU能正确访问中断向量。复位处理函数负责关键初始化:复制.data段、清零.bss段、设置栈指针,为C语言环境做好准备。这种设计兼顾存储灵活性与启动可靠性,是嵌入式软件开发的重要基础。
2025-09-09 23:18:14
485
原创 【ARMv7】开篇:掌握ARMv7架构Soc开发技能
本文总结了ARMv7-M架构(以STM32F为例)的开发要点:1)无MMU有MPU,适合RTOS;2)NVIC高效管理中断;3)SCB控制核心功能;4)开发以C为主,汇编仅用于底层初始化。学习重点在于理解启动流程、中断机制、外设寄存器操作和CMSIS标准库应用,最终通过C语言高效控制芯片。
2025-09-01 22:59:41
545
原创 【yocto】Yocto Project 核心:深入了解.inc文件
Yocto项目中的.inc文件是代码复用和模块化的关键机制,它通过BitBake的include/require指令将共享配置和功能封装到单独文件中,从而减少冗余、提高可维护性。.inc文件没有独立语法,其内容直接插入到引用它的.bb文件中,需注意变量作用域和上下文有效性。常见用法包括封装通用任务、变量定义和继承类,典型应用如Linux内核食谱的高度模块化实现。通过合理使用.inc文件,开发者可以构建更清晰、可维护的定制化Linux系统。
2025-08-27 20:20:37
1111
原创 【yocto】Yocto Project 核心:深入了解.bbclass文件
本文深入解析Yocto项目中.bbclass文件的功能与使用。作为构建系统的核心继承机制,.bbclass实现了代码复用、统一规范和复杂逻辑封装。文章详细介绍了其继承原理、语法规则,并通过自动版本生成和系统服务封装两个实例进行说明。关键点包括:1) 通过inherit指令实现面向对象式继承;2) 支持变量操作和任务钩子;3) 采用单一职责原则设计类文件。最佳实践建议保持类文件轻量、命名清晰并充分测试,以提升构建系统的可维护性和扩展性。掌握.bbclass使用是从配方编写进阶到构建框架设计的关键。
2025-08-26 20:00:00
1057
原创 【yocto】Yocto Project 核心:深入了解.bbappend文件
摘要:Yocto项目中,.bbappend文件是实现软件包定制化而不修改原始.bb配方文件的关键工具。它支持添加补丁、追加文件、调整依赖关系、修改构建任务等操作,并通过条件语法实现灵活定制。.bbappend文件必须与原配方同名(支持%通配符),并置于自定义层的相同目录结构中。这种机制遵循"开放-封闭"原则,既满足定制需求,又能无缝同步上游更新,是Yocto开发的核心技能。
2025-08-25 20:28:42
877
原创 【yocto】Yocto Project 核心:深入解析 .bb 文件语法规则
摘要:Yocto项目的.bb文件是构建定制化Linux系统的核心配置文件,定义了软件包的元数据和构建指令。文件包含变量赋值、任务定义和依赖关系,使用BitBake语法结合Shell/Python脚本。主要内容包括:1.基础结构(变量定义、SRC_URI、依赖关系);2.核心任务链(fetch/configure/compile/install等);3.关键路径变量(WORKDIR/S/D等);4.高级特性(条件赋值、任务追加、类继承)。通过掌握.bb文件编写,开发者能精确控制嵌入式系统的软件构建过程。调试时
2025-08-24 10:00:00
1164
原创 【yocto】Yocto Project 配置层(.conf)文件语法详解
Yocto Project的.conf文件是构建嵌入式Linux系统的核心配置文件,其语法基于键值对和特殊操作符。关键语法包括:变量赋值(=)、立即展开(:=)、条件赋值(?=)、追加/前置(:append/:prepend)和覆盖操作符(:override)。重要配置文件包括bblayers.conf(定义构建层)、local.conf(用户配置)以及机器和发行版配置文件。最佳实践建议使用引号、优先使用append/prepend、合理设置默认值,并注意空格问题。通过bitbake -e命令可调试变量值。
2025-08-23 17:47:36
1014
原创 【yocto】BitBake指令汇总解析
本文介绍了BitBake这一OpenEmbedded和Yocto项目的核心构建工具。作为专业化的make工具,BitBake能解析元数据、管理依赖关系并高效并行执行任务。文章重点解析了BitBake的核心概念(配方和目标)和常用命令:包括基本构建命令(bitbake target)、特定任务执行(-c task)、信息查询(-e、-s等)、开发调试(-C、-k、-f)等。此外还介绍了并行构建优化和构建服务器设置等高级技巧,帮助开发者更好地使用Yocto生态系统进行系统构建和调试。
2025-08-22 22:26:30
1082
原创 【yocto】再解:BitBake指令&Layer&.conf&.bb&bbappend&bbclass之间的关系
Yocto项目是一个开源的Linux系统定制工具,其核心组件包括bitbake命令、Layer、.conf、.bb、.bbappend和.bbclass文件。这些组件协同工作:Layer作为容器组织各类文件,.conf提供全局配置,.bb定义软件包构建规则,.bbappend用于扩展修改其他层的配方,.bbclass实现通用功能复用。整个构建过程由bitbake指令驱动,系统会依次解析配置、查找目标、合并修改、执行任务,最终生成定制化的Linux发行版。这种模块化架构使得Yocto既灵活又可维护,适合嵌入式
2025-08-21 20:39:22
942
原创 【yocto】yocto的工程组成
Yocto项目通过自动化构建流程革新了嵌入式Linux开发。它将传统手工式的系统构建(U-Boot移植、内核裁剪等)转化为基于配方(Recipe)的标准化流程:BitBake作为核心调度器执行构建任务,元数据仓库(.bb/.bbappend文件)定义软件包构建规则,层级化组织(meta层)实现模块化管理,配置文件(bblayers.conf/local.conf)提供全局设置,智能工具链自动生成交叉编译环境,最终输出完整系统镜像。这种工业化范式让开发者摆脱底层重复劳动,专注于产品创新价值的实现。
2025-08-20 18:47:12
1333
原创 【yocto】为什么要选择yocto?
Yocto项目是嵌入式Linux系统开发的主流解决方案,提供高度定制化能力,支持多种硬件架构和长期维护需求。其基于BitBake的构建系统确保可重复性,拥有3000+软件包支持和分层架构设计。相比其他方案,Yocto特别适合中大型项目、多硬件平台及长生命周期产品,虽然学习门槛较高,但能提供精确的系统控制和行业级可靠性。主流芯片厂商均提供支持,使其成为嵌入式开发的事实标准。
2025-08-18 22:41:37
964
原创 【FreeRTOS】刨根问底6: 应该如何防止任务栈溢出?
【摘要】栈溢出是嵌入式系统中常见的内存问题,当函数调用过深或局部变量过大时,会导致数据超出预设栈空间,破坏相邻内存区域。FreeRTOS提供三种检测机制:栈指针检查、填充值验证和ISR栈检查,开发者可通过配置钩子函数实现异常处理。防范措施包括合理分配栈空间、避免大局部变量、限制递归深度,并建议采用栈填充模式结合高水位线监控的双保险策略,为关键任务预留25%冗余空间,以提升系统稳定性。通过预防性设计和实时监测,可有效避免栈溢出引发的系统崩溃。
2025-08-17 22:39:31
1367
原创 【FreeRTOS】刨根问底5: ISR与任务之间到底要怎样关联
本文通过急诊室救治的生动比喻,讲解了嵌入式系统中中断服务程序(ISR)与任务协作的机制。
2025-08-16 23:05:47
773
原创 【FreeRTOS】刨根问底4: 优先级反转是啥?咋解决?
摘要: 优先级反转是实时系统中高优先级任务因低优先级任务占用资源而被阻塞的现象。FreeRTOS中可通过以下方法避免:1) 使用优先级继承的互斥锁(xSemaphoreCreateMutex),临时提升低优先级任务优先级;2) 缩短临界区,仅保护必要代码;3) 合理分配任务优先级,避免高优先级任务依赖低优先级资源;4) 监控调试,利用工具检测任务状态和锁竞争。这些实践可提升系统实时性和可靠性。
2025-08-14 23:38:10
1267
原创 【FreeRTOS】刨根问底3: 临界区到底是什么
FreeRTOS中的临界区和中断临界区是保护共享资源的两种机制。临界区通过禁用任务调度保护任务间共享资源,但允许中断响应;中断临界区通过禁用全部或指定优先级中断来保护任务与中断共享的资源,但会影响实时性。两者都支持嵌套调用,需注意匹配进出次数并尽量缩短临界区时间。临界区适用于全局变量等任务间共享资源,中断临界区适用于硬件寄存器等任务与中断共享资源。开发者应根据场景选择合适机制,必要时可用信号量等同步机制替代。
2025-08-13 20:35:05
1321
原创 【FreeRTOS】刨根问底2: Makefile的编译参数到底啥作用
本文介绍了ARM嵌入式开发中arm-none-eabi-gcc工具的编译与链接配置参数。主要内容包括:1)基础编译参数如处理器架构选项(-mcpu、-mthumb等)和优化等级(-Os等);2)关键优化参数如代码大小优化(-ffunction-sections)和特定优化选项;3)调试诊断参数(-g、-Wall等);4)链接器参数(-T、-Map等)。特别强调STM32开发中的注意事项,包括-flto参数一致性、硬件浮点选项匹配、栈使用分析及优化等级选择。文章提供了STM32典型编译示例,并建议通过严格参数
2025-08-13 20:00:53
778
原创 【FreeRTOS】刨根问底1: SysTick在FreeRTOS上咋工作的
摘要:本文探讨了ARM Cortex-M系列中的SysTick定时器,强调深入理解高手代码的重要性。SysTick是CPU内置定时器,非外设,其寄存器地址在《Cortex-M4 Devices Generic User Guide》中有详细说明。文章从SFR声明、配置、初始化到与FreeRTOS对接等方面分析SysTick的使用,帮助读者掌握这一核心定时器的应用技巧。(99字)
2025-08-12 13:17:49
689
2
原创 【FreeRTOS】任务间通讯7: 直接任务通信- Stream/Message Buffer
FreeRTOS中的StreamBuffer与MessageBuffer是两种高效的任务间通信机制。StreamBuffer适合传输不定长字节流(如串口数据),支持任意长度读写;MessageBuffer则用于结构化消息传输(如命令包),保证消息完整性。两者都支持阻塞等待和中断安全操作,但MessageBuffer会额外存储4字节长度信息。选择时需权衡数据灵活性与消息可靠性,StreamBuffer吞吐量更高,而MessageBuffer更便于解析。实际应用中应合理设置缓冲区大小,配合任务通知机制使用,并注
2025-08-12 11:44:10
1317
原创 【FreeRTOS】任务间通讯6: 任务通知- Task Notification
Task Notification 是 FreeRTOS 提供的一种轻量级任务间通信(IPC)机制,它允许任务或中断直接向另一个任务发送通知(Notification),而无需使用队列、信号量或事件组等中间对象。
2025-08-11 20:15:00
2071
原创 【FreeRTOS】任务间通讯5:事件组- Event Group
本文通过支付宝"集五福"活动类比,形象讲解FreeRTOS事件组机制。事件组是一种高效的线程通信方式,通过24个二进制位实现任务同步和通知。文章详细介绍了事件组的创建、设置/清除事件位、等待事件等核心API,并提供了完整示例代码展示多任务同步实现。最后总结了使用注意事项,包括资源限制、性能优化和调试技巧等。事件组特别适合需要等待多条件触发或广播通知的场景,合理使用可显著提升系统效率。
2025-08-10 10:00:00
2637
原创 【FreeRTOS】任务间通讯4:递归信号量- Recursive Mutex
本文介绍了FreeRTOS中的递归互斥量(Recursive Mutex)机制。与普通互斥量不同,递归互斥量允许同一任务多次获取同一把锁而不会导致死锁,系统会记录获取次数,必须释放相同次数才能真正释放。文章通过会议室钥匙的生动比喻,解释了递归互斥量的工作原理,详细介绍了其API接口(创建、获取、释放、删除)和使用方法,并提供了完整的应用示例代码展示递归函数中对共享资源的保护。最后强调了使用时的注意事项,包括优先级反转、释放次数匹配、性能开销等问题。递归互斥量特别适用于递归函数或可能被重入的函数中的资源保护场
2025-08-09 20:15:00
1079
原创 【FreeRTOS】任务间通讯3:互斥量- Mutex
摘要:FreeRTOS中的互斥量(Mutex)是保护共享资源的关键机制,可防止多任务并发访问导致的数据冲突。文章介绍了互斥量的作用(资源保护、解决竞争条件、优先级继承)、核心API接口(创建、获取、释放、删除)以及典型应用实例。特别强调了使用注意事项:获取与释放必须配对、避免死锁、临界区最小化等。互斥量通过优先级继承机制有效解决优先级反转问题,但不适用于中断服务例程。正确使用互斥量能显著提升系统稳定性,开发者需权衡系统性能与资源保护需求。(150字)
2025-08-08 18:00:00
1344
原创 【FreeRTOS】(号外)任务间通讯2: 信号量- Counting Semaphore
计数信号量是FreeRTOS中管理多实例资源的关键同步机制,通过原子化计数器实现资源的安全分配与回收。主要特点包括:1)可跟踪多个资源实例的可用数量;2)提供Take/Give操作实现资源申请与释放;3)适用于资源池管理、事件计数和流量控制等场景。与二值信号量不同,它能表示多个资源实例的状态。使用时需注意初始值设置、优先级反转风险及中断安全操作。该机制在资源受限的嵌入式系统中能有效提升可靠性和资源利用率。
2025-08-07 20:30:00
1117
原创 【FreeRTOS】任务间通讯2: 信号量- Semaphore
FreeRTOS信号量机制详解 摘要:信号量是FreeRTOS中实现任务同步和资源共享的核心机制,主要包括二进制信号量、计数信号量和互斥信号量三种类型。二进制信号量用于任务同步,计数信号量管理多资源访问,互斥信号量通过优先级继承机制解决优先级反转问题。文章详细介绍了信号量的创建、获取、释放和删除等API函数,并提供了任务间通信和任务与中断通信的完整示例。使用注意事项包括:优先使用互斥信号量避免优先级反转、预防死锁、中断安全操作、合理资源管理以及性能优化等。特别提醒递归互斥信号量适用于可能递归调用的场景,但需
2025-08-07 19:45:00
1049
Ubuntu上通过一条指令完成STM32F407vg的基于FreeRTOS的基础工程
2025-08-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅