自定义博客皮肤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 217

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

本文详细介绍了Raspberry Pi Pico开发环境的搭建步骤。首先安装Pico SDK核心工具包,包含pico-sdk、picotool和pico-sdk-tools三个关键组件;然后获取pico-examples例程包。接着安装ARM交叉编译器、CMake、Ninja、GNU Make等构建工具,以及OpenOCD调试器和J-Link下载工具。最后配置MinGW64类Unix环境和Python环境,并推荐必要的VSCode插件。

2025-07-06 17:54:17 498

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

该摘要介绍了ESP8266/ESP32系列芯片通过GPIO 0(BOOT引脚)选择工作模式的方法。重点说明了两种进入UART-Download下载模式的操作方式:1)上电后按特定顺序操作RST和BOOT键;2)上电前按住BOOT键再供电。文章还提到可以通过添加自动下载电路(利用DTR和RTS信号)来简化下载流程,避免手动按键操作。不同ESP系列芯片的BOOT引脚编号可能不同,需注意区分。

2025-03-30 10:11:24 429

原创 显式启用-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 474

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

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

2024-12-30 15:52:30 286

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

本文介绍了Arduino IDE中ESP32/ESP8266开发板的两种安装方式:在线下载和离线安装。在线下载需在开发板管理器地址中添加国内镜像链接(esp8266.json和esp32_index.json),可显著提升下载速度。若在线下载过慢,可选择从Arduino中文社区下载离线安装包,双击即可自动完成安装。文章还区分了开发板管理器(管理芯片开发板SDK)和库管理器(管理外设第三方库)的功能差异,并指出默认安装路径分别为系统文档中的packages和libraries文件夹。

2024-12-20 17:30:56 4130

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

📚①默认情况下,CMake使用本地编译器,如gcc,而嵌入式开发需使用交叉编译器,如arm-none-eabi-gcc,因此需要明确地告知CMake使用交叉编译器。arm-none-eabi-gcc工具链发布时自带有2个基于newlib的预构建C库:一个是标准的newlib,另一个是newlib-nano(优化了代码大小)。newlib-nano相比newlib,不仅仅是库的名字上的区别。符号在前的选项,是默认选择的CMake构建生成器,如下图所示:笔者的Windows操作系统默认选择。

2024-12-17 18:48:53 4405 6

原创 解决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 7130 7

原创 嵌入式编译流程

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

2024-12-11 14:36:01 248

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

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

2024-12-05 16:51:39 501

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

NOTE:此篇文章由派生而来,对.vscode文件中各个脚本需要修改的地方作补充说明。

2024-12-05 16:34:48 819

原创 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 1424

转载 《提问的智慧》

提问的智慧

2024-11-18 14:09:45 173

原创 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 1603

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

本文对比了两种Windows环境下make工具的使用差异:MinGW-64和xpack-windows-build-tools。使用MinGW的mingw32-make.exe需要采用Windows CMD的-del命令语法,而xpack的make.exe则支持Linux风格的-rm命令。作者建议优先选择xpack-windows-build-tools,因其是从Linux移植的开源构建工具包,在Windows上提供了更接近Linux的使用体验。

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

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

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

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

原创 常用的代码注释标签

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

2024-09-11 20:34:04 400

原创 变量/函数命名规则

①小驼峰命名,首单词首字母小写+后面每个单词首字母大写,举例:printEmployeePaychecks();firstName;②大驼峰命名(帕斯卡命名法),每个单词首字母大写,举例:PrintEmployeePaychecks();FirstName;二、下划线法(蛇形命名法),所有单词皆小写,以下划线分隔:print_employee_paychecks();写这篇文章,提醒自己总是记不住如何命名变量和函数。一、驼峰命名法:分小驼峰命名和大驼峰命名。

2024-09-05 10:11:27 380

原创 基于VSCode和MinGW的C/C++开发环境部署

本文介绍了在VSCode中配置C/C++开发环境的完整流程。主要内容包括:1)安装VSCode System版本;2)下载MinGW二进制集合并设置环境变量;3)配置VSCode的4个关键文件:settings.json(UI主题设置)、c_cpp_properties.json(编译器路径配置)、tasks.json(构建任务设置)和launch.json(调试配置)。文章提供了详细的参数说明和配置示例,特别强调了多文件编译时的路径设置方法,帮助开发者快速搭建C/C++开发环境。

2024-08-28 16:29:24 1067

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

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

2024-08-22 15:37:06 1649

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

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

2024-08-13 17:23:33 733

原创 解决使用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 4444 11

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

摘要:VSCode和PyCharm终端输出不一致问题的两种解决方案:1)禁用/卸载Code Runner插件;2)在设置中启用"Run In Terminal"选项。推荐方案一,并提供了不使用Code Runner时的运行快捷键(Ctrl+Alt+P运行,Ctrl+C停止,F5调试)。两种方法均可将Python程序输出重定向至VSCode虚拟终端。

2024-08-07 10:54:43 798

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

本文概述了主流芯片架构与操作系统的适配关系。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 522

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

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

2024-07-26 20:13:43 9222 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 244

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

本文详细记录了在Windows环境下搭建ESP32-C3开发环境时遇到的典型问题及解决方案。主要解决了两大问题:1)网络连接导致的ESP-IDF安装失败,建议禁用有线网络改用2.4G WiFi;2)串口驱动异常导致程序下载失败,需重装CH34X串口驱动。通过完全卸载旧环境、重新安装ESP-IDF插件、配置demo工程等步骤,最终成功实现了程序下载和串口监控。文章特别强调了驱动重装后需确保设备管理器显示正确的设备标识,并提供了构建失败时的兼容模式解决方案。

2024-07-23 19:07:34 2944

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

本文介绍了嵌入式开发中常用的IDE工具,重点推荐基于VSCode的开源开发环境搭建方案。文章列举了Keil、IAR等主流嵌入式IDE,以及VSCode、Clion等通用编辑器,并详细说明了如何配置ARM交叉编译工具链arm-none-eabi-gcc和Windows平台下的MinGW工具集。作者推荐使用xPack项目提供的预编译工具链,强调设置系统环境变量的重要性,为开发者提供了一套完整的开源嵌入式开发环境配置指南。

2024-07-20 17:48:15 5057 14

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

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

2024-07-10 17:36:54 850

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

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

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

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

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

2024-07-07 22:52:26 336

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

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

2024-07-07 15:47:29 1330

原创 基于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 1624 2

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

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

2024-07-06 13:21:25 1227

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

本文对比分析了嵌入式开发和PC端程序开发中的主流工具链与编译器。嵌入式领域主要介绍了ARM公司的armcc/armclang(闭源)和基于GCC的arm-none-eabi-gcc(开源)工具链,阐述了它们在Keil IDE和开源环境中的应用差异。PC开发领域对比了GCC(开源跨平台)、MSVC(微软闭源)和Clang(基于LLVM的开源)三大编译器特性。文章还解释了Make/CMake等构建工具的作用,说明它们如何通过脚本自动化管理多文件项目的编译流程。

2024-07-05 12:08:28 4930

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

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

2024-07-05 10:28:44 848

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

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

2024-07-04 00:10:34 4895 18

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

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

2021-11-15 09:46:30 10388

原创 运放选型注意事项

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

2021-11-15 00:43:23 1628

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关注的人

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