- 博客(262)
- 资源 (63)
- 收藏
- 关注
翻译 本周小周弄#234:值传递、指针传递还是引用传递?
这篇文章探讨了C++中函数参数传递方式的优化选择。作者对比了按值传递、按引用传递和按指针传递三种方式的优缺点,并给出了具体场景下的使用建议。关键点包括:小类型和数值类型适合按值传递;大对象应优先选择按引用传递;智能指针和容器类需根据所有权需求选择传递方式;视图类型如absl::string_view能提高灵活性。文章强调这些是指导原则而非绝对规则,鼓励开发者根据性能测试结果做出合理选择,同时做好相关文档记录。
2025-10-20 17:32:14
75
翻译 本周小贴士#232:何时使用auto进行变量声明
本文探讨了C++中auto关键字的使用场景与限制。文章指出,auto应仅在提升代码安全性和可读性时使用,而非仅为减少类型声明。具体适用场景包括:遍历map时避免意外拷贝(结合结构化绑定)、容器迭代器类型冗余时、工厂函数返回类型明确时,以及泛型编程中类型复杂时。但不推荐在可能隐藏类型语义(如常量性、引用或拷贝行为)时使用auto,以免降低代码可读性。核心原则是权衡auto带来的便利性与对代码理解的影响,优先保证代码对项目新手的清晰度。
2025-10-09 18:52:28
52
原创 现代C++——并发编程
C++并发编程摘要 本章深入讲解现代C++中的并发编程技术,主要内容包括: 线程基础:使用std::thread创建和管理线程,支持Lambda表达式和函数对象 线程安全:通过RAII模式管理线程资源,确保异常安全 同步机制:使用互斥量(mutex)和锁(lock_guard/unique_lock)保护共享数据 高级特性:展示unique_lock的灵活锁定能力 关键点: 线程创建简单但需要谨慎管理 必须同步访问共享资源以防止数据竞争 RAII模式是管理线程和锁资源的最佳实践
2025-10-04 14:15:00
732
原创 现代C++——更多现代C++特性
本章深入介绍了现代C++中的关键特性,包括高效字符串视图(std::string_view)、跨平台文件系统操作(std::filesystem)、正则表达式处理(std::regex)、精确时间库(std::chrono)等核心组件。重点讲解了结构化绑定、编译时条件判断(if constexpr)、类型擦除(std::any)等提升代码表达力的新特性,以及内联变量和属性等语法改进。这些特性显著提升了C++的开发效率和代码质量,使开发者能够编写更简洁、高效且类型安全的现代C++代码。
2025-10-03 09:30:00
815
原创 现代C++——高级特性
摘要:现代C++高级特性精要 本章深入探讨现代C++的核心高级特性,通过丰富代码示例展示其强大功能。重点内容包括: Lambda表达式:详解6种捕获方式、mutable用法、泛型Lambda及与STL算法的配合 函数包装器:std::function的多态封装能力,可存储函数指针、Lambda和函数对象 移动语义:通过右值引用实现高效资源转移 模板编程:变参模板和模板元编程技术 类型安全容器:std::optional和std::variant的实用场景 异步编程:Future/Promise模型的基础应用
2025-10-02 10:45:00
918
原创 现代C++——STL容器和算法
本章深入探讨现代C++对STL的增强特性,主要包括三个核心内容: std::array:固定大小的数组容器,结合C风格数组性能与STL接口优势,支持边界检查、迭代器操作和结构化绑定(C++17),适用于固定大小数据、性能关键代码等场景。 无序容器(unordered_map/unordered_set):基于哈希表实现,提供O(1)平均复杂度的操作,支持自定义哈希函数和预分配空间优化,适合需要快速查找的场景。 emplace系列函数:允许在容器中原地构造对象,避免临时对象的创建和拷贝/移动操作,通过完美转发
2025-10-01 09:30:00
874
原创 现代C++——智能指针
📝 智能指针摘要 本章系统介绍了现代C++中三种核心智能指针:unique_ptr、shared_ptr和weak_ptr。unique_ptr提供独占所有权,轻量高效,适合单一所有者场景;shared_ptr通过引用计数实现共享所有权,但需注意循环引用问题;weak_ptr作为弱引用可安全解决循环依赖。智能指针基于RAII原则,自动管理资源生命周期,确保异常安全,是现代C++内存管理的首选方案。关键要点包括:优先使用make_unique/make_shared创建指针,理解所有权语义,合理选择指针类型
2025-09-30 09:00:00
637
原创 现代C++——基础语法
现代C++基础语法增强摘要 本章系统介绍了C++11及后续版本的核心语法增强特性,包括: auto类型推导:简化变量声明,提高代码可读性 范围for循环:提供简洁的容器遍历语法 统一初始化:使用{}实现类型安全的初始化 nullptr:类型安全的空指针替代NULL 右值引用:支持移动语义提升性能 constexpr:实现编译时计算优化 static_assert:编译时条件检查 decltype:表达式类型推导 委托构造:简化类构造函数设计 =default/=delete:控制特殊成员函数生成 这些特性使
2025-09-29 17:11:53
1082
翻译 本周小贴士#231:来去之间:一些容易忽视的算法
在最近的 C++ 版本中,标准库新增了一些专用函数,用于在两个点 x 和 y 之间提供某个(特定的!)点:std::clamp(C++17 引入),以及 std::midpoint 和 std::lerp(C++20 引入)。将这些函数模板添加到标准库有两个主要目的:建立通用术语(词汇),便于广泛识别这些操作的含义。提供高质量实现,尤其是 std::midpoint 和 std::lerp,以避免常见陷阱。所有这些操作都是 constexpr 的,这意味着它们既可在运行时使用,也可在编译时使用。
2024-12-31 19:52:54
190
原创 SystemC简明教程
SystemC 是一种基于 C++ 的硬件描述语言 (HDL),用于建模和模拟数字系统。它由 Open SystemC Initiative (OSCI) 开发和维护。基于 C++ 语言:SystemC 是建立在 C++ 语言之上的,利用 C++ 的面向对象特性和丰富的标准库来描述硬件系统。这使得 SystemC 具有良好的可扩展性和可移植性。多层次建模:SystemC 支持从系统级到寄存器传输级 (RTL) 的多层次硬件建模,可以在不同抽象层次之间进行转换。
2024-11-04 17:34:32
4804
原创 IC开发——数字电路设计简介
我们说的数字电路,一般是指逻辑数字电路,即通过逻辑门组合成的电路,也即我们常说的逻辑IC。IC除了逻辑IC之外,还有模拟IC,存储IC等。IC设计,需要学习数字电路,需要学习Verilog/VHDL等设计语言,需要学习使用相关EDA,看起来非常难。IC设计是很难,但是简单的入门并没有那么难。
2024-10-11 15:12:45
3662
1
原创 Chisel开发Diplomacy框架
Diplomacy是一个参数协商框架,用于生成参数化的协议实现。在传统的IC设计中,如何更好地复用已有模块呢?如在Verilog中,在复用一个模块时,如果线宽不一致,需要手动修改模块的线宽,如果模块中内嵌多个模块时,每个关联模块的线宽都需要修改。如果修改不完全时,编译时就会出错。Chisel作为一个更灵活的HDL,如何更好地解决这个问题呢?这就是Diplomacy提出的初衷。Diplomacy将模块的Port抽象为节点(Node),然后来进行协商,自动找到最优的线宽,以减少复用模块时需要修改的线宽代码。
2024-09-16 12:00:00
1183
原创 Chisel Style Guide
Chisel Style Guide是一份简单的代码编写指南,统一编码风格以及遵循一些Chisel的最佳实践统升团队对代码的可读性,提升代码质量。因为输入的Verilog的命名与Chisel命名有关,所以Chisel中的一些命名参考了Verilog编码规范。因为Chisel编译器在生成Verilog时,会在变量中添加下划线,所以Chisel强烈不建议用户以全小写下划线的风格命名变量。可以将长组合逻辑分解为时序逻辑电路。枚举、派生、参数化、函数式编程等高级特性的运用,可以提升代码的表达能力,提升编码效率。
2024-09-15 21:00:00
1192
原创 IC开发——Verilog简明教程
Verilog 是一种用于数字电路设计和建模的硬件描述语言(HDL),广泛应用于电子工程领域。它提供了一种方便的方法来描述电子系统的结构和行为,使得设计、仿真和验证过程更加高效
2024-09-14 12:45:00
2913
原创 Chisel简明教程
Chisel(Scala嵌入式硬件构造语言)是一种嵌入在高级编程语言Scala中的硬件构造语言。Chisel是一个特殊类定义、预定义对象和Scala内部使用约定的库,因此当你编写Chisel代码时,实际上是在编写一个构建硬件图的Scala程序。随着经验的积累并希望使代码更简洁或更可重用,利用Scala语言的潜在强大功能变得很重要。它是由加州大学伯克利分校的 ADEPT 实验室开发的。Chisel结合敏捷开发,非常适合编写RTL。
2024-09-13 15:23:54
3175
1
翻译 本周小贴士#229:模板元编程的分级重载
既然你已经学会了这种令人很棒的能力,请记住要谨慎使用它。正如我们在absl::string_view重载中看到的那样,泛型编程很微妙,可能导致意想不到的结果。
2024-08-30 19:54:24
199
原创 IC开发——RTL综合
Verilog 是硬件描述语言,就是用代码的形式描述硬件的功能,最终在硬件电路上实 现该功能。在Verilog描述出硬件功能后需要使用综合器对Verilog代码进行解释并将代码转化成实际的电路来表示,最终产生实际的电路,也被称为网表。这种将Verilog代码转成网表的工具就是综合器。verilog的代码是否能够综合成实际的电路,综合成的实际电路是否符合要求。都需要通过综合来验证。
2024-07-31 22:21:25
1505
原创 IC开发——Verilator
Verilator 是一个开源的 Verilog 和 SystemVerilog 硬件描述语言 (HDL) 仿真器。它是一个高性能的仿真器,可以将 Verilog 和 SystemVerilog 代码转换为 C++/SystemC 代码,并生成可执行的仿真模型。高性能:Verilator 生成的仿真模型具有非常高的性能,可以与商业级仿真器媲美。开源:Verilator 是一个开源项目,可以免费使用和修改。
2024-05-28 11:48:33
2545
原创 IC开发——verdi基本用法
VCS和Verdi这两个工具,这两个工具目前都属于synopsys公司。VCS主要负责编译运行Testbench和RTL,并负责生成相应的波形文件。而verdi主要负责加载波形文件,查看信号的波形及其对应的代码来进行调试验证。Verdi最开始是由novas公司设计的,在2008年,被台湾的EDA厂家springsoft(源笙)收购了。在2012年,synopsys收购了spring soft公司,所以此时Verdi才正式属于synopsys。
2024-05-28 10:46:39
11878
原创 IC开发——VCS基本用法
VCS是编译型verilog仿真器,处理verilog的源码过程如下:VCS先将verilog/systemverilog文件转化为C文件,在linux下编译链接生成可执行文件,在linux下运行simv即可得到仿真结果。VCS使用步骤,先编译verilog源码,再运行可执行文件:编译命令的格式:vcs sourcefile [compile_time_option] (编译选项用来控制编译过程)执行仿真命令格式:./simv [run_time_option]
2024-05-28 10:43:53
7124
1
原创 IC开发——Ubuntu安装VCS2018
VCS是一种常用的Verilog仿真和综合工具,由Synopsys公司开发。它提供了一个完整的设计验证环境,用于验证硬件设计的正确性和性能。仿真功能:VCS支持基于事件驱动的数字电路级仿真,能够准确地模拟设计中的信号传输和电路行为。它可以处理大型设计,并提供高效的仿真方式和快速的仿真速度。综合功能:VCS还提供了综合功能,允许将Verilog描述的设计转换成门级电路,在后端流程中进行布局和布线以及时序优化。
2024-05-28 10:42:06
3919
3
翻译 本周小贴士#227:小心空容器和无符号算术
正如风格指南所说,在C++中对无符号类型进行算术运算时要小心。记住,容器.size()产生一个无符号类型。偏好可以尽可能在局部验证正确性的代码。尽量使代码直接对应于底层意图。
2024-04-18 18:13:22
131
原创 Visual Studio调试C/C++指南
前言Visual Studio(VS)是微软开发的一款集成开发环境(IDE)软件,支持C/C++、C#、VB、Python等开发语言,开发桌面、Web等应用程序。VS功能极其强大,使用极其便利,用户数量最多,被誉为"宇宙第一IDE"。熟悉地掌握基于VS的C/C++调试技术,可以大幅提升调试性能。随着VS版本的更新,其功能越来越强大,本文的内容是基于VS2019进行验证测试的,之前版本VS可能有少量特性不支持。基础。
2024-04-18 13:24:13
8214
原创 人工智能——大语言模型
一千行代码实现一个完整的可训练和推理的60亿参数的大语言模型,去魅人工智能,去魅大语言模型。本文重在介绍机器学习和大语言模型的基本原理。在科学研究上,机器学习和大语言模型的每一个环节都可以优化研究。如何提升训练的效率,降低训练过程中的过拟合是大语言模型的关键,Transformer的出现为大语言模型的可行性提供了技术支持,OpenAI的chatgpt的出现,证明了加大模型参数可以让模型的能力出现质的提升。大语言模型未来将会继承发展,会让人工智能走进世界每一个角落。几百行代码实现大语言模型。
2024-04-09 19:01:01
7314
1
原创 人工智能——深度学习
深度学习是一种基于人工神经网络的机器学习方法,其核心思想是通过多层次的神经网络来模拟人脑的神经元之间的连接。深度学习的特点是可以通过大规模的数据来训练模型,并且可以自动学习到数据的特征表示。上图就是一个神经网络的基本结构图,X1到Xn是输入,O1到Oj是输出,圆圈是神经元(也称感知机),连线带权重参与计算生成下一个神经元。隐层在实际的神经网络中可能会多层,并且都是全连接,所以计算量巨大,所以需要AI CPU、AI GPT等。
2024-04-09 18:58:18
4988
1
原创 人工智能——机器学习概述
上面的列举也不全,生物的结构蛋白、化学的合成材料,早期的这些都是靠烧钱不停地实验来进行。我们可以看到这个函数是关于a和b的一个三维曲面,这里我们可以分别对a和b求偏导,再设置偏导为0即可以得出两个a和b的方程,然后即可求出最小误差平方和对应的a和b,即得到这线性拟合方程的完整表达式。人工智能(Artificial Intelligence,AI),是新一轮科技革命和产业变革的重要驱动力量, [26]是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。
2024-04-09 18:56:08
5578
翻译 本周小贴士#224:避免使用vector.at()
在索引容器时,请注意我们处于哪种情况:索引是否是"按构造确定的",还是代码需要检测和处理无效的索引?在这两种情况下,我们都可以比使用基于异常的std::vector::at() API更好。类似的思考也适用于其他基于异常的API,如std::optional::value()和absl::StatusOr::value()(参见Tip#181)。对于非并发的C++代码中的错误处理,请优先进行"查看后跳转" - 然后,在检查了一切都正常之后,避免使用包含自身检查的API。
2024-03-28 18:10:32
361
原创 嵌入式开发——基础电路知识
驱动能力、负载能力、逻辑电平、三态输出、推挽输出、开漏输出、上拉电阻、下拉电阻、高通波滤、低通波滤、电源去耦电路、阻抗匹配、差分信号、MOS管与继电器、RS232和RS485、译码器、UART/IIC/SPI、模拟信号和数字信号眼图、真实U盘电路讲解。
2024-03-27 16:09:57
7717
2
原创 嵌入式开发——基础元器件
差分线的好处是,如果传输的信号受干扰,那么两个差分线就同时受干扰,两个信号会同时变化,那么两个信号的幅值差就会近似不变的,利用幅值差来表示信号就可降低干扰。电流表是串联接入电路的,电流表的内阻很小,一般为几mΩ,这样电流表接入电路对电源的外部负载影响很小,所以测量的电流近似于真实值。Vdd,IC的设备电压,在NAND Flash中,与Vccq等同,用于数据传输存储,为了降低功耗,其电压从早期的5V到后来的3.3V, 1.8V甚至1.2V。Vcc,IC的工作电压,主要用于控制IC内部的各种逻辑。
2024-03-27 15:45:36
2004
原创 NVMe开发——NAND Flash的基本原理
当栅极(Gate)和P型衬底接通电源时,因为电场的缘故,P型半导体中的电子都往氧化绝缘层靠近,当绝缘层附近的电子足够多时,两个N型半导体之间的电子通道(N沟道)就形成了,两个N型半导体和中间的电子通道相当于一整个N型半导体。读0和读1会有两个阈值电压,先在栅极施加读0的阈值电压,检测是否导通,如果导通,输出1,结束。擦除之后读,因为浮栅层的电子全部释放回了P型半导体中,这时在控制栅加10V电压,P型半导体中的电子会聚集到N型半导体之间形成电子通道,源极和漏极之间接上电源,会导通,此时表示读到‘1’。
2024-03-22 17:47:11
3546
原创 C/C++代码性能优化——编程实践
主要针对嵌入式C/C++,性能优化编程技巧,参数传递、函数返回、循环展开、查表、位域、尾递归、位运算、0数组、分支预测、异步计算、事件驱动架构、AI。其他性能负优化的示例。
2024-03-22 17:43:28
1863
原创 C/C++代码性能优化——数据结构和算法
数据结构,数组、链表、块状链表、栈、堆、队列、二叉树、红黑树、B树、B+树、跳表、索引、哈希表、图的应用场景和性能比较。 常用排序算法、查找的应用场景和性能比较,其他通用算法应用场景介绍。
2024-03-22 17:40:14
2058
原创 C/C++代码性能优化——编译器和CPU
在现代软件开发中,性能优化至关重要,尤其是在资源受限的系统和处理大量数据的应用程序中。C/C++ 作为低级编程语言,提供了对底层硬件的直接访问,使其成为性能关键应用程序的理想选择。然而,编写高效的 C/C++ 代码是一项具有挑战性的任务,需要对语言特性、编译器优化、硬件架构、数据结构和算法有深入的理解。本文旨在为 C/C++ 程序员提供一个全面的指南,涵盖各种优化技术,以提高代码性能,重在指南引导,不讲细节。
2024-03-22 17:35:48
4049
原创 NVMe开发——PCIe配置空间和地址空间
PCIe支持不同功能的设备,不同的设备其需要操作的内存大小也不同,为了更方便地实现这一种,BAR(Base Address Registers)产生了。为此,提出了一个新的增强配置访问机制,即将每个功能的配置空间映射到设备的256MB空间中,按4K对齐来分配访问。PCI的256字节信息不够PCIe使用,所以PCIe在此基础上将配置空间扩展到4K字节,如下图中列出了一些主要的扩展寄存器。Capabilities是一组描述PCIe设备功能相关的结构,它是一个链式的结构,一个指向下一个,直到最后。
2024-03-04 18:04:27
6211
2
原创 NVMe开发——PCIe复位
简介PCIe中有4种复位机制,早期的3种被称为传统复位(Conventional Reset)。传统复位中的前2种又称为基本复位(Fundamental Resets),分别为冷复位(Cold Reset),暖复位(Warm Reset)。第3种复位为热复位(Hot Reset)。第4种复位被称为功能级复位(Function Level Reset),出现在PCIe 2.0规范中。传统复位。
2024-03-01 19:39:01
6007
1
原创 NVMe开发——PCIe电源管理
PCIe电源管理详细描述了与PCI总线PM接口规范和高级配置和电源接口(ACPI)兼容的PCIe功耗管理。PCIe定义了对PCI-PM规范的扩展,主要关注链路电源和事件管理。还概述了OnNow计划、ACPI以及Windows操作系统的相关性。
2024-03-01 19:35:49
5088
原创 NVMe开发——PCIe基础
PCI(Peripheral Component Interconnect),外设组件互连。PCI是一种并口总线标准,对比其之前的其他总线,PCI因其速度快、支持即插即用,中断共享等特性,占领计算机总线标准近20年。随着CPU以及外设的速度要求越来越高,PCI总线愈发显得有心无力。PCI因为是并口,在高速信号传输中,因为信号质量问题,以及信号同步问题,并口解决这些问题的成本高,难以为继。在这个时候,PCI的替代者PCIe出现了。
2024-03-01 19:28:37
3509
原创 NVMe开发——MTBF介绍
NVM存储器的失效率是如何评估的呢?阿伦尼乌斯公式如何得来的?半导体加速因子又是如何计算的?MTFS计算公式又是如何推导出来的?
2024-02-26 18:12:58
3539
原创 GCC工具链简介
想编译各种嵌入式裸机的,想编译Linux Kernel,又或者想编译u-boot的,或者想编译运行在KylinOS上,甚至想编译运行在Android上的C代码,该选择哪个gcc版本呢?MinGW和gcc什么关系?ARM下几种gcc有什么区别?RISC-V内核又该如何选择GCC工具链呢?gcc不同版本的头文件、动态库等兼容性如何呢?选择了正确的gcc版本,又是如何编译安装呢?下载arm gcc时,经常会遇到Linaro,那么Linaro与arm、gcc是什么关系呢?gdb-multiarch?
2024-02-26 17:49:55
2972
原创 QEMU开发入门
QEMU开发,对于分析Linux内核帮助非常多。目前电脑上的手机模拟器、还有各种虚拟机技术也基本都是基于qemu进行扩展开发的。文章得比较详细,并提供包括固件和qemu的完整测试代码:1. Windows、Linux下的编译、安装qemu。2. 基于qemu,用VSCode单步调试单片机系统的Cortex-m、RISC-V固件代码。3. 基于qemu,用VSCode单步调试Linux Kernel代码。4. 扩展qemu,给RISC-V添加了一个自定义的uart设备,并演示如何在固件中使用这个uart来输出
2024-02-23 18:55:33
4217
TinyCC的VS2010编译工程
2021-04-28
protobuf-3.0.0-alpha-2.zip
2021-12-15
System Verilog.zip
2021-12-21
TestProperyGrid.zip
2021-12-15
基于 Visual studio 和虚拟机的驱动调试.pdf
2020-08-07
A Beginner's Guide to SSD Firmware
2024-01-17
JEDEC JESD22-A117E:2018 电可擦除可编程 ROM (EEPROM)
2022-12-13
UNH-IOL-NVMe-MI-Conformance-Test-Suite-v15.0
2022-12-05
VS2010单元测试的coverage文件转换为xml文件源代码
2022-05-19
apt-get安装包f
2022-05-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅