<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[andy0ma的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/andy0ma</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; andy0ma]]></copyright><item><title><![CDATA[复合字面量在C语言中如何使用？]]></title><link>https://blog.youkuaiyun.com/andy0ma/article/details/153968859</link><guid>https://blog.youkuaiyun.com/andy0ma/article/details/153968859</guid><author>andy0ma</author><pubDate>Mon, 27 Oct 2025 14:10:55 +0800</pubDate><description><![CDATA[复合字面量在C语言中提供了构造匿名结构体、数组或联合体的简洁方式，尤其适合临时配置、函数参数传递等场景。使用时需注意存储周期和类型匹配，避免内存安全问题。这一特性在配置驱动、嵌入式编程中尤为实用。]]></description><category></category></item><item><title><![CDATA[C语言将一个数字拷贝到一个字符串结尾]]></title><link>https://blog.youkuaiyun.com/andy0ma/article/details/151257121</link><guid>https://blog.youkuaiyun.com/andy0ma/article/details/151257121</guid><author>andy0ma</author><pubDate>Sat, 06 Sep 2025 15:36:58 +0800</pubDate><description><![CDATA[123"123"]]></description><category></category></item><item><title><![CDATA[结构体自引用时为啥不能直接使用typedef定义的新类型名?]]></title><link>https://blog.youkuaiyun.com/andy0ma/article/details/151257102</link><guid>https://blog.youkuaiyun.com/andy0ma/article/details/151257102</guid><author>andy0ma</author><pubDate>Sat, 06 Sep 2025 15:36:12 +0800</pubDate><description><![CDATA[int data;Node *next;// 指向下一个node的指针。此处为啥不能直接使用Node} Node;]]></description><category></category></item><item><title><![CDATA[C语言#if 和#ifdef的区别]]></title><link>https://blog.youkuaiyun.com/andy0ma/article/details/151081944</link><guid>https://blog.youkuaiyun.com/andy0ma/article/details/151081944</guid><author>andy0ma</author><pubDate>Mon, 01 Sep 2025 20:23:53 +0800</pubDate><description><![CDATA[都用于条件编译，但它们的用途和语法有显著区别。检查宏的值是否为非零（若未定义，视为 0）直接检查宏是否被定义（无论值是什么）支持复杂条件（如数值比较、组合逻辑）接受常量表达式（包括宏和逻辑运算）两者可以结合使用，例如通过。版本控制、动态功能配置（如。在C语言的预处理指令中，]]></description><category></category></item><item><title><![CDATA[C语言中为什么函数赋值给其他指针时，只有函数名，不带小括号？]]></title><link>https://blog.youkuaiyun.com/andy0ma/article/details/150959346</link><guid>https://blog.youkuaiyun.com/andy0ma/article/details/150959346</guid><author>andy0ma</author><pubDate>Thu, 28 Aug 2025 18:29:54 +0800</pubDate><description><![CDATA[是用于调用函数的运算符。当我们将函数赋值给指针时，需要的是函数的地址，而不是调用函数后的返回值。通过这种方式，C语言实现了函数指针的灵活使用，允许将函数作为参数传递、动态绑定等高级操作。在C语言中，函数名本身就代表函数的地址，而小括号。，而赋值时直接使用函数名（地址）。函数指针的声明需要指定函数的。]]></description><category></category></item><item><title><![CDATA[7.6,NVME控制器初始化和关闭流程]]></title><link>https://blog.youkuaiyun.com/andy0ma/article/details/150944426</link><guid>https://blog.youkuaiyun.com/andy0ma/article/details/150944426</guid><author>andy0ma</author><pubDate>Thu, 28 Aug 2025 09:40:48 +0800</pubDate><description><![CDATA[本节介绍在关机条件之前初始化控制器和关机处理的推荐过程。主机应按顺序执行以下操作，以初始化控制器，从而开始执行命令：1，根据系统配置适当设置第 2 节中所述的 PCI 和 PCI Express 寄存器，这包括电源管理功能的配置。单个中断（例如，基于引脚、单 MSI 或单 MSI-X），直到确定 I/O 端口数;2，主机通过等待 CSTS.RDY 变为“0”来，等待控制器指示任何先前的复位完成;3，应配置管理队列。通过将管理队列属性（AQA）、管理提交队列基地址（ASQ）和管理完成队列基地址（ACQ）设置为]]></description><category></category></item><item><title><![CDATA[7.3 Nvme reset]]></title><link>https://blog.youkuaiyun.com/andy0ma/article/details/150944406</link><guid>https://blog.youkuaiyun.com/andy0ma/article/details/150944406</guid><author>andy0ma</author><pubDate>Thu, 28 Aug 2025 09:39:58 +0800</pubDate><description><![CDATA[当出现以下情况时，启动 NVM 子系统复位：（1）主电源被施加到 NVM 子系统;（2）将 4 E564 D 65 h（“NVMe”）的值写入 NSSR.NSSRC 字段;（3）使用 NVMe 管理接口规范中定义的方法请求;或（4）发生供应商特定事件。当发生 NVM 子系统重置时，整个 NVM 子系统被重置。这包括，在构成 NVM 子系统的所有控制器上，发起控制器级复位，禁用与构成 NVM 子系统的所有控制器相关联的，持久性存储器区域，以及NVM子系统的所有PCI Express端口，检测到 LTSSM状态]]></description><category></category></item><item><title><![CDATA[指针与const]]></title><link>https://blog.youkuaiyun.com/andy0ma/article/details/150761184</link><guid>https://blog.youkuaiyun.com/andy0ma/article/details/150761184</guid><author>andy0ma</author><pubDate>Mon, 25 Aug 2025 10:15:00 +0800</pubDate><description><![CDATA[和指针的结合使用是一个常见但容易混淆的点，尤其是涉及指针指向的数据和指针本身的不可变性。用于定义常量，表示变量不可被修改。可以通过强制类型转换去掉。指针常量，指针本身不可变。的位置决定了它是修饰。]]></description><category></category></item><item><title><![CDATA[如何在Host主机识别PCIe设备但未识别NVMe的情况下，查看nvme配置]]></title><link>https://blog.youkuaiyun.com/andy0ma/article/details/150533396</link><guid>https://blog.youkuaiyun.com/andy0ma/article/details/150533396</guid><author>andy0ma</author><pubDate>Tue, 19 Aug 2025 19:53:06 +0800</pubDate><description><![CDATA[在Host主机识别PCIe设备但未识别NVMe的情况下，若需查看NVMe控制器寄存器内容，可通过或实现，同时需结合NVMe寄存器映射规范进行解析。]]></description><category></category></item><item><title><![CDATA[PCIE的边带信号 PERST#的作用是什么？]]></title><link>https://blog.youkuaiyun.com/andy0ma/article/details/150109471</link><guid>https://blog.youkuaiyun.com/andy0ma/article/details/150109471</guid><author>andy0ma</author><pubDate>Sat, 09 Aug 2025 15:13:22 +0800</pubDate><description><![CDATA[是PCIe系统中一个关键的低有效信号，用于实现全局复位功能。]]></description><category></category></item><item><title><![CDATA[PCIE设备的PERST# 的 Assert 和 De-Assert信号什么作用？]]></title><link>https://blog.youkuaiyun.com/andy0ma/article/details/150109452</link><guid>https://blog.youkuaiyun.com/andy0ma/article/details/150109452</guid><author>andy0ma</author><pubDate>Sat, 09 Aug 2025 15:12:31 +0800</pubDate><description><![CDATA[PERST#（PCI Express Reset）的Assert（有效）和De-Assert（无效）信号触发时机及作用如下：]]></description><category></category></item><item><title><![CDATA[NVME使用PCI Express作为系统总线时的PCI Express寄存器值]]></title><link>https://blog.youkuaiyun.com/andy0ma/article/details/150109295</link><guid>https://blog.youkuaiyun.com/andy0ma/article/details/150109295</guid><author>andy0ma</author><pubDate>Sat, 09 Aug 2025 15:05:59 +0800</pubDate><description><![CDATA[BitsTypeReset31:00RW0h基地址 （BA）：内存寄存器基地址的高 32 位（位 63：32）。注意：驻留在 PCI 兼容网桥后面的 NVM Express 实施（例如 PCI Express 端点）仅限于具有 32 位分配的基地址寄存器，因为网桥中可能为不可预取内存指定的最大地址受到限制。有关此限制的更多信息，请参阅 PCI Bridge 1.2 规范。]]></description><category></category></item><item><title><![CDATA[C语言inline 和define用法和使用场景上有啥区别]]></title><link>https://blog.youkuaiyun.com/andy0ma/article/details/149860230</link><guid>https://blog.youkuaiyun.com/andy0ma/article/details/149860230</guid><author>andy0ma</author><pubDate>Sat, 02 Aug 2025 15:31:27 +0800</pubDate><description><![CDATA[均用于代码优化，但两者在机制、安全性、调试和系统影响等方面存在本质差异。：减少函数调用开销，适合短小且频繁调用的函数（如循环内操作）。：编译器可能拒绝内联（如函数过大或递归），过度使用同样导致。（每次调用都展开），且替换后的表达式可能增加额外计算（如。宏的全局性易引发重定义冲突（如头文件重复包含）。：调试器可直接跟踪函数逻辑，错误信息更清晰。❌无类型检查，易引发隐式转换错误（如传递。中，确保多文件调用时编译器能内联展开。支持作用域封装，减少命名冲突风险。：无函数调用开销（无栈帧操作）。]]></description><category></category></item><item><title><![CDATA[do-while循环的使用及示例]]></title><link>https://blog.youkuaiyun.com/andy0ma/article/details/149718208</link><guid>https://blog.youkuaiyun.com/andy0ma/article/details/149718208</guid><author>andy0ma</author><pubDate>Mon, 28 Jul 2025 15:48:07 +0800</pubDate><description><![CDATA[do-while是C语言中的一种循环结构，与whiledo-while循环会先执行一次循环体，然后再检查条件表达式。这意味着do-while循环至少会执行一次。]]></description><category></category></item><item><title><![CDATA[C语言中va_list的使用方法]]></title><link>https://blog.youkuaiyun.com/andy0ma/article/details/149718170</link><guid>https://blog.youkuaiyun.com/andy0ma/article/details/149718170</guid><author>andy0ma</author><pubDate>Mon, 28 Jul 2025 15:46:57 +0800</pubDate><description><![CDATA[这样的函数，允许函数接受不定数量的参数。的宏和类型，通常用于实现类似。声明可变参数列表变量。]]></description><category></category></item><item><title><![CDATA[指针为啥能直接指向字符串，不能直接指向数字?]]></title><link>https://blog.youkuaiyun.com/andy0ma/article/details/149718085</link><guid>https://blog.youkuaiyun.com/andy0ma/article/details/149718085</guid><author>andy0ma</author><pubDate>Mon, 28 Jul 2025 15:44:25 +0800</pubDate><description><![CDATA[特性字符串字面量数字字面量存储位置静态存储区（只读数据段）通常直接嵌入指令是否有地址有（首字符地址）无（右值）指针操作可直接指向（如char*需通过变量或动态内存间接指向根本原因：指针需要内存地址，而字符串字面量在内存中有明确存储，数字字面量则没有。这是语言底层实现和类型系统的共同结果。]]></description><category></category></item><item><title><![CDATA[RTL代码修改后，验证那边通常需要做些什么修改去验证？]]></title><link>https://blog.youkuaiyun.com/andy0ma/article/details/149461352</link><guid>https://blog.youkuaiyun.com/andy0ma/article/details/149461352</guid><author>andy0ma</author><pubDate>Sat, 19 Jul 2025 10:45:23 +0800</pubDate><description><![CDATA[包括功能、性能、时序、可靠性等，确保芯片在真实场景中稳定运行。开展工作，确保覆盖所有关键场景。在IC设计中，验证的核心目标是。RTL设计完成后，验证团队需按。验证需覆盖IC设计的。]]></description><category></category></item><item><title><![CDATA[FPGA定义的寄存器为啥有些是只读，有些是只写，有的是可读可写]]></title><link>https://blog.youkuaiyun.com/andy0ma/article/details/149461330</link><guid>https://blog.youkuaiyun.com/andy0ma/article/details/149461330</guid><author>andy0ma</author><pubDate>Sat, 19 Jul 2025 10:44:35 +0800</pubDate><description><![CDATA[正确的寄存器属性设计能提升系统性能（减少20-40%逻辑资源）、增强安全性（防止关键寄存器被篡改），并优化时序（缩短关键路径延迟）。在FPGA设计中，寄存器的读写属性（只读、只写、可读可写）是由其在系统中的功能需求和硬件实现特性决定的。寄存器不是"存储变量"，而是。状态（发送完成/数据就绪）将只写寄存器设计为可读。控制（使能/中断清除）]]></description><category></category></item><item><title><![CDATA[芯片验证的过程中常使用的是什么语言？为什么常说不能修改开发的RTL代码？]]></title><link>https://blog.youkuaiyun.com/andy0ma/article/details/149461309</link><guid>https://blog.youkuaiyun.com/andy0ma/article/details/149461309</guid><author>andy0ma</author><pubDate>Sat, 19 Jul 2025 10:43:38 +0800</pubDate><description><![CDATA[芯片验证依赖于SystemVerilog的核心地位与RTL代码的稳定性。前者提供结构化验证能力，后者确保验证目标与设计意图的一致性。两者结合，方能在千万行代码的复杂芯片中逼近“零缺陷”目标。]]></description><category></category></item><item><title><![CDATA[怎么分析判断一个指针的类型？]]></title><link>https://blog.youkuaiyun.com/andy0ma/article/details/149461289</link><guid>https://blog.youkuaiyun.com/andy0ma/article/details/149461289</guid><author>andy0ma</author><pubDate>Sat, 19 Jul 2025 10:42:41 +0800</pubDate><description><![CDATA[/ 定义函数指针类型FuncPtr fp;// 明显是函数指针。]]></description><category></category></item></channel></rss>