自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 资源 (1)
  • 收藏
  • 关注

原创 keil5的Cannot Load Flash Programming Algorithm

keil5 load失败问题

2022-07-16 10:48:04 4718 5

原创 xhci主机规范初探(2) --数据结构预览

xHC预计将在虚拟内存环境中运行,其中一个连续的物理内存块的大小将受到系统的页面大小的限制。xHC用于管理设备和端点的数据结构旨在适应这种限制,通过将数据结构保持在4K字节(所支持的最小页面大小)下,或者提供机制连接非连续的物理内存块以形成更大、逻辑连续的数据结构,例如指向用于向主机传输USB数据的数据结构的圆形缓冲区。由这些数据结构所引用的数据缓冲区可以是字节对齐的,并从1个连续物理数据的字节引用到64K字节。1.Device Context Base Address Array设备上下文基础地址阵列

2021-10-17 21:21:29 1352

原创 xhci主机规范初探(1) --架构预览

xhci规范中整体软件模型如下图所示:这里描述的主要是上图中xhci部分,包括软件和硬件。1. 接口架构这里主要分为三部分:1)Host Configuration Space.每个xHC实现都应包括一种通过系统软件识别和枚举主机控制器的方法。本规范提供了一个主机配置空间的PCI示例,它被称为PCI配置空间。PCI配置空间定义提供了一个关于系统xHC枚举和资源(中断、电源、虚拟化等)的配置空间使用的工作示例。2)MMIO Space.寄存器空间表示xHC向驻留在内存地址空间中的系统软件提供的

2021-10-16 21:00:39 2073

原创 NXP imx6ull GPIO简介

当配置为输出时,可以写入内部寄存器来控制输出引脚上驱动的状态。当配置为输入时,可以通过读取内部寄存器的状态来检测输入的状态。此外,GPIO外设可以产生CORE中断。GPIO是控制芯片IOMUX的模块之一GPIO功能是通过8个寄存器、一个边缘检测电路和中断产生逻辑提供的。支持五组GPIO,GPIO1~GPIO5,具体列表可看imx数据手册整体架构图如下GPIO功能描述当配置为输出时(GPIO_GDIR位= 1),数据位中的值GPIO数据寄存器(GPIO_DR)驱动在相应的GPIO线上。当一个信号

2021-06-05 20:40:56 1002

原创 EHCI主机控制器--挂起/恢复

在本讨论中,主机发起的或软件发起的恢复称为恢复事件/操作。总线发起的恢复事件称为唤醒事件。唤醒事件的类别是:启用远程唤醒端口连接断开以及过流事件PORTSC可将端口设置为挂起模式当系统软件挂起整个总线时,将USBCMD中run、stop位设为0来关闭主控制器当唤醒事件发送时,系统软件最终将run、stop位设为1,恢复挂起端口1.1 端口挂起/恢复系统软件通过在适当的PORTSC挂起位中写入一个1来将各个端口置于挂起模式系统软件可以通过向Force port resume位写入一个1来在

2021-05-05 11:39:10 619

原创 EHCI主机控制器--端口路由逻辑和控制

一个USB 2.0主机控制器由一个高速主机控制器组成,它实现了EHCI编程接口和0到N个USB 1.1伴侣主机控制器。伴随主机控制器(chc)可以是通用或开放主机控制器规范的实现。此配置用于提供所需的完全USB 2.0定义的端口能力;例如,每个端口的低,全,和高速能力。每个物理端口都有一个收发器,每个主机控制器模块都有自己的端口状态和控制寄存器端口路由逻辑由来自EHCI主机控制器信号控制。上电或重置时,缺省路由策略是到伴随控制器。Usb2.0主控制器必须实现为多功能PCI设备,如果实现包括伴随控

2021-05-03 16:40:19 780

原创 EHCI主机控制器--主机控制器初始化

当系统启动时,枚举主机控制器,为寄存器空间分配一个基址,BIOS将FLADJ寄存器设置为系统特定的值。初始上电或HCReset(硬件或通过USBCMD寄存器中的HCReset位)后,所有的操作寄存器将在其默认值,如表所示。在硬件复位后,只有辅助电源井中不包含的运行寄存器将处于默认值。软件应执行的步骤:CTRLDSSEGMENT寄存器编写4-gb段,其中分配了所有接口数据将适当的值写入USBINTR寄存器以启用适当中断周期帧列表基址写入PREIODICLIST基寄存器。写USBCMD寄存器设置所

2021-05-03 15:29:29 505

原创 EHCI主机控制器--周期帧跨遍历节点(FSTN)

此数据结构仅用于管理跨Host-frame边界的Full- speed和Low-speed事务。软件不能在异步调度中使用FSTN。如果主机控制器的HCIVERSION寄存器指示版本实现低于0096h,软件不能使用FSTN特性。在0.96之前没有为实现定义fstn,它们的使用将产生未定义的结果。FSTN normal path pointerFSTN的第一个DWord包含一个指向下一个调度对象的链接指针。此对象可以是任何有效的周期调度数据类型FSTN Back Path Link Pointer

2021-05-02 21:57:13 287

原创 EHCI主机控制器-- 队列头(qh)

Queue Head Horizontal Link Pointer该链接指针指向在该队列中完成任何必要的处理后的下一个要处理的数据对象,这个指针可以引用一个队列头或一个同步传输描述符。它不能引用队列元素传输描述符Endpoint Capabilities/CharacteristicsQueue Head的第二个和第三个Dwords指定了关于端点的静态信息。此信息不会在端点的生命周期内更改Transfer Overlay此区域中的9个DWords代表主控制器的事务工作空间。一般的运行模..

2021-05-02 14:44:16 564

原创 EHCI主机控制器--队列元素传输描述符(qTD)

此数据结构仅用于队列头。此数据结构用于一个或多个USB事务,这个数据结构用于传输最多20480(5*4096)字节。这个数据结构在物理上必须是连续的,与此传输相关的缓冲区必须是几乎连续的。缓冲区可以从任何字节边界开始。对于缓冲区中的每个物理页,必须使用一个单独的缓冲区指针列表元素,无论该缓冲区在物理上是否连续。Next qTD Pointer下一个传输元素指针Alternate Next qTD Pointer当当前qTD由于短包而退役时,主机控制器将始终使用这个指针。qTD Token包

2021-05-02 14:39:12 982

原创 EHCI主机控制器--分割事务同步传输描述符(siTD)

所有通过事务转换器进行的全速同步传输都使用siTD数据结构进行管理。此数据结构满足管理分割事务协议的操作需求next link pointersiTD Endpoint Capabilities/CharacteristicsDwords 1和2指定了关于全速端点、父事务转换器的寻址和微帧调度控制的静态信息Micro-frame Schedule ControlsiTD Transfer StatesiTD Buffer Pointer List (plus)siTD Back

2021-04-29 23:30:32 302

原创 EHCI主机控制器--同步(高速)传输描述符(iTD)

等时传输描述符的格式如图3-4所示。此结构仅用于高速等时端点。同步td必须在32字节的边界上对齐。next link pointer是一个指向下一个调度数据结构的指针。具体每个位含义如下:iTD Transaction Status and Control ListDwords 1到8是八个事务控制和状态槽。每个槽位格式如图3-4所示。主控制器使用每个事务描述中的信息加上Buffer Page Pointer列表的前三个dwords中包含的端点信息,在USB上执行一个事务。iTD buf

2021-04-29 21:55:56 685

原创 EHCI主机控制器--异步列表队列头指针

异步传输列表(以ASYNCLISTADD寄存器为基准),管理控制和中断传输。主控只有在到周期调度到尾时才会使用此调度。异步列表是一个简单的队列头循环列表。ASYNCLISTADDR寄存器只是一个指向下一个队列头的指针。这为链接到异步列表中的所有队列头实现了一个纯粹的轮询服务。...

2021-04-29 21:50:39 305

原创 EHCI主机控制器--周期帧列表(periodic frame list)

数据结构这里描述的数据结构支持32位内存缓存。 这些数据结构包括Periodic Schedule, Periodic Frame List, Asynchronous Schedule, Isochronous Transaction Descriptors, Split-transaction Isochronous Transfer Descriptors, Queue Heads and Queue Element Transfer Descriptors.Periodic f

2021-04-28 22:11:47 795

原创 9.3 usb设备请求(2)

1.Clear feature这个请求用来清除或禁用特定功能,wvalue的特征必须匹配接收者。也就是说接收端是设备,只能改变设备特征;接收端是端点,只能改变端点特征。2.Get Configuration这个请求返回当前设备配置值3.Get Descriptor这个请求返回指定描述符。wValue在高字节指定描述类型,低字节指定描述索引。4.Get Interface这个请求返回指定接口的备用配置。5.Get Status这个请求返回指定接收者的状态。bmRequestType

2021-04-19 19:25:20 512

原创 9.3 usb设备请求(1)

所有usb设备都可以通过默认控制管道回应主机,这些请求使用控制传输,请求和请求的参数在Setup包中发送到设备。主机负责建立下表中传递的字段的值。如下setup包的格式:标准设备请求USB设备必须响应标准设备请求,即使设备还没有被分配一个地址或还没有被配置。标准设备请求有如下(由bmRequestType和bRequest决定。)...

2021-04-18 11:53:18 235

原创 9.2 通用usb设备操作

所有usb设备都支持一系列如下的通用操作:热插拔主机在检测到设备时启用连接设备的集线器端口,这也具有重置设备的效果。复位USB设备有以下特点:响应默认USB地址未配置没有被挂起地址分配当USB设备被连接时,主机负责为该设备分配一个唯一的地址。这是在主机重置设备,并且设备连接的集线器端口已经启用之后完成的。配置USB设备必须配置后才能使用其功能。主机负责配置USB设备。主机通常从USB设备请求配置信息,以确定设备的功能。作为配置过程的一部分,主机设置设备配置,并在必要时为接口选

2021-04-17 22:54:16 199

原创 9.2 usb总线枚举流程(简介)

当一个usb设备被连接到端口时,以下过程就会发生1.Usb设备连接的hub确认usb状态,此时usb设备处于powerd状态2.Usb host 询问 usb hub所发生的变化3.现在主机知道了新设备连接到的端口,然后主机至少等待100毫秒,以完成插入过程并使设备的电源变得稳定。然后主机向该端口发出端口启用和重置命令。4.集线器对该端口执行所需的复位处理(见11.5.1.5节)。当复位信号释放时,表示该端口已启用。USB设备现在处于默认状态,可以从VBUS提取不超过100毫安。它的所有寄存器和状态

2021-04-13 15:46:54 278

原创 9.1 usb状态流程

9.1 usb状态流程usb状态图Attached:USB设备可能被连接或分离。USB设备与USB分离时的状态不是本规范所定义的。此规范仅说明设备附加后所需的操作和属性。Powered:USB设备可以从外部源和/或通过集线器从USB获得电源,它们被连接到。外部供电的USB设备称为自供电。尽管自供电设备在连接到USB之前可能已经通电,但在连接到USB和VBUS应用到设备之前,它们不被认为处于通电状态。一个设备可以同时支持自供电和总线供电的配置。某些设备配置支持任意一种电源。只有当设备自供

2021-04-13 15:34:26 243

原创 c++之lambda表达式

在写代码时,我们会遇到这种代码:sort(points.begin(),points.end(),[](const vector<int>& u,const vector<int>& v){ return u[0] * u[0] + u[1] * u[1] < v[0] * v[0] + v[1] * v[1]; });我们知道sort()函数第三个参数是函数符,函数指针或者lambda表达式,而这个例子中后面一串长

2020-11-09 20:30:14 342

原创 c++之右值引用与移动语义

c++11新增了一个新的特性:移动语义,这是一个非常有用的特性,今天我们就来了解一下这个特性。右值引用首先看下什么是右值引用。右值可以简单理解为可作用于等号右边的一类数据,它们有一个重要的特征:可以取其值不可以取其地址。比如说13这个数字,不能对它进行取地址操作,也就是不能&13.常见的右值有:1.字面常量(c风格字符串除外)2.函数返回值3.类似于x+y这种类型的表达式所谓右值引用也就是对右值进行引用。通过&&操作符完成比如int &&x = 13

2020-11-05 15:32:33 356

原创 leetcode刷题记录 -- 求根到叶子节点数字之和

题目描述如下:给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。例如,从根到叶子节点路径 1->2->3 代表数字 123。计算从根到叶子节点生成的所有数字之和。来源:力扣(LeetCode)思路:本题其实不难,首先明确一点,从根结点到叶子结点的路径只有一条,所以本题就转化为对该树的遍历了,那么我们就采用前序遍历,遍历该树,在此过程中计算sum即可;用一个vector保存每条路径的数字,最后对vector求和即可。class Soluti

2020-10-29 16:09:10 124

原创 STL中的set

STL中的set是一个常见的数据结构,所以今天在这里做个归纳;简介:set相当于数学中的集合,每个元素最多出现一次,而且set中元素已经是从小到打排好序了。内部采用的是红黑树模型,插入删除效率比较高,因为它插入删除时只需要改变结点的值而不需要移动结点。同时查找也是采用的二分查找法常见函数:begin(),end():注意end()返回的是指向超尾的迭代器rbegin(),rend(): 返回反向迭代器clear():清空empty():判断是否为空max_size() : 最大存储size(

2020-10-29 14:32:42 342

原创 LeetCode刷题记录 --独一无二的出现次数

题目描述如下:给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false。思路:使用一个哈希表存储出现次数,再使用一个set存储出现次数的重复数,最后比较两者是否相等class Solution {public: bool uniqueOccurrences(vector<int>& arr) { unordered_map<int,int> m1;

2020-10-28 17:13:04 126

原创 leetcode刷题记录 --132模式

class Solution {public: bool find132pattern(vector<int>& nums) { if(nums.size()<3) return false; stack<int> sta; int third = INT_MIN; for( int i = nums.size()-1;i>=0;i--){ i

2020-10-22 15:34:27 124

原创 window serve2012 安装 NET3.5

早先在 Windows Server 2008 上,如果要安装“.NET3.5”,只需通过“添加和删除”功能便可完成,Windows Server 2008系统盘或系统镜像里含有“.NET Framework 3.5”的组件文件,这些组件文件在系统盘或系统镜像中的\sources\sxs目录下,通过系统盘或者镜像为服务器安装系统时,这些组件文件被拷贝到新系统中,只是没有自动安装,当要为操作系统手动安装这些组件时,直接通过“添加和删除”功能就可以完成,而无需通过互联网去下载相关的组件。但是在 Windows

2020-10-21 14:47:33 1483

原创 c++中final关键字的作用

c++中final关键的作用最重要就是两个,先强调下:1.禁止虚函数被重写2.禁止基类被继承final:指定不能在派生类中重写虚函数或不能从中继承类。在虚函数声明或定义中使用时,final确保函数是虚函数,并指定它不能被派生类重写。否则程序格式错误(生成编译时错误)。在类定义中使用时,final指定该类不能出现在另一个类定义的基说明符列表中(换句话说,不能从中派生)。否则程序格式错误(生成编译时错误)。final也可以与union定义一起使用,在这种情况下,它没有任何影响(除了std::is_fi

2020-10-19 23:06:49 2772

原创 LeetCode刷题记录 --两个数组的交集【1】

题目即求两个数组交集,答案去重无排序献上代码:```cpp#include <unordered_set>class Solution {public: vector<int> intersection(vector<int>& nums1, vector<int>& nums2) { unordered_set<int> result_set; unordered_set<

2020-10-19 20:08:35 88

原创 LeetCode刷题记录 --两个数组的交集

题目描述如下:给定两个数组,编写一个函数来计算它们的交集献上代码:class Solution {public: vector<int> intersect(vector<int>& nums1, vector<int>& nums2) { unordered_map<int, int> map1; vector<int> res; for(auto &i :

2020-10-19 19:59:59 172

原创 malloc

一、区别其实在使用的大部分场景下,两者是可以通用的,但是我们还是要知道他两的区别。1、malloc与free是c++/c语言的标准函数,new/delete是C++的运算符。2、他们都可用于申请动态内存和释放内存。new/delete比malloc/free更加智能,其实底层也是执行的malloc/free。为啥说new/delete更加的智能?因为new和delete在对象创建的时候自动执行构造函数,对象消亡之前会自动执行析构函数。既然new/delete的功能完全覆盖了malloc和free,为

2020-10-19 00:07:11 161

原创 LeetCode刷题记录 --寻找比目标字母大的最小字母

题目描述如下:给你一个排序后的字符列表 letters ,列表中只包含小写英文字母。另给出一个目标字母 target,请你寻找在这一有序列表里比目标字母大的最小字母。在比较时,字母是依序循环出现的。举个例子:如果目标字母 target = ‘z’ 并且字符列表为 letters = [‘a’, ‘b’],则答案返回 ‘a’献上代码:class Solution {public: char nextGreatestLetter(vector<char>& letters

2020-10-18 23:40:38 224

原创 LeetCode刷题记录 --统计有序矩阵中的负数

题目描述如下:给你一个 m * n 的矩阵 grid,矩阵中的元素无论是按行还是按列,都以非递增顺序排列。请你统计并返回 grid 中 负数 的数目。先上代码// An highlighted block#include <iostream>#include <vector>using namespace std;vector<vector<int>> arr1 = {{4,3,2,-1},{3,2,1,-1},{1,1,-1,-2},{-1,

2020-10-18 17:31:50 144

原创 LeetCode刷题记录 --二分查找

原题描述如下:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。先上代码:class Solution {public: int search(vector<int>& nums, int target) { if(nums.size() == 0) return -1; int r = nums

2020-10-18 16:22:32 108

原创 LeetCode刷题记录 --路劲总和

话不多说,直接上代码:class solution {private: bool res = false;public: bool haspathsum(treenode *root, int sum) { if(!root) { return false; } preorder(root,sum); return res; } void preorder(t

2020-10-18 15:21:48 79

原创 LeetCode刷题记录 --数组拆分(1)

题目描述如下:给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), …, (an, bn) ,使得从1 到 n 的 min(ai, bi) 总和最大。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/array-partition-i著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。思路:由于要把数组两两配对,且最小值相加总和最大。个人是这样理解的:可以把组成配对的两个数

2020-10-10 22:51:26 157

转载 SQL Server 2008R2安装错误—“is not a valid login or you do have permission”

坑啊,技术支持的路上到处都是坑https://blog.csdn.net/wangwenru6688/article/details/50707239

2020-10-10 15:36:53 382

转载 什么是端口

在Internet上,各主机间通过TCP/TP协议发送和接收数据报,各个数据报根据其目的主机的ip地址来进行互联网络中的路由选择。可见,把数据报顺利的传送到目的主机是没有问题的。问题出在哪里呢?我们知道大多数操作系统都支持多程序(进程)同时运行,那么目的主机应该把接收到的数据报传送给众多同时运行的进程中的哪一个呢?显然这个问题有待解决,端口机制便由此被引入进来。本地操作系统会给那些有需求的进程分配协议端口(protocal port,即我们常说的端口),每个协议端口由一个正整数标识,如:80,139,44

2020-10-10 14:30:49 189

原创 c++基础知识归纳 static的作用

c++中static关键字的作用可以用两个属性归纳它,一个是作用域,一个是生存周期。静态局部变量:作用域:函数体内生存周期:整个程序运行期间静态全局变量:作用域:文件内部生存周期:整个程序运行期间静态函数:作用域:文件内部生存周期:整个程序运行期间静态数据成员:作用域:类内部生存周期:大于class的对象静态成员函数:作用域:类内部生存周期:大于class对象下面是它们各自的特点:静态局部变量:随着第一次函数的调用而初始化静态全局变量:定义在函数体外,用于修饰全局变量,表

2020-10-10 09:35:15 179

原创 LeetCode刷题记录 --不用加号的加法

今天刷了这道题看到一个神奇的解法,如下:class Solution {public: int add(int a, int b) { while(b != 0){ auto carry = (unsigned int)(a & b) << 1; a ^= b; b = carry; } return a; }};作者:yizhe-shi链

2020-10-09 19:14:02 141

原创 ubuntu虚拟机连接开发板

前言:最近需要使用到ubuntu虚拟机通过nfs服务连接开发板下载程序,结果遇到了ping不通的问题,多方查找找到了原因,记录一下先用网线连接开发板与虚拟机1.打开VMvare虚拟网络编辑设置,选择桥接模式2.选择VM0桥接模式为Realtek重启虚拟机,尝试ping,搞定...

2020-10-09 15:18:20 1567

SQL2008安装程序(带验证码)

SQL Server 2008在企业中也是非常重要的应用,各种财务系统,erp系统,oa系统等都会用到SQL Server 2008数据库,甚至网站也可以用到数据库来作为网站的后台, SQL Server 2008是一个重大的产品版本,它推出了许多新的特性和关键的改进,使得它成为至今为止的最强大和最全面的SQL Server版本。    在现今数据的世界里,公司要获得成功和不断发展,他们需要定位主要的数据趋势的愿景。微软的这个数据平台愿景帮助公司满足这些数据爆炸和下一代数据驱动应用程序的需求。微软将继续投入和发展以下的关键领域来支持他们的数据平台愿景:关键任务企业数据平台、动态开发、关系数据

2020-10-21

空空如也

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

TA关注的人

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