自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 二叉树三种遍历方法的使用场景

先序遍历:在第一次遍历到节点时就执行操作,一般只是想遍历执行操作(或输出结果)可选用先序遍历;中序遍历:对于二分搜索树,中序遍历的操作顺序(或输出结果顺序)是符合从小到大(或从大到小)顺序的,故要遍历输出排序好的结果需要使用中序遍历后序遍历:后续遍历的特点是执行操作时,肯定已经遍历过该节点的左右子节点,故适用于要进行破坏性操作的情况,比如删除所有节点作者:Entronad链接:https://www.zhihu.com/question/22031935/answer/153859490来

2022-01-18 14:48:41 1012

转载 linux中likely()和unlikely()

likely()与unlikely()在2.6内核中,随处可见,那为什么要用它们?它们之间有什么区别呢?首先明确:if (likely(value))等价于if (value)if (unlikely(value))等价于if (value)也就是说likely()和unlikely()从阅读和理解的角度是一样的。这两个宏在内核中定义如下:#define likely(x) __builtin_expect(!!(x), 1)#define unlikely(x) __builtin_exp

2021-12-13 11:04:21 295

原创 Xorg手动编译需要的环境配置

下载xorg-server的源码后,进入目录直接./configure会出现很多缺少包的提示,因此配置环境有点麻烦。方便起见,在此记录。如果还有缺少可以根据提示apt-cache search 查找后安装。sudo apt-get install pkg-config libpixman-1-dev libx11-dev x11proto-gl-dev libglib2.0-dev libgl1-mesa-dev x11proto-xf86dri-dev libgcrypt11-dev...

2021-12-01 16:46:00 1695

原创 嵌入式linux学习笔记1-19 I2C

1.硬件连接 I2C仅需两根线就可以支持一主多从或者多主连接,I2C使用两个双向开漏线,配合上拉电阻进行连接。由于需要的硬件简单,所以即使没有I2C控制芯片,只需要控制两个GPIO口也能达到类似I2C的传输效果。2.I2C通信协议 下图黑色是主设备发给从设备的信号,红色是从设备发给主设备的信号。主设备发送一个start信号。 主设备发送一个8位数据,前7位是设备地址(由于一主多从需要通过设备地址来区分设备),最后一位代表方向,0代表写,1代表读。 第9...

2021-11-18 22:39:02 1014

转载 linux驱动入口函数module_init如何被调用

linux驱动入口函数module_init如何被调用 - 简书

2021-09-24 15:09:45 242

转载 USB基本概念

目录1. USB系统组成2.USB拓扑结构3.USB系统程序4.USB速度选择5.USB信号描述6.USB协议6.1 USB基本规范6.2 信号层6.2.1设备速度的检测6.2.2 信号的编码6.3 协议层6.3.1 usb包6.3.2 packet7.USB 设备枚举及描述符介绍8.例程分析1. USB系统组成主机:提供USB接口和接口管理功能的硬件、软件、固件的复合体。PC机或OTG设备,一个USB系统只能有一个主机...

2021-09-06 19:00:57 2596

转载 C语言结构体中位域的概念

结构体中的冒号表示位域。位域出现的原因是由于某些信息的存储表示只需要几个bit位就可以表示而不需要一个完整的字节,同时也是为了节省存储空间和方便处理。其表示形式为:struct 位域结构名{ 类型说明符 位域名:位域长度}例如:struct bit_struct{ int bit1:3; int bit2:5; int bit3:7;}data;其中bit_struct表示位域结构体,bit1、bit2、bit3表...

2021-08-31 20:41:06 1580

转载 滑动窗口算法

本文详解「滑动窗口」这种高级双指针技巧的算法框架,带你秒杀几道高难度的子字符串匹配问题。LeetCode 上至少有 9 道题目可以用此方法高效解决。但是有几道是 VIP 题目,有几道题目虽不难但太复杂,所以本文只选择点赞最高,较为经典的,最能够讲明白的三道题来讲解。第一题为了让读者掌握算法模板,篇幅相对长,后两题就基本秒杀了。本文代码为 C++ 实现,不会用到什么编程方面的奇技淫巧,但是还是简单介绍一下一些用到的数据结构,以免有的读者因为语言的细节问题阻碍对算法思想的理解:unordered_m

2021-08-30 14:17:23 206

原创 嵌入式linux学习笔记 1-11 LCD

1. LCD硬件原理 屏幕上每个像素是由电子枪一边移动一边发出颜色的,每当来了一个pixel clock就移动一个像素。颜色是通过RGB三组线确定。当接收到HSYNC脉冲电子枪知道这行像素已经解决,跳到下一行。当接收到VSYNC脉冲,电子枪知道所有的像素都搞定了,重新回到原点。这是一个关于LCD显示屏原理的gif图https://images0.cnblogs.com/blog2015/268182/201508/261557535783549.gif更多更详细的原理参考这篇...

2021-08-27 15:03:57 325

转载 C语言中关键字auto、static、register的作用

auto:这个关键字用于声明变量的生存期为自动,即将不在任何类、结构、枚举、联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量。这个关键字不怎么多写,因为所有的变量默认就是auto的。 register:这个关键字命令编译器尽可能的将变量存在CPU内部寄存器中而不是通过内存寻址访问以提高效率。如果一个变量被register来修饰,就意味着该变量作为一个寄存器变量,让该变量的访问速度达到最快。例如,一个程序逻辑中有一个很大的循环,循环中有几个变量要频繁进行操作,这些变量就可以声..

2021-08-27 14:37:02 711

原创 嵌入式Linux学习笔记 1-16 Nand Flash

1. 前言NAND FLASH是一个存储芯片那么: 这样的操作很合理"读地址A的数据,把数据B写到地址A"问1. 原理图上NAND FLASH和S3C2440之间只有数据线,怎么传输地址?答1.在DATA0~DATA7上既传输数据,又传输地址 当ALE为高电平时传输的是地址,问2. 从NAND FLASH芯片手册可知,要操作NAND FLASH需要先发出命令 怎么传入命令?答2.在DATA0~DATA7上既传输数据,又传输地址,也传输命令 当ALE(addr...

2021-08-24 14:21:04 820

原创 嵌入式linux学习笔记 1-15 Nor FLash原理即硬件操作

1. NorFlash与NandFlash的特点 Nor Flash Nand Flash 接口 RAM-like, 引脚少,复用,数据线上传输命令、地址、数据 容量 小 大 读 简单,像内存一样读 复杂 写 发出特定命令(慢) 发出特定指令(快) 价格 贵(无位反转,坏块) 便宜(但是会位反转有坏块) XIP (execute in place) 在芯片上直接运行

2021-08-21 19:44:10 690

原创 嵌入式linux学习笔记 1.5-1 u-boot分析与使用

目录1.编译配置过程2. U-boot功能3.Makefile结构分析4.U-boot源码分析1.编译配置过程1. 解压缩《u-boot-1.1.6.tar.bz2》tar -xvf u-boot-1.1.6.tar.bz22. 打补丁:patch -p1 < ../u-boot-1.1.6_jz2440.patchpatch -p0 file1(想被打的文件) < test.patch(补丁)-p1:忽略补丁文件中的第一个“/”之前的参数即

2021-08-11 19:26:47 242

原创 嵌入式Linux学习笔记 1-14 异常与中断

1. 异常与中断的概念引入与处理流程上图解释了何为中断何为异常,其中中断也是属于一种异常。引申拓展为ARM对异常(中断)的处理过程:1)初始化(1)设置中断源,让他可以产生中断。如某个按键可以产生中断的话,我们可以设置他的gpio引脚为中断引脚(2)设置中断控制器(屏蔽,优先级),屏蔽的话就是在要使用的时候打开,优先级是同时有多个中断,我们先去处理那一个(3)设置CPU总开关(使能中断)2)执行正常程序3)有中断产生。如按键按下---->中断控制器----->...

2021-08-10 14:17:45 433

原创 嵌入式Linux学习笔记 1-13 代码重定位

引入:2440芯片通过内存控制器直接与NorFlash、SRAM、SDRAM相连接,但是NandFlash与内存控制器非直接连接,当中还需要一个NandFlash控制器且NandFlash连地址线都没有,但是即使这样为何我们可以设置NandFlash启动? 这是因为,当NandFLash中的代码<4K(SRAM的大小)时,会将4K的数据直接写入SRAM,然后CPU从0地址开始运行,0地址对应的SRAM。当NandFLash中的代码>4K时,会借SRAM为载体,把程序复制到SDR...

2021-08-03 16:48:33 448

原创 嵌入式linux学习笔记 1-12 内存控制器与SDRAM

引入:CPU通过访问内存地址查看或修改各种寄存器,从而控制各个引脚接口的输入输出。CPU和各个寄存器之间还有一个控制单元叫内存控制器。内存控制器会根据地址选择不同的模块 ,并把数据发给这个模块或从这个模块中得到数据返回给CPU(会有引脚LnOE/LnWE确定数据的传输方向,是CPU==>外设 or CPU<==外设)。内存模块通过片选引脚(GCS chip select)与内存控制器相接,内存控制器读CPU发出的指令的地址,根据不同的地址发送不同的片选信号(GCSn), 只要...

2021-07-29 19:18:19 406

转载 嵌入式linux学习笔记 1-11 串口UART

1. UART初始化,配置寄存器(1)配置引脚,将GPIO口配置为TX或是RX。(2)配置TX、RX引脚为上拉使能 为了使没有数据传输时,时钟保持高电平。(3)设置波特率(4)设置数据格式2.收发数据发送数据:以字节为单位,内存中的数据先被存入寄存器,然后再通过UART发送。再通过查看UART状态寄存器,查看发送buffer中是否为空(当发送完成后,buffer会被清空),若空则可发送下一组数据。接收数据:以字节为单位,读寄存器。...

2021-07-28 09:38:56 265

原创 嵌入式linux学习笔记 1-10 ARM芯片时钟体系

控制系统时钟的原理如下图所示,MPLL(main PLL)为锁相环,通过配置MPLLCON来控制FCLK(即CPU的时钟),由于HCLK = FCLK/HDIV , PCLK = PCLK/PDIV, 所以可以通过配置CLKDIVN来控制HDIV和PDIV,从而控制HCLK和PCLK。 另外CLKDIVN的HDIVN位非零时,CPU需要通过一些汇编指令配置为异步模式。...

2021-07-23 13:50:40 162

原创 嵌入式Linux学习笔记 1-9 gcc

1. 一个C文件需要通过步骤变成一个可执行文件的? 要通过预处理、编译、汇编、连接这四步。预处理: 处理包含“#”的那些命令。如“#include”、“define”宏定义展开、“ifdef”条件编译 等。最后输出到一个“.i”文件中等待进一步处理。file.c==>file.i 编译:把C代码翻译成汇编代码。file.i==>file.s 汇编:把汇编代码翻译成符合一定格式(ELF)的机器码。file.s==>fi...

2021-07-22 20:26:22 321

原创 嵌入式linux学习笔记1-8 第1个ARM裸板程序及引申

第一期第008课_第1个ARM裸板程序及引申1.程序计数器(program counter)= 当前指令 + 8,因为ARM内核为了使运行效率更高,在执行当前指令时,已经在解析当前指令地址+4的指令,同时在读取当前指令地址+8的指令。 所以地址为0 的指令意为 r1= [pc+20]=[0+8+20]=[0x1C]=0x560000502....

2021-07-20 19:55:19 222

空空如也

空空如也

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

TA关注的人

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