- 博客(21)
- 资源 (2)
- 收藏
- 关注
原创 关于read/write 网络IO、硬盘IO的区别
因此,对于网络IO,由于我们无法知道网络对面什么时候准备好数据,什么时候发起数据。所以使用read/write的话,可能会一直阻塞在那里,属于阻塞IO。因此需要用epoll来检测对面什么时候准备好数据。而对于硬盘IO,由于数据一直存储在硬盘中,所以一直处于准备好数据的状态。所以使用read/write的话,会直接返回结果,属于非阻塞IO。此时如果使用epoll的话,会一直返回处于可读的状态。对于read/write API,
2024-11-05 22:00:46
243
原创 【FPGA XDMA AXI Bridge 模式】PCIe:BARs 和 AXI:BARs 含义解析
Xilinx的 DMA/Bridge Subsystem for PCI Express IP核中,支持普通的XDMA模式,但是这种模式只允许主机端发起PCIe 读写请求,FPGA内部无法主动发起读写请求,也即FPGA无法主动读写HOST的内存。而该IP核的另一种模式,AXI Bridge模式则支持HOST主动读写,以及FPGA主动读写。该模式下有个参数需要配置,分别是PCIe:BARs以及AXI:BARs。而上述的普通模式只有PCIe:BARs需要配置。下面详细说说这两个参数的含义。
2024-09-12 22:44:06
1869
原创 PCIe NVMe SSD 上电初始化全流程
PCIe NVMe SSD 上电初始化全流程。1. 在FPGA中对PCIe IP核中的各种寄存器进行最原始的配置,比如Vendor ID, Device ID, Revision ID, Class Vaule等等
2024-09-10 22:34:20
717
原创 【NVMe SSD寄存器、数据结构】NVMe Controller 重要寄存器、SSD内部跟NVMe相关的重要数据结构解析
NVMe Controller会将一些重要的信息(NVMe控制器的能力,状态,Admin SQ, CQ地址等)直接放在NVMe寄存器中,另一部分(跟SSD比较相关的)信息会放置在SSD内部,并最终通过Admin NVMe CMD去设置或者获取。
2024-09-10 20:16:19
1999
原创 Linux实现异步IO的方法:epoll,posix aio,libaio,io_uring
内核AIO(即io_submit()等)是内核对异步I/O操作的支持,其中io请求实际上在内核中排队,按照拥有的任何磁盘调度器排序,可能其中一些请求作为异步操作(使用TCQ或NCQ)被转发(以某种最优顺序)到实际磁盘。这种方法的主要限制是,并不是所有的文件系统都能很好地使用异步I/O(并且可能会退回到阻塞语义),并且。如果无法使用O_DIRECT打开文件,它可能仍然“工作”,因为您可以获得正确的数据,但它可能不是异步完成的,而是回落到阻塞语义。,因此给人一种 I/O 是异步的错觉。
2024-08-29 22:55:39
893
1
原创 用户层read write io命令到NVMe SSD全流程
以EXT-4以及read io cmd为例,介绍从User Space -> File System -> NVMe Driver -> PCIe Controller -> NVMe Controller -> SSD Firmware(Flash Translate layer) -> 的基本流程。假设要对根目录下的1.txt文件进行读命令。
2024-04-13 11:14:52
1370
原创 IO多路复用机制——Select
IO多路复用机制——Select服务器端使用select机制监听可读的文件描述符(客户端)的一般流程如下:下面将说下 如何将select来实现多并发的双向通信:select函数族如下:服务器端使用select机制监听可读的文件描述符(客户端)的一般流程如下:执行fd_set myset; 实例化一个fd_set对象。FD_ZERO(&myset); 把myset的所有位置为0,例如 0000 0000.若新连接的客户端的文件描述符为2,用一个变量fd来记录该文件描述符,执行FD_SET
2022-03-21 11:48:39
1448
1
原创 树莓派与QT上位机之间通过socket进行实时图像传输
其中QT上位机作为服务器端,通过socket监听特定端口,当有设备连入时,会产生相应的信号,我们捕获此信号并且自定义槽函数来进行数据接收,当接收到完整的一帧图像信息后,将图像数据流复原成图像矩阵并通过Qlabel控件显示出来。树莓派作为客户端,其通过opencv捕获到摄像头的图像,捕获图像之后可以根据自己需求对图像进行滤波、形态学腐蚀、膨胀处理、边缘检测等操作,最后将图像数据转化成字节流,同时通过socket嵌套字连接入QT上位机服务器,实现tcp通信.
2022-03-07 18:30:25
9263
1
原创 欧拉角与万向锁理解
欧拉角与万向锁万向锁理解万向锁理解说到任意一个欧拉角时,首先一定要明确其旋转的顺序,欧拉角的旋转顺序一共有(x-y-z,y-z-x,z-x-y,x-z-y,z-y-x,y-x-z)六种组合。不管是采用哪一旋转方式,只要位于中间的轴旋转了90°,就会出现万向锁的现象。举个例子:这里采用 x-y-z 的旋转方式,假设逆时针的旋转为正。当物体绕其自身的y轴旋转90°时,就出现了万向锁的情况。这个时候绕x轴的旋转和绕z轴的旋转是等价的,应该就出现了网上一直说的丢失了一个自由度的情况。用具体的欧拉角来说明一
2022-02-25 22:56:30
704
原创 树莓派通过MQTT发布网络时间和B站粉丝数给ESP32,同时在ESP32上外接ST7789显示屏显示
先上效果图:看到标题很多人会疑惑,ESP32不是直接可以http获取网络时间和B站粉丝数吗?为什么要多加一层跟树莓派通过MQTT通信。这是因为刚了解了MQTT的相关知识,想实践一下,所以就一起用上了。整体的软件框架图如下:接下来分树莓派端和ESP32端来讲解各个细节。一:树莓派首先,在树莓派上使用mosquito工具建立MQTT服务器,将树莓派作MQTT模型中的服务器,此外树莓派也同时作为MQTT通信中的发布者(publisher)。发布者实现的方法是通过python脚本,而
2021-08-27 14:56:07
2286
原创 STM32F103(七)——PWM输出
PWM输出实验 与 电容触摸按键实验一. PWM输出实验1. STM32 PWM说明2. 常用库函数3. 具体库函数配置参考资料:《开发指南》P215 PWM输出实验 《参考手册》P253 通用定时器一. PWM输出实验PWM又称脉冲宽度调制,通过对一系列脉冲的宽度进行调制,来等效地获得所需要的波形(含形状和幅值),可用来实现对LED灯亮度的控制、对电机转速的控制等等。简单的说PWM就是高电平与低电平组合起来的一种波1. STM32 PWM说明STM32的PWM输出主要使用到定时器中的这
2020-06-03 20:20:01
3860
原创 STM32F103(六)——定时器中断
定时器原理与例程1. 定时器基本原理1.1 三种定时器的区别1.2 通用定时器的主要特点1.3 通用定时器的3种计数器模式1.4 通用定时器工作过程1.5 定时器的内部时钟配置2. 定时器中断实验2.1 常见库函数2.2 定时器中断具体实现步骤参考资料:《开发指南》P206,定时器中断实验《参考手册》P253,通用定时器1. 定时器基本原理STM32F103ZE(精英版、战舰版)有8个16位的定时器,其中有4个通用定时器,2个高级定时器,2个基本定时器。1.1 三种定时器的区别具体区别如下图:
2020-05-31 23:50:17
17165
1
原创 STM32F103(五)——串口通信
串口通信串口通信串行通信参考资料:《开发指南》P178 串口实验《参考手册》P516 通用同步异步收发器串口通信通信双方(cpu与外部设备)之间通信的两种方式:并行通信▶传输原理:数据各个位同时进行传输▶优点:速度快▶缺点:占用引脚资源多串行通信▶传输原理:数据按位顺序传输▶优点:占用引脚资源少▶缺点:速度相对较慢串行通信按照数据传送方向,可分为:▶单工:数据传输只支持数据在一个方向上传输,如图:▶半双工:运行数据在两个方向上传输,但是在同一时刻只允许在一
2020-05-26 17:18:28
3246
原创 STM32F103(四)——中断系统与外部中断实例
中断系统与外部中断实例中断优先级管理抢占优先级和响应优先级的意义和区别中断管理方法中断优先级分组函数设置每个中断的抢占,响应优先级(相关寄存器)设置每个中断的抢占,响应优先级(具体的中断初始化函数)总结(中断优先级的设置步骤)外部中断实例外部中断概述**外部中断配置的步骤**参考资料:《开发指南》P120,STM32 NVIC中断优先级管理《参考手册》P130,中断和事件《开发指南》P189,外部中断实验中断优先级管理抢占优先级和响应优先级的意义和区别STM32F103的每一个中断都会被设置一
2020-05-24 23:30:19
5176
原创 STM32F103笔记(三)——时钟系统与端口复用重映射
STM32F1时钟系统简介与相关配置(一). STM32F1时钟系统的简介(二). 复位和时钟控制(RCC)的相关寄存器(一). STM32F1时钟系统的简介时钟系统的总框图如下:其中:▶系统时钟:芯片系统内部的时钟,程序运行的速度由他决定。系统时钟可来源于HSI,HSE,PLL时钟▶5个蓝色方形为STM32F1系列芯片的时钟源(时钟源即时钟的来源, 芯片中所有的时钟,包括系统时钟,外设时钟,全部都是来自这5个时钟源。)① HSI时钟(High speed Internal)高速内置时钟,
2020-05-18 18:32:05
2042
原创 STM32F103笔记(二)——GPIO原理
GPIO的工作原理与两个实验实例一. STM32F1 GPIO的工作方式输入模式输出模式相关资料在于:《STM32中文参考手册V10》第105页 GPIO的功能描述《STM32数据参考手册》第20页 相关的IO口功能描述一. STM32F1 GPIO的工作方式输入模式(1). 输入浮空(2). 输入上拉(3). 输入下拉(4). 模拟输入输出模式(1). 开漏输出(2). 开漏复用功能(3). 推挽式输出(4). 推挽式复用输出...
2020-05-10 23:50:13
7076
2
原创 Win10下 vc++6.0打开文件闪退解决
Win10下vc++6.0闪退解决方法1.网上下载一个filetool.exe的启动程序2.解压后出现一个FileTool的文件3.用vc++6.0打开工作空间,选择FileTool里面的filetool.dsw4.组建,组建后出现debug5.打开命令提示符(管理员)6.书写debug里面的filetool.dll的进程7. 用vc工具定制该filetool.dll...
2020-05-07 00:54:52
9180
12
原创 STM32F103笔记(一)
STM32的概述STM32的简述stm32系列的命名规律STM32F1系列芯片介绍关于查找资料-如果查找IO口是否独立,可查看《精英版IO引脚分配表》如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLo...
2020-05-04 20:21:41
14527
STM32F1系列,移植了官方的dmp库,成功驱动mpu6050获得欧拉角程序
2021-03-28
mpu6050系列传感器的官方dmp库
2021-03-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人