自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(88)
  • 收藏
  • 关注

原创 常识 | drm kms 详解

可以使用pci_map_rom()调用来映射BIOS,这是一个方便的函数,它负责映射实际的ROM,不管它是否已经被隐藏到内存中(通常在地址0xc0000),还是存在于ROM BAR中的PCI设备上。相反,它遵循Unix“一切都是文件”的原则,通过文件系统名称空间公开gpu,使用/dev层次结构下的设备文件。通过使用辅助函数drm_gem_prime_export和drm_gem_prime_import,驱动程序可以在更简单的api中实现gem_prime_export和gem_prime_import。

2022-10-26 15:26:04 2768 1

原创 常识 | 蓝牙相关 BT/BLE

BLE协议详细 --- 全称Bluetooth Low Energy,即蓝牙低功耗。1. 在预定的物理信道上,发送方发送某个代表连接的包,接收方就在该信道上直接回应。借用了wifi的phy和mac层(简称AMP) -- 50+Mbps。选择具体的通信命令,如读/写/notify/indicate。选择射频通道、数据过滤、完整性检查、重传、链路管理、流量控制。指定物理信道,增加头部标识、消息长度、CRC、目标地址。蓝牙初始阶段用的就是BR -- 700+Kbps。定义用户命令及命令操作的数据。

2022-10-18 12:48:28 1963

原创 常识 | GPU相关

既可以利用线程间通讯做一些复杂的应用和算法加速,又可以在Block的粒度上自由调度计算任务,在不同计算能力的硬件平台上自适应的调整任务安排。每个核都在执行单指令多线程的程序(SIMT)。GPU相比CPU提供更高的指令吞吐量和内存带宽,GPU和CPU在功能上的差异是因为它们的设计目标不同,GPU 专门用于高度并行计算,因此设计时更多的晶体管用于数据处理,而不是数据缓存和流量控制。比如卷积计算其实是重复相同的动作,即使计算中数据之间的相互影响也具有“局域性”,一个数据单元上的计算最多需要它某个邻域上的数据。

2022-10-14 17:46:47 679

原创 常识 | 数据库相关

一致性,规定了事务提交前后,永远只可能存在事务提交前的状态和事务提交后的状态,从一个一致性的状态到另一个一致性状态,而不可能出现中间的过程态。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。事务(Transaction)是并发控制单位,是用户定义的一个操作序列,这些操作要么都做,要么都不做,是一个不可分割的工作单位。原子性,指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。持续性,一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。

2022-10-11 21:35:54 394

原创 常识 | 负载均衡、容灾设计、高可用

第二层,服务器池:群集所提供的应用服务(如,HTTP FTP)由服务器池承担,其中的每个节点具有独立的RIP(Real IP,真实IP)地址,只处理调度器分发过来的客户机请求。第一层,负载调度器:这是访问整个群集系统的唯一入口,对外使用所有服务器共有的VIP(Virtual IP,虚拟IP)地址,也称为群集IP地址。节点故障也可用同样的思想,某个节点故障,系统将它的副本提升为主节点,然后将原节点宕机时丢失的数据同步过去。负载均衡主要分为四层和七层负载均衡,对应网络七层模型的第四层和第七层。

2022-10-11 20:36:03 550

原创 常识 | 关于驱动....待续

PCI有设备树,用于描述硬件的信息,包含节点各类属性,在dts文件中定义,最终会被编译成dtb文件加载到内存中;Linux内核建立了一个统一的设备模型,分别采用总线、设备、驱动三者进行抽象,其中设备与驱动都挂在总线上,当有新的设备注册或者新的驱动注册时,总线会去进行匹配操作(初始化包括:数据结构的初始化以及设备的初始化等,设备的初始化则需要获取硬件的信息(比如寄存器基地址,长度,中断号等),这些信息都从DTS而来;注册操作主要是包含中断处理函数的注册,以及通常的设备文件注册等;PCI接口到中断号的映射。

2022-10-10 11:54:13 258

原创 c++ | cast

父转子不安全的原因:子类的成员/方法往往比父类多,假如原父指针指向父类对象,强制转换成子类指针时,调用子类的方法,但父对象中是没有这个方法的,会出问题。1. 用于含虚函数的父类和子类的转换,主要用于父类转子类。但是,对声明为const的变量来说,常量就是常量,任你各种转化,常量的值就是不会变。函数的形参不是const,且函数不会改动参数值,则使用const_cast。原理是,直接把数据类型A的地址解释成另一个数据类型B的地址,逐个比特复制。3. 子类与父类的转换(子类转父类安全,父类转子类不安全)

2022-09-27 17:27:22 369

原创 刷题 | dp

例:s为12457,可以切分为124|5|7,第一段和第三段的和能被7整除,输出2。输出:输出一个整数,表示切开后最多能有多少段的数字和是7的倍数。dp[i]:表示到i位置为止,最多有多少段的数字和是7的倍数。dp[i]需要比较的点:要包含i的段,or不要包含i的段。字符串切开后每段的数字和都尽可能被7整除。输入:一个字符串s,s的每位都是数字。

2022-09-15 14:53:37 72

原创 常识 | dds通信

DDS实现的数据共享可以理解成一个抽象的“全局数据空间”,就好像访问本地的存储空间一样。在系统运行时,数据是按需传输或存储的,数据的发布者仅仅发送对方需要的数据,而订阅者仅接收并存储本地应用程序当前需要的数据。,简单来说就是应用程序调用DataWriter对象提供的write方法,把数据传递给Publisher对象,而Publisher负责将数据在网络上发送出去。DDS在诸多方面提供了更丰富的特性,这自然就导致了在资源需求上,比如内存占用,比SOME/IP要大得多。DDS实时传输协议——

2022-09-14 18:26:12 2360

原创 刷题 | 单调栈

while当前元素i比栈顶大时,pop,对于栈顶元素来说,右边界是i,左边界是新栈顶下标。while当前元素比栈顶小,pop,直到找到栈顶比它小的,即答案,然后把该元素压入栈。对数组中每一个元素寻找左边/右边第一个比他小/大的元素。注意点是最后一个元素要继续while判断。从右至左每一个元素:重复左小。新栈顶不存在时左边界就是0。

2022-09-06 14:01:31 70

原创 常识 | 一些总线 spi i2c uart

UART总线是异步串口,因此一般比前两种同步串口的结构要复杂很多(单片机的书上有介绍的,其实也算不上复杂),一般由波特率产生器(产生的波特率等于传输波特率的16倍)、UART接收器、UART发送器组成,硬件上由两根线,一根用于发送,一根用于接收。,最高达100K左右,用与计算机与设备或者计算机和计算之间通信,但有效范围不会很长,约10米左右,UART优点是支持面广,程序设计结构很简单,随着USB的发展,UART也逐渐走向下坡。,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种。...

2022-08-25 20:20:35 614

原创 刷题 | 非递归二叉树遍历

代码】刷题 | 非递归二叉树遍历。

2022-08-12 20:26:22 270

原创 c++ | 左值引用 & 右值引用

1、替代需要销毁对象的拷贝,提高效率:某些情况下,需要拷贝一个对象然后将其销毁,如:临时类对象的拷贝就要先将旧内存的资源拷贝到新内存,然后释放旧内存,引入右值引用后,就可以让新对象直接使用旧内存并且销毁原对象,这样就减少了内存和运算资源的使用,从而提高了运行效率;注意:c不可以引用 const a*3,const c 可以引用 const a*3,但是有无const的 a 都不行!注意:b不可以引用const a,但const b 可以引用 const a,也可以a*3, 也可以const a*3。....

2022-08-09 22:11:04 438

原创 TS 22.011

本文档的目的是描述呈现给用户的服务访问程序。本文档提供了国际漫游、国内漫游和区域漫游的定义和程序。在MS(UE)的技术实现方面,这些都是必须遵循的。PLMN:公共陆地移动网络(PLMN)是由政府或地区移动局为向公众提供陆地移动服务的特定目的而设立和营办的网络。它为手机用户提供了交流的可能性。对于移动和固定用户之间的通信,与固定网络的互通是必要的。PLMN可以在一个或多个频带中提供服务。一般来说,PLMN是受国家边界限制的。根据国家规定,每个国家可能有不止一个PLMN。每个订阅者和他的home PLM

2022-06-11 20:43:10 622

原创 TS 38.304

本文档在RRC_IDLE模式(也称为Idle模式)和RRC_INACTIVE模式下指定了UE程序的Access Stratum (AS)部分。Idle模式的NAS部分在TS 23.122[9]中指定。本文档指定了UE中NAS和AS之间功能划分的模型。本文档在以下情况下适用于所有支持NR无线接入的终端,包括多RAT型终端:当UE在NR cell上camp时;当UE正在寻找一个可以camp的cell时。RAT: Radio Access Tec 无线接入技术RRC:无线资源控制NR,其全称为New Radi

2022-06-09 18:27:13 509

原创 TS 23.122

本文档概述了MS的核心网络协议在空闲模式下所承担的任务,并介绍了相应的网络功能。只要没有给MS分配专用信道,空闲模式功能也可以由GPRS MS执行。本文档定义了支持3GPP和3GPP2系统的多模式MS的PLMN选择。本文件规定了在允许的情况下使用CSG小组的程序。本文重点在于 PLMN selection process、Location registration process 这两个模块的详细描述Allowable PLMN: 不在禁止列表中的PLMNMS:就是UEME:不含sim卡的MSeCall o

2022-06-08 16:45:35 1214 1

原创 Intel64和IA-32架构软件开发者手册第1卷:基本架构

第1章-关于本手册。给出了英特尔®64和IA-32架构软件开发者手册的所有五卷的概述。它还描述了这些手册中的符号约定,并列出了程序员和硬件设计人员感兴趣的相关Intel手册和文档。第2章- Intel®64和IA-32架构。介绍Intel 64和IA-32架构以及基于这些架构的Intel处理器系列。它还概述了这些处理器的常见特性,以及Intel 64和IA-32架构的简要历史。第3章-基本执行环境。介绍了内存组织的模型,并描述了应用程序使用的寄存器集。第4章-数据类型。描述处理器识别的数据类型和寻址模

2022-05-30 11:33:31 2109

原创 官方链接们(自存)

Technical LibraryIntel x86/x64 编程手册-开发文档查找以下标题:Intel® 64 and IA-32 Architectures Software Developer’s Manual Combined Volumes: 1, 2A, 2B, 2C, 2D, 3A, 3B, 3C, 3D, and 4Directory Listing /ftp/3gpp手册

2022-05-28 14:31:03 135

原创 TS 36.304

E-UTRA: Evolved Universal Terrestrial Radio Access 进阶通用地面无线电接入RAT: Radio Access Tec 无线接入技术UE: User Equipment 用户设备AS: Access Stratum 接入层NAS: non-access stratum 非接入层?PLMN:公用陆地移动网络CSG:关掉的订阅者群组MBMS:多媒体广播-多播服务RRC:无线资源控制本文档包含终端空闲模式中的接入层设备部分本文档包含AS和N

2022-05-24 19:49:51 1009

原创 3GPP | 基础

3GPP包括项目合作组 PCG 和技术规范组 TSG其中TSG包括三大业务:RAN无线接入网 Radio Access NetworksCT核心网&终端 Core Network & TerminalsSA业务&系统 Services & Systems Aspects各自包含了一些工作组WG,如RAN分为WG 1-6,1负责物理层,2负责层2和层3、4是射频性能等工作组WG提供技术规范TS(Technical Specifications)和技术报告T...

2022-05-22 20:09:12 847

原创 移动通信 | 5G | 基基基础

1G--模拟通信 AMPS 高级电话系统 TACS 全球接入系统 NMT2G--数字通信 GSM 全球移动通信系统 改进--GPRS 通用分组无线业务 EDGE 增强了数据速率 CDMA 码分多址3G--移动多媒体 TD-SCDMA 时分双工 WCDMA CDMA20004G--移动宽带 TD-LTE ...

2022-05-22 16:47:16 287

原创 常识 | 基础正则

字符分为普通字符(以下用ab表示)和元字符(含特殊意义的字符)基础正则:a 匹配a本身 . 匹配任意一个字符 c.t cat cbt c1t a* 匹配任意n个字符(包括0) ab* ab abb abcde [ab] 匹配a或b [^ab] 匹配除了a,b以外任意一个 [A-Z] 匹配一个大写字符 ^ 匹配行首 ^$ 一个空行 $

2022-04-24 23:44:37 66

原创 Linux | 线程与进程详解

区别开销指的是什么进程切换包括1. 切换页全局目录以安装一个新的地址空间2. 切换内核态堆栈和硬件上下文3.刷新TLB4.系统调度器的代码执行看看这些步哪一个不大...如果跨CPU的话,以局部性原理保存的cache也没啥用了,io开销更大为什么多线程编程需要设置锁从原理层面上讲,线程具有自己的寄存器和栈空间,因此线程读变量是在自己的栈/寄存器里去读,并不是读系统的寄存器,所以多线程编程需要注意变量的共享安全性...

2022-04-19 20:30:46 267

原创 Linux | 用户态与内核态详解

区别用户态:供应用程序运行的空间,只能受限制地访问内存内核态:控制计算机的硬件资源,例如协调CPU资源,分配内存资源,并且提供稳定的环境为什么要划分1. 安全性给不同的操作给与不同的“权限”。有些指令是非常危险的,如果错用,将导致系统崩溃,比如清内存、设置时钟等。如果允许所有的程序都可以使用这些指令,那么系统崩溃的概率将大大增加。2. 稳定性隔离了操作系统代码与应用程序代码。即便是单个应用程序出现错误也不会影响到操作系统的稳定性,其它的程序还可以正常的运行。如何从用户态进入内核态

2022-04-19 18:24:32 1371

原创 shell | 简单实操

1. 调用函数#!/bin/bash# test.shfunc() { if [ $1 == "1" ]; then echo "123" fi}func 1 # 在脚本中直接调用函数# ----如果是命令行---------source test.sh # 或者 . test.shfunc 12. 数组传递(检查主机存活状态)#!/bin/bash# 以字符串的形式传参,调用的时候要加“”,否则是直接传了字符串进去IP_LIST="19

2022-04-18 23:03:52 93

原创 Linux | grep seq awk

待续。

2022-04-18 16:19:50 435

原创 shell | 基基基础

1. 变量赋值不可以有空格2. 变量赋值不加$, 使用变量的时候才加$3. 字符串变量:一般用双引号str=“aaa”;获取字符串长度:# (数组也是len=${#str};提取子串, 从第二个位置开始 取2个字符s=${str:1:2};4. 数组变量用()表示,并用空格分开arr=(1 2 3);获取数组的所有元素:@或者*echo ${arr[@]}获取数组长度len=${#arr[@]}; // 注意要加[@],否则#arr会输出15. 运算算术表...

2022-04-15 19:45:50 82

原创 Linux | 常用命令

find path -option [ -print ] [ -exec -ok command ] {} \;path为空时默认当前路径;option为空时则使用-print;[执行command]为可选项,-exec 就是直接执行,-ok为执行前询问;{} \查找指定名字的文件find -name"xxxxx"-name 通过名字查找,-iname也是,但不分大小写找到/usr 目录下找出大小超过 10MB 的文件find /usr -type f -size +10240k-t...

2022-04-15 15:14:40 1177

原创 面试 | 美光 | AMD | 高通 | nvdia | mtk | 是软件岗哦

美光一面 电话面试inline volatile static还有基础的c,忘了。。。二面 视频面试代码:1. 简单循环和前置++运算2. 输入一个字节,输出字符里包含多少1这个有点懵了,没懂输入的字节是什么类型的变量,后来我问可以理解为输入一个char吗面试官说可以。当时因为有点懵写的是取最高位然后与1,重复八次,应该有更好的解吧。。问题:忘了。。。天呐我的记性。。AMD计算机有哪些硬件十进制加法需要多少触发器了解D触发器吗cpu如何与外界交互中断向

2022-04-12 22:10:33 1796 2

原创 知识点 | 编译原理相关

概述预处理---展开头文件/宏替换---.i文件编译---检查语法,生成汇编--- .s文件汇编---汇编代码转换机器码--- .o文件链接---链接到一起加上静态库动态库生成可执行程序--- .out文件编译的阶段词法分析:对源程序的字符串进行扫描和分解,识别出每个单词符号。语法分析:根据语言的语法规则,把单词符号分解成各类语法单位。语义分析与中间代码生成:对各种语法范畴进行静态语义检查,若正确则进行中间代码翻译。代码优化:遵循程序的等价变换规则。目标代码生成:将中间代码变换成特定机.

2022-04-01 19:51:39 158

原创 c++ | 智能指针

将普通的指针封装为一个栈对象。当栈对象的生存周期结束后,会在析构函数中释放掉申请的内存,从而防止内存泄漏。auto_ptr(已经弃用)auto_ptr<string> p1 (new string ("aaa)); auto_ptr<string> p2; p2 = p1; // 不报错unique_ptr“独占”所指向的对象 是auto的改进unique_ptr<string> p1 (new string ("aaa")); uniqu

2022-03-31 20:57:31 1068

原创 常识 | c的一些关键字

inline它的作用是编译的时候将函数展开,把函数的代码复制到每一个调用该函数的地方。这样调用该函数的地方就可以直接执行函数代码,而不发生跳转、压栈(指的就是递归)等一般性函数操作。可以节省时间,也会提高程序的执行速度。最好是加上static然后放在头文件中。在嵌入式开发中,内联函数还是比较重要的,将一些功能简洁的函数定义为内联函数,可以减少代码的跳转和栈空间的使用,RAM在嵌入式系统中还是比较宝贵的。缺点:程序占用的空间会变大,因为会多一个内联函数的拷贝volatile易变的,希望

2022-03-31 15:26:52 71

原创 常识 | 虚拟化

VM(virtual machine)虚拟机; VMM(virtual machine monitor)提供虚拟化的平台;在VMM上运行的虚拟机称为geust VM。主流的虚拟化技术架构:hypervisor:VMM是一个完备的OS,包含物理资源和虚拟化功能,虚拟机的cpu、内存、io等都归VMM所有。比较高级,需要开发大量的io驱动。host:物理资源由传统的OS提供,VMM是作为OS中的一个模块(进程),专门提供虚拟化功能,通过调用OS服务来获得资源。可以充分利用已有的驱动。混合模型:VMM拥有物理

2022-03-24 15:08:42 1224

原创 常识 | x86与ARM

x86最早是英特尔推出的cpu架构,后被IBM PC选用,成为PC的标准平台。AMD后来获得了x86的授权,成为64位x86的开拓者。x86基于CISC,在性能方面要快得多、强得多,容易进行性能扩展,如增加内存、硬盘等,在兼容性方面具有无可比拟的优势,有大量的第三方软件可供选择。但是系统的续航能力弱、体积无法缩小、稳定性差。ARM早期采用的是出售许可证的方法,厂商可以更改core配置,但不能修改core本身的设计。后来ARM公司又推出了架构授权,允许芯片厂自行设计ARM架构的core,目前获得这种授

2022-03-23 17:58:55 3273

原创 Linux | cache

一些基础写策略写命中 write through:将数据同时写入cache和主存。随时保持数据正确性,便于一致性维护,但效率低。适用于视频输出。 write back: 只修改cache,块换入主存时再同步到主存。每个cache行存在一个脏位,用来表示是否被修改。减轻了总线竞争,也是大多数情况下的选择。写不命中(cache中没找到) 写分配:加载主存块到cache,并同时更新cache和主存。利用了局部性原理,虽然慢,但增加了下一次...

2022-03-18 11:38:18 143

原创 Linux | 文件系统

文件寻址:先从inode表中找到该文件对应的inode,然后由inode里的指针去寻找文件,包括连续文件、链接文件(隐式、显式)、索引文件VFS(virtual filesystem)介绍:linux中的文件使用统一的接口,比如read() open()等,这是由于VFS的存在,使不同的文件系统表现出一致性行为。硬链接&软链接:硬链接:指向同一个inode,数据部分就是原文件的数据软链接:指向了一个新的inode,数据部分仅包含链接的文件路径dentry:是一种内

2022-03-17 18:47:14 721

原创 Linux | 进程调度

细节基础(不是大框架,是一些细的东西)进程创建:通常由一个父进程fork创建,包含页表复制和pid申请。线程创建:和进程差不多,但可以灵活选择共享进程的哪些资源。线程切换只需要保存寄存器,开销小,进程切换需要页表的切换,涉及到io,开销大进程在Linux中用task_struct 描述,包含了内存管理、调度、信号、id、状态等等对比其他OS,Linux没有就绪态,它将就绪态和运行态合并成一个‘具备运行条件的状态’调度策略:除了按优先级调度、先来先服务、最短优先等基础的以外实时调度

2022-03-17 16:05:18 1362

原创 Linux | 物理内存分配

1. 空闲链表包括最佳适配、最先适配、最差适配2. 内存池一个池子里包含很多空闲链表,每条空闲链表的各个节点大小都是一样的,比如一条全是64KB,另一条全是16kb,分配时先选一条最接近的然后取一个节点分配给进程。缩短了链表线性检索的时间,但对于内存的划分很重要3. buddy系统(内存池的改进)相比内存池,它允许相邻两个一样大的内存块合并,比如2个16KB的合成32KB,然后就挪到32KB的链表上。减少了内存碎片(因为碎片可以合并),但限制所有内存的大小时2的幂,并且链表节点的

2022-03-16 20:29:16 1107

原创 Linux | 地址空间

以32位系统为例,Linux将地址空间3:1划分给系统和用户,用户占0-3GB,系统占3-4GB。用户空间,被划分为segments:____|____| 栈:存放函数过程的变量,向下增长↓|____| 堆和栈中间是一块mmap映射出来的大小不确定的地址空间|____| 堆:存放动态分配的数据,向上增长↑|____| bss段:存储未初始化的全局变量|____| data段:存储已初始化的全局变量|____| text段:包含当前运行进程的二进制码Linux中每个段用...

2022-03-16 20:04:06 739

原创 知识点 | 数据库相关

锁行锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高页锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;并发度一般表锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低共享锁,也叫读锁,或者 S 锁,共享锁锁定的资源可以被其他用户读取,但不能修改。排他锁,也叫做独占锁,写锁或者 X 锁,排他锁锁定的数据只允许进行锁定操作的事务使用,其他事务无法对已锁定的数据进行查询或者修改。死锁解决:直接进入等待,直到超时;主动死锁检测,发现死锁后,

2022-03-16 18:01:19 400

空空如也

空空如也

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

TA关注的人

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