自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程序员仓库

天下难事必作于易,天下大事必作于细。

  • 博客(110)
  • 资源 (6)
  • 收藏
  • 关注

原创 认知拓展:心理账户

本文主要介绍了心理账户的概念和运用场景。在了解什么是心理账户的基础上,我们还要思考别人是如何利用心理账户影响我们的,或者我们可以如何影响他人。

2023-07-13 23:58:21 242

原创 Ubuntu apt-get常用命令总结

apt-get命令是 Ubuntu 系统中的包管理工具,可以用来安装、卸载软件包,也可以用来升级软件包,还可以用来把系统升级到新的版本。本文介绍 apt-get 命令的常见用法,演示环境为 Ubuntu 20.04。

2023-06-30 13:54:33 993

原创 Ubuntu终端最大化的3种方法

Ubuntu 系统下,使用 Ctrl + Alt + T 快捷键唤醒终端时默认大小为 80 列 x 24 行。在某些测试中我们需要更大的窗口,而通过鼠标将窗口最大化太慢了,所以本文介绍了快速实现终端窗口最大化的 3 种方法。

2023-06-27 20:08:32 4068

原创 聊聊PCIe协议的BDF

本文主要介绍 PCIe 协议中 Bus、Device 和 Function 的基本定义。

2023-06-27 16:17:56 990

原创 交叉编译时关于头文件和库的那些事儿

本文主要介绍了嵌入式应用程序开发中,与头文件、库文件相关的知识。例如:默认的头文件路径、默认的库文件路径、指定头文件路径、指定库文件路径、编译静态库&动态库。

2023-06-15 19:24:34 1213

原创 Linux重要的同步命令_sync

本文从“是什么”、“为什么”、“怎么用”三个角度介绍了 Linux 重要的同步命令 sync。

2023-06-05 16:23:59 5322

原创 Linux设备树:删除节点和属性的方法

本文主要介绍了在设备树中删除节点(node)和属性(property)的方法。为了便于理解,笔者先介绍了 dtsi 和 dts 的关系,然后构建了虚拟的需求场景,最终给出示例。

2023-05-26 10:37:25 1606

原创 如何获取“上帝”的系统版本

Linux系统下获取版本信息的多种方法

2023-04-26 22:03:35 707 1

原创 Ubuntu:将beyond compare配置为SVN diff工具

Ubuntu系统下,通过配置,将 beyond compare 作为 svn 默认 diff 工具的方法。

2022-01-25 10:38:36 1154 3

原创 可以通用的Linux内核模块Makefile

一种通用的 Makefile 模板,用于 Linux 内核模块编译。

2022-01-06 19:35:26 1764

原创 Word中插入高亮代码:Notepad++

利用 Notepad++,向 Word 文档中插入高亮代码。

2021-12-30 14:40:59 2679 3

原创 Source Insight 4.0 配置将tab自动替换为空格

Source Insight 4.0,配置将tab自动转换为空格。

2021-12-29 11:26:17 4772

原创 联想Yoga 13s重装系统

联想Yoga 13s笔记本重装系统步骤。

2021-12-29 09:18:43 2905

原创 如何更改Source Insight 4.0中Tab的宽度

source insight 4.0 设置 Tab 宽度的方法。

2021-12-28 11:51:12 602

原创 用 Python 玩转串口(基于 pySerial)

引言对于嵌入式设备,串口可谓是最常用的接口。在裸机编程中,串口通常用于输出程序的运行或调试信息;在嵌入式操作系统中,串口通常会作为系统的控制台接口。如果掌握了Python操作串口的方法,那我们就可以利用Python强大的数据处理能力,快速开发出许多好用的工具。串口的基本操作在使用 Python 之前,我们先回想一下平时我们是如何使用串口的。总结来说,无非就是下面几个步骤:首先,我们需要确定要使用的串口号。其次,配置波特率、数据位、奇偶校验位、停止位、DTR/DSR、RTS/CTS 和 X

2021-09-26 17:53:31 54481 5

原创 玩转STM32MP1:Windows 与 Ubuntu 互传文件

最近买了一块正点原子的STM32MP157开发板,记录一下学习过程。今天总结一下 Window 与 Ubuntu 互传文件的方法。‍在嵌入式开发中,通常会使用 Ubuntu 和 Windows 双系统联合开发的方式。Windows 系统用于编写代码,Ubuntu 系统用于代码编译。因此,在 Windows 和 Ubuntu 之间搭建文件传输通道是不可避免的。今天,我就来总结一下 FTP 文件传输通道的搭建方式。1. Ubuntu 18.04 系统搭建 FTP 服务首先,在 Ubuntu中安.

2021-09-03 21:52:47 353

原创 从 51 到 I.MX6ULL,为什么芯片GPIO操作变得这么复杂

最近在给 I.MX6ULL 写代码的时候,我脑子里突然冒出几个问题:以前的51单片机操作 GPIO 那么简单,为什么现在变得这么复杂?作为芯片的设计人员,他们将这种流程复杂化的原因是什么?今天,我们就尝试着开开脑洞,为这些问题想一个答案。需要说明的是,本篇文章只是个人的一些不成熟想法,并不是严谨的科学论断,有错误的地方,欢迎大家留言讨论。51单片机 GPIO 操作步骤51 单片机的GPIO控制,只需要配置一个GPIO寄存器。GPIO 输出如果要在 51 单片机的某个引脚输出高电平或低电平,直接将

2021-08-29 13:50:33 404

原创 你知道如何用Python解析JSON数据吗

JSON,全称是 JavaScript Object Notation,是我们常用的一种存储和交换文本信息的语法,和 XML 类似。相对于 XML,JSON 具有更小、更快和更容易解析的优势。既然 JSON 有这么多优点,那么作为编程语言界的瑞士军刀,Python 语言对 JSON 的支持也肯定是相当完备。今天,笔者就来总结一下使用 Python 操作 JSON 数据的基本方法。JSON 的基本语法JSON 的语法比较简单,主要遵循如下规则:数据以键:值(key:value)的形式保存。键/ke

2021-08-19 17:30:16 1089

原创 十分钟学会如何用Python处理CSV文件

十分钟学会如何用Python处理CSV文件在前几年,如果你和嵌入式开发人员推荐Python,大概会是这样一种场景:A:”诶,老王,你看Python开发这么方便,以后会不会用到嵌入式设备?“B:“别做梦了,那玩意儿速度贼慢,肯定满足不了性能要求…”但近几年,随着半导体行业的迅猛发展,嵌入式处理器的性能有了很大幅度的提高。与此同时,Python语言本身也在不断优化。因此,在嵌入式领域引入Python已经成为了必然趋势。今天,作者就来总结一下使用Python处理物联网行业中一种常见的文件格式:csv文件

2021-08-16 13:50:04 61443 3

原创 PCIe Base 和 Limit 寄存器

1. 基础知识当 PCIe Function 的 BAR(Base Address Register)被 RC 进行配置之后,它就知道了自己被分配的地址段是多少。当 PCIe Function 收到一个 TLP 之后,会将该 TLP 访问的地址与自己的 BAR 中配置的地址段进行匹配,如果能匹配上,则进行处理。对于 RC 或者 Switch,必须要知道它们的下游端口(Downstream Port)连接的设备所占用的地址空间在哪个区段。只有这样,当 RC 或者 Switch 收到 TLP 之后,才能决定

2021-08-04 10:55:59 2771

原创 Ubuntu 触发 PCIe 设备的 FLR

测试环境:Ubuntu 18.04​测试目标:通过 Linux 命令,触发 PCIe 设备的 FLR (Function-Level Reset)。测试步骤:​通过 lspci 指令确定设备的 PCIe Function ID​bryan@bryan-pc:~$ lspci00:00.0 Host bridge: Intel Corporation 8th Gen Core Processor Host Bridge/DRAM Registers (rev 08)00:01.0 PCI

2021-08-03 11:37:19 1322 5

原创 PCIe 配置空间:Status 寄存器

1. Status 寄存器位置2. Status 寄存器细节2.1 特殊位对于 PCIe 设备,status 寄存器中有几个 bit 的值是固定的。Bit 4:Capability List,该位必须为 1,因为 PCIe 设备中有些 Capability 是必须的。Bit 5:66 MHz Capable,该位必须为 0,PCIe 中用不到。Bit 7:Fast Back-to-Back Capable,该位必须为 0,PCIe 中用不到。Bit 9~10:DEVSEL Timing,

2021-05-28 11:49:28 5286

原创 PCIe 配置空间:Command 寄存器

​在 type 0 header 中,command 寄存器的位置如下图所示:在 type 1 header 中,command 寄存器的位置如下图所示:Command 寄存器的结构如下图:对于 PCIe,只有 Bit 0/1/2/6/8/10 是有效的,其他必须配置为 0 。IO Space Enable该位用于控制设别如何响应 I/O 空间的访问请求。该位为 0 时,设备不会响应 I/O 空间访问请求。该位为 1 时,设备正常响应 I/O 空间访问请求。复位后,默认为 0

2021-05-27 15:39:13 5859

原创 Ubuntu 卸载 PCI/PCIe 设备

首先,通过 lspci 命令确定设备的 Domain、Bus、Device、Function 信息:bryan@bryan-pc:~$ sudo lspci -D0000:00:00.0 Host bridge: Intel Corporation 8th Gen Core Processor Host Bridge/DRAM Registers (rev 08)0000:00:01.0 PCI bridge: Intel Corporation Xeon E3-1200 v5/E3-1500 v5/

2021-04-28 13:46:13 3699 2

原创 Ubuntu 18.04 安装 Jupyter Notebook

1. 基础环境准备:# 更新软件包sudo apt-get update# 安装 Python 3sudo apt-get install python3# 安装 Python3 版本的标准库管理器sudo apt-get install python3-pip# 查看 Python 3 版本,确认安装成功python3 -V# 查看 python3-pip 版本,确认安装成功pip3 -V2. 安装运行 Jupyter Notebook# 指定清华源,安装 Jupyte.

2021-04-27 14:36:10 1513 1

原创 asm/bitsperlong.h: No such file or directory

linux@linux-virtual-machine:~/Desktop/w13_x86_EP$ makemake -C /lib/modules/5.4.0-70-generic/build M=/home/linux/Desktop/w13_x86_EPmake[1]: Entering directory '/usr/src/linux-headers-5.4.0-70-generic' AR /home/linux/Desktop/w13_x86_EP/built-in.a

2021-04-26 10:30:32 2229

原创 如何让 Ubuntu 系统重新枚举 PCI/PCIe 总线?

使用场景:正常情况下,PCI/PCIe 总线的枚举发生在系统启动阶段,如果这个时候我们的设备(例如,PCIe FPGA 开发板)还没准备好,那系统启动之后就会发现设备没有被枚举到。那么当我们的设备准备好之后,有没有办法不重启系统就直接进行设备重新枚举呢?解决方案:切换到 root 用户,执行如下命令:echo "1" > /sys/bus/pci/rescan...

2021-04-25 09:58:36 3113

原创 PCIe 总线传输顺序的那些坑

设置了 Relaxed Ordering 也不一定生效。在 TLP 的 Attr 字段有个 Relaxed Ordering 位,表示该 TLP 是否支持 Relaxed Ordering。但即使将这个位设置为 1,如果 TLP 通过的 Switch 设备不支持 Relaxed Ordering,那也只能乖乖的按照强制顺序通过这个 Switch。Relaxed Ordering 关注的是 VC,不是 TC。每个 TLP 都有一个唯一的 TC(Traffic Class),而这个 TC 又和一.

2021-04-22 18:08:03 5713 3

原创 PCIe LTSSM 之 Detect 状态

Detect 状态由 Detect.Quiet、Detect.Active 两个子状态组成。该状态的主要功能是检测 PCIe 链路的对端是否有 PCIe 设备存在,如果存在,一共使用了多少可用的 Lane 资源。1. Detect.QuietDetect.Quiet 状态是上电之后或者复位(Function Level Reset 除外)的初始状态,并且协议要求必须在复位之后的 20 ms 内进入 Detect.Quiet 状态。PCIe 设备进入 Detect.Quiet 状态时,其发送逻辑 TX

2021-04-22 11:22:40 4704

原创 PCIe 链路训练状态机(LTSSM)基础

LTSSM:Link Training and Status State Machine下图展示了 LTSSM 的顶层状态(顶层状态下包含子状态):LTSSM 包含 11 个顶层状态:Detect、Polling、Configuration、Recovery、L0、L0s、L1、L2、Hot Reset、Loopback 和 Disable。这些状态可以分为 5 类:Link Training states(链路训练状态)Re-Training(Recovery)state(重训练状态)Sof

2021-04-21 21:00:17 21337

原创 PCIe 是如何发现对端设备的:Receiver Detect

PCIe 总线是一种端到端的总线,即总线的两端连接了分别连接了一个 PCIe 设备。那么,这两个设备上电之后是怎么发现对面的另一个设备的?对于 Root Complex 或者 Switch ,它们是如何知道自己的 downstream port 上有没有连接其他设备? 对于 PCIe Endpoint,它们又如何知道自己的 upstream port 有没有被正确的连接到 Root Complex 或者 Switch 上?这些问题的答案就是:Receiver Detect。Receiver Detect

2021-04-19 20:36:02 6375

原创 Win10 SecureCRT 遇到一个致命的错误且必须关闭

最近在实验室的电脑上调试硬件需要用到串口,于是就下载了一份绿色版 SecureCRT 6.5.0,结果运行的时候报错:SecureCRT 遇到一个致命的错误且必须关闭。一个崩溃转储文件已创建于 C:\Users\xxx\AppData\Roaming\SecurCRT.dmp查了一些资料,发现这个问题可能是因为之前这台电脑上安装过 SecureCRT,被删除之后遗留了一些东西导致的,所以需要把这些残留删除。删除步骤:首先,进入 C:\Users\xxx\AppData\Roaming\ 目录,删

2021-04-16 15:10:42 10797 5

原创 PCIe 链路训练基础

PCIe Link Initialization and Training ProcessPCIe 链路初始化及训练是由物理层控制的硬件过程。该过程对设备的端口及链路进行配置及初始化,从而能够支持后续的数据传递。复位之后,硬件会开始链路训练流程,并且流程由 LTSSM(Link Training and Status Machine)管理。LTSSM 的位置如下图所示:链路初始化及训练过程会对进行许多配置,可能会涉及到以下内容:Bit Lock:当链路训练开始时,接收设备的时钟尚未与发送.

2021-04-13 16:16:58 3259

原创 lspci 指令

1. 指令名称lspci2. 指令简介lspci 是一个用于显示系统中所有 PCI/PCIe 总线及设备信息的工具。默认情况下,它只显示设备的最简要信息。通过传入指定参数,可以输出更详细的信息,或者可以按照特定格式输出,以便于用其他程序进行解析。有些 PCI/PCIe 的设备信息需要在 root 权限下才能获取到。3. 参数先来看看不加任何参数时输出的结果。bryan@bryan-pc:~$ lspci00:00.0 Host bridge: Intel Corporation 8.

2021-04-12 20:59:22 5749

原创 PCIe LTR 使用指南

1. Endpoints每当 Endpoint 对请求的响应时间需求有变化时,都应该发送 LTR 消息。在发送 LTR 消息变更要求的响应时间时,设备应该考虑到所有可能的延时,包括:参考时钟(reference clock)关闭的状态下,恢复时钟所需的时间。链路层从其他状态恢复到 L0 状态所需要的时间。LTR 消息发送的时间。系统准备好处理新请求所需的时间。如果是要降低对某类请求的响应延迟时间的容忍度(即要求系统在更快的时间内响应),那么应该在发送该类型的请求之前,尽量早的发送 .

2021-04-09 18:59:44 3257 1

原创 PCIe LTR 基本知识

LTR:Latency Tolerance ReportingLTR 是 PCIe 协议中规定的一项可选特性,可用于提高系统的电源管理效率。通过 LTR,PCIe 设备可以告知系统它们能容忍的最大响应延迟是多少,只要系统在这个时间之内对 PCIe 设备提出的请求做出响应即可。系统的电源管理策略可以根据 LTR 提供的信息做出优化。在设备需要的时候,系统快速响应设备提出的请求;在设备不需要的时候,系统可以延迟一会再对设备请求做出响应,只要不超出设备 LTR 消息中规定的时间即可。例如,如果系统在低功耗状态

2021-04-09 16:51:54 12932

原创 OBFF (Optimized Buffer Flush and Fill)

1. 背景随着电源管理机制越来越完善,处理器和其他系统组件的功耗越来越低,而像 PCIe 组件这样的外围设备在 PC 系统功耗中占据的比重越来越大。虽然早期的 PCIe 允许一些软件和硬件电源管理,但是并没有把电源管理策略与系统的协调放在一个高优先级,所以软件的控制也很有限。缺乏系统与电源管理策略之间的协调会导致一个很明显的问题:某些时候,系统可能已经进入睡眠状态 (sleep state)了,而 PCIe 设备可能还处于工作状态。这些 PCIe 设备可能会产生中断或者 DMA 数据传输请求,虽然这些.

2021-04-09 11:48:56 4196 3

原创 PCIe 枚举示例 (Single Root)

摘要:本文主要是对 Single-Root System 的枚举过程进行分析。启动阶段,处理器上的系统软件执行的枚举步骤如下:系统软件将 Host/PCI 桥的 Secondary Bus Number 设置为 0,将 Subordinate Bus Number 设置为 255。直到所有的总线都被枚举完成后,再改变这两个值。Secondary Bus Number: 桥设备(Bridge)下游端口连接的 PCIe 总线号。Subordinate Bus Number:挂载到桥设备(Bri

2021-04-08 21:14:40 2810

原创 理解 PCIe 的枚举机制

声明:本文中的图片来自MindShare, Inc 经典书籍《PCI Express Technology》。计算机系统复位或者上电之后,软件首先要对 PCIe 总线进行扫描来枚举该总线下连接的所有设备。在扫描之前,软件唯一能感知到的设备就是 Host/PCI 桥,同时还知道 Host/PCI 桥下面的总线号是 0,如下图所示:对于桥设备(bridge),它们的上游端口(upstream side)连接的总线称为 primary bus,下游端口(downstream side)连接的总线称为 s.

2021-04-08 17:40:20 7402 2

原创 PCIe 设备中 function number 不需要连续

对于包含多个 PCIe function 的设备,它们的 function number 不需要连续。例如,一个PCIe 设备中可以只包含 function 0,2,7,不包含 function 1/3/4/5/6。这也就导致了在 PCIe Root Complex 枚举设备时需要遍历所有可能的 Bus, Device, Function 。...

2021-04-06 18:38:36 1134

NPPExport_0.3.0_32位64位版本.zip

Notepad++ NppExport插件,包含win32 和 x64 两个版本。

2021-12-30

AZ Screen Recorder Video Recorder Livestream_v5.5.8.apk

安卓版本的免费录屏工具,v5.5.8官网版本。操作简单,录屏清晰,声音也清楚。具体的操作操作细节可以百度。本人用了挺长时间了。

2021-03-16

haneWIN_1216

haneWin NFS server 1.2.16版本,Windows搭建NFS服务的工具,带钥匙。需要管理员权限运行,配置简单。

2020-11-21

winmanager源码

文件浏览器和窗口管理器 -- 插件: WinManager vim辅助工具。

2018-08-14

cscope 15.9源码

cscope 15.9版本源码,CentOS 7系统中实测可用。 vim辅助工具。

2018-08-14

vim8.1源码

vim8.1源码,在Centos7系统中实测可用。 源码方式安装vim。

2018-08-14

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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