自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 资源 (2)
  • 收藏
  • 关注

原创 论C/C++的条件编译#if、#ifdef、#ifndef、#undef

本文通过两个实验演示了C语言中条件编译指令#if、#ifdef、#ifndef和#undef的使用效果。实验表明:#if仅在宏值为1时执行条件编译;#ifdef只要宏被定义(无论值为何)就执行;#ifndef则在宏未定义时执行。此外,#undef可取消已定义的宏,使后续条件编译失效。这些指令的行为类似于普通if语句,但作用于编译阶段,能有效控制代码的编译过程。

2025-07-19 16:42:28 298

原创 VSCode+arm-none-eabi-gcc交叉编译+CMake构建+OpenOCD(基于Pico rp2040的保姆级教程)

摘要:本文详细介绍了Raspberry Pi Pico开发环境的完整搭建流程。主要内容包括:1)Pico SDK三核心组件(pico-sdk、picotool、pico-sdk-tools)的安装与环境变量配置;2)pico-examples例程包的获取;3)ARM交叉编译器、CMake、Ninja等工具链的安装配置;4)调试工具(OpenOCD、J-Link)的安装;5)辅助环境(MinGW64、Python、Git Bash)的配置;6)VSCode推荐插件清单。

2025-07-06 17:54:17 840

原创 关于ESP系列MCU的UART download原理

摘要:ESP8266/ESP32系列芯片通过GPIO-0(BOOT引脚)电平状态选择工作模式,悬空/高电平为正常运行模式,下拉接地进入下载模式。进入下载模式有两种方式:上电后按BOOT→RST→释放组合,或上电前按住BOOT供电。可通过自动下载电路(连接串口芯片DTR/RTS)实现免按键下载。物理UART串口需要自动下载电路,而USB-CDC虚拟串口则不需要。

2025-03-30 10:11:24 557

原创 显式启用-u_printf_float和-u_scanf_float前后的代码内存体积实验

摘要: 本文通过对比实验研究了嵌入式编译器中-u_printf_float和-u_scanf_float选项对代码体积的影响。基于arm-none-eabi-gcc工具链的实验显示:同时启用两个选项时代码体积达23.9KB,仅启用printf_float为15.7KB,仅启用scanf_float为19KB,完全关闭时仅1.1KB。结果表明浮点格式化支持会显著增加22.25KB的代码量,为资源受限系统的优化提供了量化参考。所有实验固定使用-Og优化等级,确保对比有效性。

2025-01-06 18:41:34 530

原创 嵌入式领域的资源/文章/问题寻找网站

本文整理了开发者常用的技术社区与资源平台,涵盖代码托管(GitHub、Gitee)、技术博客(博客园、51CTO)、开发者社区(阿里云、腾讯云、华为云、Arduino)、专业论坛(硬汉嵌入式、21ic电子、51黑电子)以及综合平台(知乎、B站、开源中国)。这些平台为开发者提供代码协作、知识分享、技术交流等多元支持,是技术学习和项目开发的重要资源库。

2024-12-30 15:52:30 312

原创 在【Arduino IDE】中在线下载和离线下载【ESP系列开发板的SDK】

本文介绍了在Arduino IDE中安装ESP8266和ESP32开发板SDK的两种方法:在线和离线安装。在线安装需在首选项中添加开发板管理地址,但下载速度可能较慢;离线安装可从中文字社区下载SDK包,安装更快捷但版本可能不是最新。文章还解释了开发板管理器和库管理器的区别,前者用于管理芯片开发板的SDK,后者用于管理外设库,并指出了默认安装路径。最后提供了查看和修改库路径的方法。

2024-12-20 17:30:56 5906

原创 VSCode+arm-none-eabi-gcc交叉编译+CMake构建+OpenOCD(基于STM32的标准库/HAL库)

CMake简介与STM32开发环境配置 CMake是一个跨平台的构建系统生成工具,能够自动生成Makefile/Ninja等构建文件。本文介绍了CMake的三种安装方式:GitHub二进制发行版、官网下载和国内镜像。安装后需配置环境变量并通过cmake -version验证安装成功。 以STM32F103ZET6为例,文章详细说明了工程所需的配置文件,包括VSCode的settings.json、c_cpp_properties.json等设置要点,并提供了相关参考文章链接。

2024-12-17 18:48:53 5575 7

原创 解决VSCode无法识别相对路径的问题

摘要: 在使用VSCode编辑Python文件时,相对路径引用常因默认参照位置不同导致文件找不到。本文以draw_chart.py调用1836A.xlsx为例,分析两种解决方案: 修改路径写法:将../pending_files改为./pending_files,使路径基于VSCode默认的项目根目录(如Python_project); 调整VSCode配置:通过设置Execute in fileDir选项(UI或JSON),使路径参照当前脚本目录(如app_sample),保持原../写法有效。

2024-12-12 17:42:45 9815 7

原创 嵌入式编译流程

本文介绍了四种常见的可执行文件格式:.axf(Keil IDE专用)、.exe(Windows通用)、.out(早期Unix系统使用)和.elf(现代扩展格式)。重点对比了.out和.elf格式,指出.elf格式更先进,支持动态链接库等现代特性。文中还解释了.elf文件在调试中的作用,及其转换为.hex等烧录格式的必要性。.elf文件包含完整的调试信息,而烧录时只需提取地址和程序数据生成镜像文件。

2024-12-11 14:36:01 300

原创 makefile脚本需要修改的地方

本文针对STM32标准库工程的Makefile构建脚本提供关键修改说明,主要包括:目标文件设置、优化等级配置、MCU特性配置、宏定义修改、源代码路径、头文件路径、链接脚本,该脚本支持交叉编译环境(arm-none-eabi-gcc),通过DEBUG标志区分开发调试与发布版本,并提供编译输出目录管理功能。

2024-12-05 16:51:39 716

原创 .vscode文件夹中各个JSON脚本需要修改的地方

本文介绍了VSCode环境下STM32开发的配置方法,重点说明tasks.json文件中OpenOCD下载配置的修改要点。文件主要包含编译、清除、重编译任务,以及三种调试器(CMSIS-DAP、ST-Link、J-Link)的下载配置。关键修改点包括:1)根据MCU型号修改target配置文件路径;2)J-Link配置需参考特定博客进行调整;3)使用${workspaceRootFolderName}变量自动获取工程名作为elf文件名。该配置通过任务依赖实现在下载前自动完成编译,提高开发效率。

2024-12-05 16:34:48 1073

原创 OpenOCD之J-Link下载

本文介绍了使用J-Link调试器配置OpenOCD进行STM32开发的方法。首先通过USB Driver Tool将J-Link驱动替换为WinUSB模式,然后在OpenOCD的interface目录中复制jlink.cfg并修改为jlink-swd.cfg,添加SWD传输协议配置。接着在VSCode的task.json和launch.json文件中更新接口配置为jlink-swd.cfg,实现程序下载和调试功能。该方法适用于基于STM32的开发环境,通过简单配置即可使用J-Link进行SWD模式调试。

2024-11-24 19:43:58 2238

转载 《提问的智慧》

提问的智慧

2024-11-18 14:09:45 246

原创 OpenOCD之flash write_image和program命令

摘要: 本文介绍了使用OpenOCD的flash write_image和program命令下载程序到STM32的两种方式:通过telnet/tcl端口交互或命令行直链下载。flash write_image支持多种文件格式(如bin、elf),需谨慎使用erase参数以避免误擦数据;program命令简化了独立编程流程,示例中展示了ELF和BIN文件的下载方法。OpenOCD连接后会监听6666(tcl)、4444(telnet)、3333(gdb-server)端口,分别用于下载和调试。

2024-11-05 16:42:02 1968 2

原创 基于VSCode搭建开源嵌入式环境的make构建工具选择

本文比较了两种Windows下的make工具配置方案:xpack-windows-build-tools和MinGW-64。两种方案都能支持Linux风格的rm -fR语法,但xpack-build-tools包含完整的Linux移植工具链(busybox、cp、rm等),与GNU Makefile语法兼容性更好。作者建议优先使用xpack-build-tools,但也可将其核心工具复制到MinGW/bin目录下实现等效功能,因为两者底层都是基于GNU Make。

2024-10-19 10:48:12 980 1

原创 解决VSCode文件的中文GBK和UTF-8编码之间乱码问题

解决VSCode中文乱码问题的实用指南 本文针对VSCode编码乱码问题提供了完整解决方案。当外部GBK2312文件在默认UTF-8编码的VSCode中打开时会出现乱码,反之亦然。解决方法分三步:1)在设置中更改默认编码;2)先用原文件编码格式正确打开文件;3)通过"编码保存"和"编码重新打开"功能转换为目标编码格式。作者建议统一使用UTF-8编码格式,可有效避免文件打开和程序输出的乱码问题。如需使用GBK编码,也提供了类似的操作方法,并提示需同步调整终端编码设置。

2024-09-16 17:28:23 10884 2

原创 常用的代码注释标签

表示代码可能包含临时解决方案、糟糕的实践、或者有待优化的部分,通常意味着此处的实现方式并不理想,应在未来重新审视和改进。- 标记一段临时性的、非常规的解决方案,通常用于应对紧急问题,但长期来看不是最优解。- 请求他人复查某段代码,可能是为了确认设计决策、逻辑是否正确或改进代码质量。- 标记已弃用的代码,提醒开发者这段代码未来可能会被移除。- 添加一些说明文字,提供一些重要提示或背景信息。- 指出代码中存在问题或bug,需要修复的地方。- 标记正在进行的工作,表明这部分代码尚未完成。

2024-09-11 20:34:04 517

原创 变量/函数命名规则

本文总结了三种常见的变量和函数命名规范:1)小驼峰命名法(首字母小写后续单词首字母大写);2)大驼峰命名法(所有单词首字母大写);3)下划线命名法(全小写用下划线分隔)。旨在帮助开发者规范命名习惯,提高代码可读性。

2024-09-05 10:11:27 466

原创 基于VSCode和MinGW的C/C++开发环境部署(非CMake构建)

本文介绍了VSCode与MinGW64的安装配置方法,以及VSCode开发C/C++项目所需的四个核心配置文件的设置要点。主要内容包括:1)推荐安装VSCode System版本并配置MinGW64环境;2)提供三个MinGW64安装来源,详细说明版本命名规范中的关键参数含义;3)给出settings.json、c_cpp_properties.json、tasks.json三个配置文件的模板,重点说明需要修改的编译器路径等关键参数;4)强调配置文件中环境变量与编译参数的关系。这些配置支持单文件和多文件编译

2024-08-28 16:29:24 1320

原创 谈谈SVN服务器的远程部署(内网和外网之间穿透访问)

摘要:本文介绍了两种实现SVN服务器远程访问的方案。一是内网穿透技术,通过公网域名映射内网服务,但需持续运行服务器且需要网络知识;二是SVN托管平台(推荐SVNColud、SVN999、SVNBucket),开箱即用但功能单一。方案各有优劣:内网穿透通用性强可拓展其他服务,托管平台操作简单但仅限SVN使用。作者建议根据需求选择,追求灵活性可选内网穿透,需要快速部署则用托管服务。文末提供了SVN客户端和服务端的下载链接。

2024-08-22 15:37:06 2044

原创 内网穿透原理及其客户端

一般而言,内网中的多台主机在没有固定公网IP的情况下,NAT(网络地址转换技术)使得内网中的主机可以共享一个公网 IP 地址访问外部网络,这样就可以令IPv4公网地址利用最大化,但反过来,外网主机通常无法直接访问内网主机。同一个内网下的各个主机是可以直接通过内网IP互相访问的,举个例子:相信大家自己在网上买过路由器安装的人,给路由器连接上网线后,说明书会给1个内网的静态IP地址我们登陆,此时我们使用手机输入这个IP地址,便可跳转到路由器的设置界面去设置密码,加密方式等等,这就是经典的内网中主机访问。

2024-08-13 17:23:33 916

原创 解决使用VSCode开发Python,虚拟集成终端输出中文乱码的问题

摘要:本文分析了VSCode虚拟终端出现中文乱码的原因,指出这是由于Windows系统默认使用GBK编码,而VSCode终端仅支持UTF-8编码。解决方法包括:1) 将VSCode项目文件编码统一设为UTF-8;2) 通过设置环境变量PYTHONIOENCODING将Python环境编码改为UTF-8;3) 重启相关程序。最终实现Python环境、项目文件和终端编码的统一,解决了中文显示乱码问题。文中还提供了详细的操作步骤和编码原理说明。

2024-08-07 22:38:31 5171 11

原创 解决VSCode终端输出和PyCharm终端输出显示不一致的问题

摘要:本文针对VSCode和PyCharm虚拟终端输出差异问题,提出两种解决方案:一是禁用/卸载Code Runner插件,使输出重定向至VSCode虚拟终端;二是在保留插件的情况下,通过设置勾选"Run In Terminal"选项。推荐使用方案一,并提供了在虚拟终端中运行/停止代码的快捷键(Ctrl+Alt+P运行,Ctrl+C停止)。同时说明了调试代码的两种操作方式。方案参考了优快云社区的相关技术文章。

2024-08-07 10:54:43 1072

原创 芯片架构及对应指令集—思维导图

本文概述了主流芯片架构与操作系统的适配关系。PC端以x86架构为主(包括Intel的IA-32/x86和x86_64,以及AMD64),移动端则以ARM架构(ARM32/ARMv7和ARM64/ARMv8/AArch64)为主导。文章阐述了软件程序通过编译器转换为二进制文件,与操作系统内核和硬件架构交互的流程,并对比了不同操作系统(Windows、MacOS、Linux发行版、Android等)对芯片架构的适配特点。最后简要介绍了Linux发行版的组成结构,以及操作系统的发展历史,指出Unix-like和D

2024-08-05 20:28:12 760

原创 论VSCode如何在项目工程中,使用全局搜索和局部搜索功能?

在keil5 IDE中,我们非常熟悉地按下ctrl+F快捷键,可实现全局搜索/局部搜索某个变量和函数。那么在VSCode中,怎么实现全局搜索/局部搜索呢?全局搜索:点击VSCode的右边的放大镜。局部搜索:也是快捷键ctrl+F。

2024-07-26 20:13:43 11895 2

原创 ARM Cortex-M系列内核的编译信息内存分布——思维导图

本文介绍了ARM Cortex-M内核编译信息的内存分布,通过思维导图展示Code、RO-data、RW-data和ZI-data的存储特点,并对比了arm-none-eabi-gcc和Keil MDK编译工具链的输出差异。重点解析了hex文件的组成结构,说明flash和ram部分如何共同构成最终烧录文件。通过实例展示了内存占用信息的十进制/十六进制转换关系,阐述了RW-data在上电时的搬运机制,帮助开发者理解嵌入式程序的内存分配原理。

2024-07-24 22:31:19 323

原创 ESP32-C3开发环境搭建(基于ESP-IDF插件)和解决串口占用导致程序下载失败的问题

ESP32-C3开发环境搭建问题解决指南 本文记录了作者搭建ESP32-C3开发环境时遇到的两个主要问题及解决方法: 网络连接问题:使用有线网络安装失败,改用2.4G/5G WiFi后成功; 串口下载问题:因Python进程占用串口导致下载失败,通过终止相关进程解决。 文章详细介绍了重新安装ESP-IDF插件、配置环境变量的步骤,并提供了串口状态判断方法。最终成功构建并下载Blink例程到合宙ESP32-C3经典款开发板。 关键词:ESP32-C3、开发环境搭建、串口下载、ESP-IDF、VSCode

2024-07-23 19:07:34 3680

原创 VSCode+arm-none-eabi-gcc交叉编译+Makefile构建+OpenOCD(基于STM32标准库的保姆级教程)

本文介绍了嵌入式开发常用的IDE工具,重点讲解了如何搭建基于VSCode的开源嵌入式开发环境。文章列举了Keil、IAR、VSCode等通用IDE,以及STM32CubeMX、Arduino等专用IDE,并详细说明了所需工具的安装配置步骤,包括VSCode编辑器、ARM交叉编译器arm-none-eabi-gcc和Windows平台的MinGW64工具链。作者推荐使用xPack开源仓库获取工具资源,并提供了详细的下载链接和环境变量设置指南,帮助开发者快速配置完整的嵌入式开发环境。

2024-07-20 17:48:15 6741 16

原创 基于C语言的滑动平均滤波算法

【代码】基于C语言的滑动平均滤波算法。

2024-07-10 17:36:54 1025

原创 STM32-HAL库的EXTI外部中断不能使用HAL_Delay( )函数的问题剖析

在上一篇文章中,我们讲到了使用外部中断不能退出的原因,这次我们来说另外一个原因:在外部中断中使用HAL_Delay()函数会进入死循环。我看网上很多大佬说,把系统滴答定时器的优先级调高或者自定义1个延时函数替代HAL_Delay(),我个人更偏向于后者。例如下述实例,在中断回调服务函数里调用HAL_Delay(),会导致卡死,无法外部按键触发中断。低优先级(发生了中断嵌套),导致系统滴答定时器不执行,无法进行滴答定时,上述的。, 意为:当系统滴答定时时间小于等待预设时间,则循环,否则退出。

2024-07-09 12:06:05 1070 1

原创 什么是服务器?有什么用?

服务器是一种高性能计算机,全年不间断运行,负责数据接收、处理和存储,支撑互联网各种在线服务。NAS属于小型文件服务器,而云服务器是互联网公司提供的虚拟化服务器资源。个人PC也能搭建服务器,但性能有限,可用于部署个人网站、应用等。服务器崩溃将导致相关服务不可用。

2024-07-07 22:52:26 474

原创 STM32-HAL库调试外部中断EXTI的问题剖析

STM32_HAL库调试外部中断EXTI的问题

2024-07-07 15:47:29 1497

原创 基于arm-none-eabi-gcc编译工具链的串口重定向printf

【摘要】本文介绍了在VSCode基于arm-none-eabi-gcc工具链和Keil MDK基于armcc工具链下实现STM32串口重定向printf输出的差异。重点讲解了GCC环境下的配置方法:1)修改Makefile添加浮点数支持选项(-u_printf_float);2)创建syscalls.c文件实现底层I/O重定向,包含_write和_read函数,分别通过HAL库或标准库实现串口收发功能。文章还对比了GCC与非GCC(Keil/IAR)编译环境下的实现差异,提供了完整的代码示例和配置说明。

2024-07-06 19:47:28 1905 2

原创 VSCode+arm-none-eabi-gcc交叉编译+Makefile构建+OpenOCD(基于STM32的HAL库)

相对路径好了,到这里就解决了报错未定义库函数的问题,其实这和keil的引入源文件和包含头文件路径的思路一样,只是以前习惯了keil的UI界面包含方式,换成Makefile方式包含,终究是有点不习惯,后面有时间还是好好学习一下Makefile的语法规则吧(立个flag!最后还是要重申一遍!!!!!注意,在Makefile中,源文件是引入到具体的.c文件,头文件是包含其相对路径。

2024-07-06 13:21:25 1480

原创 armcc、armclang、arm-none-eabi-gcc这3个嵌入式交叉编译工具链有什么区别?

嵌入式开发领域存在多种工具链选择:ARM公司开发的armcc(第5代)和armclang(第6代)是商业闭源工具链,集成于Keil IDE;而开源的arm-none-eabi-gcc基于GNU工具链,支持跨平台开发,可与VSCode等IDE配合使用。PC端开发常用GCC(开源)、MSVC(微软闭源)和Clang(苹果基于LLVM的开源编译器)。项目构建方面,Make工具解析Makefile脚本实现多文件编译,而CMake则通过CMakeList.txt自动生成跨平台的构建脚本(如Makefile),简化复杂

2024-07-05 12:08:28 6105

原创 两款VSCode编码主题:Moonlight Night 和 Dracula Theme Official

本文介绍了VSCode主题设置方法,推荐Moonlight Night和Dracula两款主题。通过修改settings.json配置文件,可以自定义编码格式、自动保存、图标主题、字体大小等多项参数。文中提供了完整的配置示例代码,包含详细注释说明各配置项功能。建议用户下载不同主题亲自体验,同时也欢迎分享其他美观简洁的主题推荐。配置内容包括编辑器缩放、终端调整等实用功能,帮助优化VSCode使用体验。

2024-07-05 10:28:44 1033

原创 (真实有效)解决使用VSCode打开基于Keil开发的STM32工程时,头文件出现红色波浪线问题(基于Keil Assistant插件)

摘要:作者在配置VSCode+Keil Assistant插件时遇到头文件红色波浪线提示问题,尝试了三种方案均未解决:禁用严格提醒(治标不治本)、删除.vscode文件夹、检查MinGW安装。最终发现正确方法是:用VSCode直接打开Keil工程文件(.uvprojx)所在文件夹,而非整个工程目录,问题得以解决。关键点在于正确的文件打开方式,而非配置修改。

2024-07-04 00:10:34 6477 19

原创 同相放大器和反相放大器的区别

反相放大器输出的是负值,需要再用一个放大系数为1的反相放大器输出正值,你要问为什么?请看图。根据公式,同相放大器即便是R1为零,它的放大倍数也是1;反相放大器就不同了,放大倍数可以小于1,只不过是负的。假如R1/R2=10K/100K=-0.1倍,再用一个放大系数为1反相放大器就成了正0.1倍,楼主的需要就可以实现了。...

2021-11-15 09:46:30 10948

原创 运放选型注意事项

运放选型参数:1.压摆率2.输入失调电压:在差分放大器的两个输入端加有相等的输入电压时,差分输出电压称为输出失调电压。(输出端为0时,2个输入端之间的补偿电压,即差值或者2个输入端的电压相同时,输出端的电压),毫伏级信号放大选择uA级别失调电压运放3.失调电流4.驱运放选型参数:压摆率输入失调电压:在差分放大器的两个输入端加有相等的输入电压时,差分输出电压称为输出失调电压。(输出端为0时,2个输入端之间的补偿电压,即差值或者2个输入端的电压相同时,输出端的电压),毫伏级信号放大选择u

2021-11-15 00:43:23 1749

syscalls.c-STM32的系统调用源文件

GCC编译器用于串口打印printf的重定向

2024-12-06

keil 4和keil 5的版本兼容支持包

keil 4和keil 5的版本兼容支持包

2024-10-19

everything.exe(单文件-绿色免安装版)

everything.exe(单文件-绿色免安装版)

2024-10-19

MinGW安装包:分离线免安装版和在线安装版,建议使用离线免安装版

离线安装版的安装方式:将其解压,放在一个软件常安装的地方,设置MinGW中的bin文件夹为系统环境变量。 如果您不是很看得懂,请移步该优快云博客链接:https://blog.youkuaiyun.com/ZZLLLLLLZ/article/details/140530074

2024-09-03

sed安装包:sed-4.2.1-setup.exe

默认安装即可,会生成GnuWin32文件夹

2024-09-03

UsbDriverTool-2.1.exe,用于OpenOCD下替换J-Link驱动并恢复原来的J-Link驱动

UsbDriverTool-2.1.exe,用于OpenOCD下替换J-Link驱动并恢复原来的J-Link驱动

2024-10-19

基于STM32F103的HC-05蓝牙串口点灯程序.zip

使用手机App发送指令,对单片机进行开关灯操作,后续会将单片机的数据进行上传。

2021-08-04

基于STM32的HC-SR04超声波测距的例程.zip

使用STM32F103单片机测量超声波距离

2021-08-04

空空如也

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

TA关注的人

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