<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[2201_75657992的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/2201_75657992</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; 2201_75657992]]></copyright><item><title><![CDATA[【无标题】]]></title><link>https://blog.youkuaiyun.com/2201_75657992/article/details/163282330</link><guid>https://blog.youkuaiyun.com/2201_75657992/article/details/163282330</guid><author>2201_75657992</author><pubDate>Mon, 31 Aug 2026 09:18:24 +0800</pubDate><description><![CDATA[开机之后，QEMU 模拟器启动时，每个 CPU 核心都会跳转到 0x80000000
所有核心执行相同的启动代码，但通过 mhartid 区分不同的核心。不同的cpu的栈地址也是不同的。不同的cpu会共享内存，但是各自的寄存器在物理上是完全分开的，所以不用担心竞争问题。
stack0和mscratch0都在.bss段，操作系统一开始是按照实际的物理地址加载的。
这两个数据结构在启动初期都会使用。具体在start.c代码中使用。
在start函数中，主要是对一些中断的处理。设置定时器中断，并且设置最后切换到S]]></description><category></category></item><item><title><![CDATA[设置 ESP-IDF 开发环境所需的所有环境变量]]></title><link>https://blog.youkuaiyun.com/2201_75657992/article/details/161794184</link><guid>https://blog.youkuaiyun.com/2201_75657992/article/details/161794184</guid><author>2201_75657992</author><pubDate>Mon, 08 Jun 2026 11:44:13 +0800</pubDate><description><![CDATA[source ~/esp/esp-idf/export.sh]]></description><category></category></item><item><title><![CDATA[无人机双模态小目标检测--Weakly Misalignment-free Adaptive Feature Alignment for UAVs-based Multimodal...]]></title><link>https://blog.youkuaiyun.com/2201_75657992/article/details/160022925</link><guid>https://blog.youkuaiyun.com/2201_75657992/article/details/160022925</guid><author>2201_75657992</author><pubDate>Fri, 10 Apr 2026 15:41:19 +0800</pubDate><description><![CDATA[CSOMODAFIndex所以如果只写 YAML，不改，程序会在解析模块名时直接失败。当前我们做的扩展，本质上就是教这个解析器识别新模块。__init__()：两个模态共享权重，用来抽取 modal-invariant 信息：各自抽取 modality-specific 信息：在估计 offset 前做特征增强：把增强后的 common 特征映射为 2 通道偏移（dx, dy）：控制 Stage I/II 行为（这个是我们加的）：缓存当前 forward 的中间输出，供 loss 读取。]]></description><category></category></item><item><title><![CDATA[qt6高仿qq登录界面]]></title><link>https://blog.youkuaiyun.com/2201_75657992/article/details/160020744</link><guid>https://blog.youkuaiyun.com/2201_75657992/article/details/160020744</guid><author>2201_75657992</author><pubDate>Fri, 10 Apr 2026 13:43:47 +0800</pubDate><description><![CDATA[本文详细介绍了一个基于 Qt/C++ 的现代化登录界面的实现，重点讲解其核心动画效果——动态光晕背景（Orb Animation）。动态光晕背景动画（不规则形状、淡入淡出、蠕动效果）无边框窗口与自定义拖拽圆角渐变背景自定义 UI 组件（复选框、下拉箭头等）流畅的 60fps 动画渲染// 选中状态：蓝色圆形 + 白色对勾// 绘制对勾} else {// 未选中状态：白色圆形 + 灰色边框// 绘制文本动态光晕系统。]]></description><category></category></item><item><title><![CDATA[从0做一个小型内存泄露检测器（2）: elf文件的动态链接]]></title><link>https://blog.youkuaiyun.com/2201_75657992/article/details/159730235</link><guid>https://blog.youkuaiyun.com/2201_75657992/article/details/159730235</guid><author>2201_75657992</author><pubDate>Fri, 10 Apr 2026 11:21:13 +0800</pubDate><description><![CDATA[过程链接表，存放跳转代码的桩函数: 全局偏移表，存放外部函数的实际地址它们配合实现延迟绑定 (Lazy Binding)，即首次调用时才解析函数地址。==8#else根据指针大小自动选择 32 位或 64 位 ELF 结构ElfW(Dyn)会展开为Elf64_Dyn或Elf32_Dyn从重定位信息中提取符号索引为什么需要这个？同一份代码可以在 32 位和 64 位系统上编译ELF 格式在不同架构上有细微差异fill:#333;important;important;]]></description><category></category></item><item><title><![CDATA[# 从 0 做一个小型内存泄漏检测器：开篇与架构设计]]></title><link>https://blog.youkuaiyun.com/2201_75657992/article/details/159681847</link><guid>https://blog.youkuaiyun.com/2201_75657992/article/details/159681847</guid><author>2201_75657992</author><pubDate>Tue, 31 Mar 2026 11:16:15 +0800</pubDate><description><![CDATA[摘要： 本文介绍了一种小型内存泄漏检测器的设计思路与实现方法，旨在快速定位内存泄漏问题。检测器通过拦截内存分配/释放调用，记录分配时的调用栈信息，并维护全局状态跟踪未释放的内存块。其架构分为拦截层（重定向内存操作）、跟踪层（记录存活分配）、回溯层（获取调用栈）及控制层（动态生成报告）。该工具以低接入成本缩小排查范围，将问题从&quot;全进程&quot;聚焦到具体调用链，支持实时快照与交互控制，适合工程场景快速定位泄漏源。设计采用渐进式优化思路，便于逐步完善功能。]]></description><category></category></item><item><title><![CDATA[C++ 虚表与多态：从源码到汇编的逐步解析]]></title><link>https://blog.youkuaiyun.com/2201_75657992/article/details/159516074</link><guid>https://blog.youkuaiyun.com/2201_75657992/article/details/159516074</guid><author>2201_75657992</author><pubDate>Thu, 26 Mar 2026 23:02:20 +0800</pubDate><description><![CDATA[本文基于代码随想录最强八股文给出的 C++ 源码与对应的 x86-64（System V ABI 风格）反汇编，按“程序运行流程”一步步解释]]></description><category></category></item><item><title><![CDATA[C# 通过共享内存与 C++ 宿主协同捕获软件窗口]]></title><link>https://blog.youkuaiyun.com/2201_75657992/article/details/159380423</link><guid>https://blog.youkuaiyun.com/2201_75657992/article/details/159380423</guid><author>2201_75657992</author><pubDate>Tue, 24 Mar 2026 14:35:44 +0800</pubDate><description><![CDATA[本文围绕 CaptureHost 与 ModernWindowCaptureControl 的协同实现，系统讲解了窗口捕获链路从“会话建立”到“帧消费显示”的完整过程。文章先拆解 framePool 与 session 的职责边界：前者承载帧缓冲与回调触发，后者负责捕获会话的启动与停止；随后说明 FrameArrived 回调如何完成取帧、尺寸变化重建、GPU 到 CPU 数据拷贝、共享内存写入及事件通知。结合 C# 端代码，进一步分析 FrameHeader 协议、像素格式与按行拷贝的对齐细节。]]></description><category></category></item><item><title><![CDATA[C++中的显式类型转换]]></title><link>https://blog.youkuaiyun.com/2201_75657992/article/details/155783896</link><guid>https://blog.youkuaiyun.com/2201_75657992/article/details/155783896</guid><author>2201_75657992</author><pubDate>Wed, 10 Dec 2025 16:07:22 +0800</pubDate><description><![CDATA[能用。]]></description><category></category></item><item><title><![CDATA[双指针总结]]></title><link>https://blog.youkuaiyun.com/2201_75657992/article/details/155780343</link><guid>https://blog.youkuaiyun.com/2201_75657992/article/details/155780343</guid><author>2201_75657992</author><pubDate>Wed, 10 Dec 2025 14:27:54 +0800</pubDate><description><![CDATA[非常简单的题，一遍过，给出我的丑陋代码；第一种是我的做法，第二个是官方的，两个算法都做到了。感觉我的代码和官方给的题解差不多。似乎都是O（N）。毕竟j是从头到尾走完的，i也是，没有N2这种复杂度，就是我的判断逻辑过于复杂了，没有官方的逻辑那么清晰。你的算法只有在遇到0时才交换，非零之间不会乱序；官方算法将非零按出现顺序写入前面，也不改变顺序。]]></description><category></category></item><item><title><![CDATA[最长连续序列]]></title><link>https://blog.youkuaiyun.com/2201_75657992/article/details/155745460</link><guid>https://blog.youkuaiyun.com/2201_75657992/article/details/155745460</guid><author>2201_75657992</author><pubDate>Tue, 09 Dec 2025 15:19:49 +0800</pubDate><description><![CDATA[开一个容纳最大元素的数组，对于每一个元素，放到这个数据的时候，看左右侧元素是否已经存在，如果单侧存在则加单侧的目前的长度，都存在的话说明自己已经连上了，就加上左右两侧的长度和自己。比如4，1，3，2就是会如图所示。但是边界条件有点麻烦，比如0元素的话，就不用判断左侧元素，只用处理右侧，还有可能最大的元素也不用判断左侧元素。话说可以这样，如果放置的元素可以把两端连接起来的话，新的连续序列的两端依旧去存放这个序列的长度。再放置5的话，5不能看到左侧的连续序列的长度是多少，好像也没办法可以解决这个问题。]]></description><category></category></item><item><title><![CDATA[C++并发编程（4）——死锁问题]]></title><link>https://blog.youkuaiyun.com/2201_75657992/article/details/155735353</link><guid>https://blog.youkuaiyun.com/2201_75657992/article/details/155735353</guid><author>2201_75657992</author><pubDate>Tue, 09 Dec 2025 11:40:27 +0800</pubDate><description><![CDATA[场景一：互斥锁的嵌套获取导致死锁。解决方法是使用std::lock同时锁定多个互斥量。场景二：在持有锁时调用用户代码可能导致死锁。解决方法是在持有锁时避免调用可能获取其他锁的代码。场景三：固定顺序获取锁不一致导致死锁。解决方法是确保所有线程以相同的顺序获取锁。层次锁。]]></description><category></category></item><item><title><![CDATA[C++并发编程（3）——资源竞争下的安全栈]]></title><link>https://blog.youkuaiyun.com/2201_75657992/article/details/155733510</link><guid>https://blog.youkuaiyun.com/2201_75657992/article/details/155733510</guid><author>2201_75657992</author><pubDate>Tue, 09 Dec 2025 10:46:19 +0800</pubDate><description><![CDATA[继承自。重写了what()函数，返回错误信息。const：保证这个函数不会修改对象状态。throw()：老式的异常说明，表示函数不会抛出异常（C++11 之后用noexcept，这里是书上经典写法）。以后当栈为空却调用pop时，就会抛出这个异常。]]></description><category></category></item><item><title><![CDATA[C++并发编程]]></title><link>https://blog.youkuaiyun.com/2201_75657992/article/details/155613624</link><guid>https://blog.youkuaiyun.com/2201_75657992/article/details/155613624</guid><author>2201_75657992</author><pubDate>Sun, 07 Dec 2025 17:20:36 +0800</pubDate><description><![CDATA[if (!在单线程empty()为真 ⇒top()一定有元素、不会 UBtop()和pop()连续执行，中间没有别的线程来插刀所以这是安全的代码。]]></description><category></category></item><item><title><![CDATA[C++之“虚”篇]]></title><link>https://blog.youkuaiyun.com/2201_75657992/article/details/155458092</link><guid>https://blog.youkuaiyun.com/2201_75657992/article/details/155458092</guid><author>2201_75657992</author><pubDate>Tue, 02 Dec 2025 12:58:05 +0800</pubDate><description><![CDATA[菱形继承问题发生在多重继承中，当一个派生类同时继承两个类的相同基类时，会导致该基类的成员变量和函数被多次继承，形成多余的冗余数据和不必要的复杂性。虚基类是虚继承的基础。当一个类通过虚继承继承另一个类时，继承的那个类就被称为虚基类。它允许通过基类的指针或引用调用派生类中的重写函数，而不管指针或引用的类型是什么。如果基类有纯虚函数，派生类必须提供一个实现，否则派生类也会变成抽象类，不能实例化。虚继承要求虚基类的构造函数只能由最派生类的构造函数调用。如果派生类没有重写该函数，它会继承基类的实现。]]></description><category></category></item><item><title><![CDATA[stm32入门（9）]]></title><link>https://blog.youkuaiyun.com/2201_75657992/article/details/155313874</link><guid>https://blog.youkuaiyun.com/2201_75657992/article/details/155313874</guid><author>2201_75657992</author><pubDate>Mon, 01 Dec 2025 16:40:41 +0800</pubDate><description><![CDATA[按数据传送方式:按数据传送方向:按数据同步方式:同步传输异步传输:显然同步传输的数据率更高第一部分是引脚：用于发送数据的输出引脚。：该引脚负责将数据发送到外部设备，例如传输给串口外设。：用于接收数据的输入引脚。：该引脚接收来自外部设备的数据，通常用于接收串口数据。：数据接收引脚，仅在单线和智能卡模式下使用。：在这两种模式下，它作为接收数据的引脚。它是一个内部引脚，并没有对应的外部引脚。：请求发送引脚，低电平有效。：在启用硬件流控制的情况下，接收器准备好接收新数据时，nRTS 会变为低电平。]]></description><category></category></item><item><title><![CDATA[stm32入门（8）]]></title><link>https://blog.youkuaiyun.com/2201_75657992/article/details/155197628</link><guid>https://blog.youkuaiyun.com/2201_75657992/article/details/155197628</guid><author>2201_75657992</author><pubDate>Mon, 24 Nov 2025 16:07:53 +0800</pubDate><description><![CDATA[定的外设的优先级低。如果当两个的软件优先级都配置成一样，那么就比较他们在中断向。的 时 候 ， 产 生 中 断 ， 可 知 中 断 一 次 的 时 间TINT。的中断没啥意义，整个程序的重心都花在进出中断上了，根本没有时间处理其他的任务。的中断优先级分组不仅对片上外设有效，同样对内核的外设也有效。属于单片机内部的外设，不需要额外的硬件电路，剩下的只需一个。当我们比较内核外设和片上外设的中断优先级的时候，定时器的计数器是向下递减计数的，计数一次的时间。量表中的硬件编号，编号越小，优先级越高。]]></description><category></category></item><item><title><![CDATA[stm32入门篇（7）]]></title><link>https://blog.youkuaiyun.com/2201_75657992/article/details/155191482</link><guid>https://blog.youkuaiyun.com/2201_75657992/article/details/155191482</guid><author>2201_75657992</author><pubDate>Mon, 24 Nov 2025 13:40:42 +0800</pubDate><description><![CDATA[GPIO_EXTILineConfig() → 把某个 GPIO 引脚“映射”到 EXTIx 线路，EXTI线路在NVIC初始化中进行了连接配置，至此全套流程打通。NVIC来自EXTI的中断源，有几个是共用一个中断号，在ISR中要做区分。如果允许中断且信号为 1 → EXTI_PR 对应位被置 1。如上代码，先进行全局的优先级分组设置，再进行每个组的赋值！它不是某个中断专用，也不能给不同中断设置不同的分组。→ 输出 1 给后面的中断路径和事件路径。→ 屏蔽中断（即使有边沿也不会产生中断）]]></description><category></category></item><item><title><![CDATA[stm32入门篇（6）]]></title><link>https://blog.youkuaiyun.com/2201_75657992/article/details/155188966</link><guid>https://blog.youkuaiyun.com/2201_75657992/article/details/155188966</guid><author>2201_75657992</author><pubDate>Mon, 24 Nov 2025 10:51:08 +0800</pubDate><description><![CDATA[它的“时钟”可以理解为紧跟系统总线时钟，一直在工作；你做的只是给它配置“访问时间参数”（Latency）和“预取功能”。是一个定时器，用 SYSCLK（或其分频）作为计时源，经常被 RTOS 用来当“系统滴答”。图上 HSE 块只是“接口 + 控制电路”，真正的振荡元件在芯片外。是“独立的日历/时间计时模块”，通常用低速时钟、可掉电保持。：要在板子上焊“石英石头”（晶振）或有源模块 → 外部时钟。：在芯片“肚子里”的 RC，什么都不用接 → 内部时钟。是“时钟和复位管理模块”；真正的“时钟产生器件”在。]]></description><category></category></item><item><title><![CDATA[stm32入门篇（4）]]></title><link>https://blog.youkuaiyun.com/2201_75657992/article/details/155162027</link><guid>https://blog.youkuaiyun.com/2201_75657992/article/details/155162027</guid><author>2201_75657992</author><pubDate>Sun, 23 Nov 2025 15:50:35 +0800</pubDate><description><![CDATA[访问位带别名区的这些字时，就可以达到访问位带区某个比特位的目的。位才有效，所以干脆就把高三位屏蔽掉来达到减去起始地址的效果，初始化结构体赋值，把引脚初始化成浮空输入模式，其中的。对于片上外设位带区的某个比特，记它所在字节的地址为。从按键的原理图可知，这些按键在没有被按下的时候，地址的序号，因为一个位经过膨胀后是四个字。为什么是屏蔽高三位？位带区的某个比特，记它所在字节的地址为。有自己的位带别名区，位带别名区把这。中，有两个地方实现了位带，一个是。的空间的每一个位膨胀成一个。是外设位带别名区的起始地址，]]></description><category></category></item></channel></rss>