<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Posts on 19y的技术栈</title><link>https://www.19y.cc/post/</link><description>Recent content in Posts on 19y的技术栈</description><generator>Hugo</generator><language>zh-cn</language><copyright>19y</copyright><lastBuildDate>Tue, 11 Aug 2026 12:40:00 +0800</lastBuildDate><atom:link href="https://www.19y.cc/post/index.xml" rel="self" type="application/rss+xml"/><item><title>Windows VS Code 写代码环境：openvela 的补全与跳转</title><link>https://www.19y.cc/p/openvela-windows-vscode-setup/</link><pubDate>Tue, 11 Aug 2026 12:40:00 +0800</pubDate><guid>https://www.19y.cc/p/openvela-windows-vscode-setup/</guid><description>&lt;p&gt;本文只覆盖 &lt;strong&gt;编辑 + 自动补全 + 函数跳转&lt;/strong&gt;。编译 / 烧录 / 断点调试的完整硬件链路见
&lt;a href="https://www.19y.cc/p/openvela-windows-build-debug/"&gt;Windows 下 openvela 的编译、烧录与调试&lt;/a&gt;；任务入口已在
&lt;code&gt;.vscode/tasks.json&lt;/code&gt; / &lt;code&gt;launch.json&lt;/code&gt; 预留为 scaffold。&lt;/p&gt;
&lt;h2 id="正确架构必须遵守"&gt;正确架构（必须遵守）&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;┌──────────────────────────────────────────────────────────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ VS Code Remote - WSL（唯一推荐的写代码窗口） │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ 编辑 / 补全 / 跳转 → WSL 内 ms-vscode.cpptools │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ + Linux arm-none-eabi-gcc │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ + NuttX/openvela 真实头文件 │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ 编译（后续） → 仍在 WSL 跑 openvela 工具链 │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ 烧录（后续） → Windows CubeProgrammer + ST-LINK │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ 调试（后续） → Windows OpenOCD + Cortex-Debug │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ request: attach, loadFiles: [] │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└──────────────────────────────────────────────────────────────┘
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;职责&lt;/th&gt;
&lt;th&gt;跑在哪&lt;/th&gt;
&lt;th&gt;为什么&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;源码编辑、补全、跳转&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;WSL&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;NuttX 大量 Linux 绝对路径符号链接；Windows 本地 C/C++ 扩展会跟丢，并混用 Windows newlib 与 NuttX libc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;固件编译&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;WSL&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;openvela 官方工具链与 &lt;code&gt;build.sh&lt;/code&gt; 是 Linux 路径&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;QSPI 烧录&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Windows&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;STM32H750 超 128 KiB 片内 Flash 时，用 CubeProgrammer External Loader 写外部 QSPI；OpenOCD 不负责下载&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;断点调试&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Windows OpenOCD&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ST-LINK 由 Windows 访问；GDB 只 attach 符号，不再 load flash&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;不要&lt;/strong&gt;把下面的 UNC 路径当普通 Windows 文件夹长期写代码：&lt;/p&gt;</description></item><item><title>Windows 下 openvela 的编译、烧录与调试（STM32H750B-DK）</title><link>https://www.19y.cc/p/openvela-windows-build-debug/</link><pubDate>Tue, 11 Aug 2026 12:30:00 +0800</pubDate><guid>https://www.19y.cc/p/openvela-windows-build-debug/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;写代码（补全 / 跳转）请先看&lt;/strong&gt;
&lt;a href="https://www.19y.cc/p/openvela-windows-vscode-setup/"&gt;Windows VS Code 写代码环境&lt;/a&gt;。
本文侧重编译、QSPI 烧录与 Cortex-Debug；编辑窗口必须是 Remote - WSL。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="方案边界"&gt;方案边界&lt;/h2&gt;
&lt;p&gt;STM32H750XBH6 只有 128 KiB 片内 Flash。超过该容量的 openvela 镜像采用：&lt;/p&gt;</description></item><item><title>从空白工程到点亮 STM32H750B-DK 第一颗 LED</title><link>https://www.19y.cc/p/openvela-first-led/</link><pubDate>Tue, 11 Aug 2026 12:00:00 +0800</pubDate><guid>https://www.19y.cc/p/openvela-first-led/</guid><description>&lt;p&gt;本文记录我们这一路从 openvela 竞赛模板走到 STM32H750B-DK 点亮第一颗 LED 的完整过程。&lt;/p&gt;
&lt;p&gt;它不是只告诉你“改哪一行”，而是帮你建立一套迁移思维：你已经有 STM32HAL、FreeRTOS、LwIP、FatFs、Modbus 经验，那么学习 openvela/NuttX 时，最重要的是把已有经验映射到 NuttX 的概念上。&lt;/p&gt;</description></item><item><title>STM32H750B-DK 的 QSPI-XIP 构建、烧录与启动机制</title><link>https://www.19y.cc/p/stm32h750-qspi-xip-deep-dive/</link><pubDate>Tue, 11 Aug 2026 11:00:00 +0800</pubDate><guid>https://www.19y.cc/p/stm32h750-qspi-xip-deep-dive/</guid><description>&lt;p&gt;本文解释本项目在 STM32H750B-DK 上使用外部 QSPI 作为主镜像、片内
Flash 作为启动 stub 的完整链路。重点不是“执行哪条命令”，而是说明：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;地址为什么是 0x08000000 和 0x90000000 两套空间；&lt;/li&gt;
&lt;li&gt;Kconfig 如何影响链接脚本，链接脚本如何影响 ELF、HEX 和 BIN；&lt;/li&gt;
&lt;li&gt;为什么板上需要两个持久化镜像；&lt;/li&gt;
&lt;li&gt;STM32CubeProgrammer 的 External Loader 到底是什么；&lt;/li&gt;
&lt;li&gt;boot stub 如何把 QSPI 变成 CPU 可以直接取指的 XIP 地址；&lt;/li&gt;
&lt;li&gt;烧录成功但不能启动时，应该从哪里开始定位。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;本文对应我们在 openvela 项目中的实际实现，主要参考资料包括项目仓库里的
&lt;code&gt;windows_build_openvela.ps1&lt;/code&gt;、&lt;code&gt;windows_flash_cube.ps1&lt;/code&gt;、QSPI 补丁
&lt;code&gt;openvela-qspi-boot-stm32h750b-dk.patch&lt;/code&gt;、boot stub 源码
&lt;code&gt;stm32h750b_qspi_bootstub.c&lt;/code&gt; 与链接脚本 &lt;code&gt;stm32h750b_qspi_bootstub.ld&lt;/code&gt;，
以及配套的 &lt;a href="https://www.19y.cc/p/openvela-windows-build-debug/"&gt;Windows 编译/烧录/调试指南&lt;/a&gt;。&lt;/p&gt;</description></item><item><title>VelaGuard 架构决策记录：边缘网关的五条可靠性设计原则</title><link>https://www.19y.cc/p/velaguard-architecture-decisions/</link><pubDate>Tue, 11 Aug 2026 10:00:00 +0800</pubDate><guid>https://www.19y.cc/p/velaguard-architecture-decisions/</guid><description>&lt;p&gt;VelaGuard 是我们在 openvela（NuttX）上为 STM32H750B-DK 开发的一款工业边缘网关：它通过 Modbus 采集现场数据，在本地完成规则判断与告警，再经由 MQTT 把关键信息上送云端，并借助 AI 助手完成诊断与配置建议。&lt;/p&gt;</description></item><item><title>CubeMX关于刹车输入的一个小BUG</title><link>https://www.19y.cc/p/cubemx%E5%85%B3%E4%BA%8E%E5%88%B9%E8%BD%A6%E8%BE%93%E5%85%A5%E7%9A%84%E4%B8%80%E4%B8%AA%E5%B0%8Fbug/</link><pubDate>Sat, 24 May 2025 12:09:21 +0800</pubDate><guid>https://www.19y.cc/p/cubemx%E5%85%B3%E4%BA%8E%E5%88%B9%E8%BD%A6%E8%BE%93%E5%85%A5%E7%9A%84%E4%B8%80%E4%B8%AA%E5%B0%8Fbug/</guid><description>&lt;p&gt;STM32CUBEMX在配置定时器PWM输出的刹车输入引脚时&lt;/p&gt;
&lt;p&gt;要注意配置的刹车极性和对应引脚的上下拉模式是否相反&lt;/p&gt;
&lt;p&gt;若不相反，则会导致复位启动时无法产生对应的波形。&lt;/p&gt;</description></item><item><title>蓝桥杯嵌入式选择题部分错题集</title><link>https://www.19y.cc/p/blue-bridge-cup-choose/</link><pubDate>Fri, 04 Apr 2025 14:56:49 +0800</pubDate><guid>https://www.19y.cc/p/blue-bridge-cup-choose/</guid><description>&lt;p&gt;&lt;img alt="蓝桥杯嵌入式选择题错题集截图 1" loading="lazy" src="Pasted%20image%2020250217104715.png"&gt;
&lt;img alt="蓝桥杯嵌入式选择题错题集截图 2" loading="lazy" src="Pasted%20image%2020250217104803.png"&gt;
&lt;img alt="蓝桥杯嵌入式选择题错题集截图 3" loading="lazy" src="Pasted%20image%2020250217115425.png"&gt;
&lt;img alt="蓝桥杯嵌入式选择题错题集截图 4" loading="lazy" src="Pasted%20image%2020250217151824.png"&gt;
&lt;img alt="蓝桥杯嵌入式选择题错题集截图 5" loading="lazy" src="Pasted%20image%2020250217152223.png"&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE]&lt;/p&gt;
&lt;h4 id="关键字"&gt;&lt;strong&gt;关键字 &lt;code&gt;inline&lt;/code&gt; 的作用&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;inline&lt;/code&gt; 是 C/C++ 中的关键字，用于建议编译器将函数&lt;strong&gt;内联展开&lt;/strong&gt;（即在调用处直接插入函数代码，而非生成函数调用指令）。它的主要影响包括：&lt;/p&gt;</description></item><item><title>全场景md测试</title><link>https://www.19y.cc/p/slugtest/</link><pubDate>Fri, 04 Apr 2025 13:05:19 +0800</pubDate><guid>https://www.19y.cc/p/slugtest/</guid><description>&lt;h1 id="markdown-全格式测试文档"&gt;Markdown 全格式测试文档&lt;/h1&gt;
&lt;h2 id="1-标题与段落"&gt;1. 标题与段落&lt;/h2&gt;
&lt;p&gt;这是普通段落，展示&lt;strong&gt;加粗&lt;/strong&gt;、&lt;em&gt;斜体&lt;/em&gt;、&lt;del&gt;删除线&lt;/del&gt;和&lt;code&gt;行内代码&lt;/code&gt;。&lt;br&gt;
换行需在行尾添加两个空格或使用&lt;code&gt;&amp;lt;br&amp;gt;&lt;/code&gt;标签。&lt;/p&gt;
&lt;h2 id="2-列表与任务"&gt;2. 列表与任务&lt;/h2&gt;
&lt;h3 id="无序列表"&gt;无序列表&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;苹果&lt;/li&gt;
&lt;li&gt;香蕉
&lt;ul&gt;
&lt;li&gt;进口香蕉&lt;/li&gt;
&lt;li&gt;本地香蕉&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="有序列表"&gt;有序列表&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;打开IDE&lt;/li&gt;
&lt;li&gt;创建项目&lt;/li&gt;
&lt;li&gt;编写代码&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="任务列表"&gt;任务列表&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; 学习Markdown基础&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 掌握高级表格技巧&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="3-代码与语法高亮"&gt;3. 代码与语法高亮&lt;/h2&gt;
&lt;p&gt;行内代码：&lt;code&gt;print(&amp;quot;Hello Markdown&amp;quot;)&lt;/code&gt;&lt;/p&gt;</description></item><item><title>全格式测试</title><link>https://www.19y.cc/p/%E5%85%A8%E6%A0%BC%E5%BC%8F%E6%B5%8B%E8%AF%95/</link><pubDate>Fri, 04 Apr 2025 12:55:58 +0800</pubDate><guid>https://www.19y.cc/p/%E5%85%A8%E6%A0%BC%E5%BC%8F%E6%B5%8B%E8%AF%95/</guid><description>&lt;h1 id="markdown-全格式测试文档"&gt;Markdown 全格式测试文档&lt;/h1&gt;
&lt;h2 id="1-标题与段落"&gt;1. 标题与段落&lt;/h2&gt;
&lt;p&gt;这是普通段落，展示&lt;strong&gt;加粗&lt;/strong&gt;、&lt;em&gt;斜体&lt;/em&gt;、&lt;del&gt;删除线&lt;/del&gt;和&lt;code&gt;行内代码&lt;/code&gt;。&lt;br&gt;
换行需在行尾添加两个空格或使用&lt;code&gt;&amp;lt;br&amp;gt;&lt;/code&gt;标签。&lt;/p&gt;
&lt;h2 id="2-列表与任务"&gt;2. 列表与任务&lt;/h2&gt;
&lt;h3 id="无序列表"&gt;无序列表&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;苹果&lt;/li&gt;
&lt;li&gt;香蕉
&lt;ul&gt;
&lt;li&gt;进口香蕉&lt;/li&gt;
&lt;li&gt;本地香蕉&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="有序列表"&gt;有序列表&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;打开IDE&lt;/li&gt;
&lt;li&gt;创建项目&lt;/li&gt;
&lt;li&gt;编写代码&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="任务列表"&gt;任务列表&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; 学习Markdown基础&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 掌握高级表格技巧&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="3-代码与语法高亮"&gt;3. 代码与语法高亮&lt;/h2&gt;
&lt;p&gt;行内代码：&lt;code&gt;print(&amp;quot;Hello Markdown&amp;quot;)&lt;/code&gt;&lt;/p&gt;</description></item><item><title>Test</title><link>https://www.19y.cc/p/test/</link><pubDate>Fri, 04 Apr 2025 11:54:34 +0800</pubDate><guid>https://www.19y.cc/p/test/</guid><description/></item></channel></rss>