- 博客(19)
- 收藏
- 关注
原创 代码随想录_刷题记录_第四次
前序:中左右 中序:左中右 后序:左右中**二叉树节点的深度:**从根节点到该节点的最长简单路径边的条数(前序递归求深度)**二叉树节点的高度:**从该节点到叶子节点(左右子节点都为空)的最长简单路径边的条数(后序递归求高度)
2024-09-28 17:36:19
968
原创 代码随想录_刷题笔记_第三次
*解决问题:**字符串匹配的问题(eg:文本串 aabaabaaf 模式串 aabaaf 求在文本串中是否出现过模式串)**暴力匹配:**当 b 和 f 不匹配时,整体向后跳一位再进行匹配**KMP:**当 b 和 f 不匹配时,找到 b,从 b 向后继续进行比对(找到 b,这依赖于前缀表)aabaaf:前缀(包含首字符而不包含尾字符的所有子串,a、aa、aab、aaba、aabaa)后缀(包含尾字符而不包含首字符的所有子串,f、af、aaf、baaf、abaaf)
2024-09-28 15:07:50
1162
原创 字符设备驱动 — 4 异常与中断
在硬件上,“ 中断控制器 ” 只有 GIC 这一个,但是在软件上也可以把 “ GPIO ” 称为 “ 中断控制器 ”在设备树中,中断控制器必须有一个属性:interrupt-controller,表明它是 “ 中断控制器 ”还必须有一个属性:#interrupt-cells,表明引用这个中断控制器的话需要多少个 cell如果中断控制器有级联关系 ,下级的中断控制器还需要表明它的 “ interrupt-parent ” 是谁。
2024-09-19 15:27:31
1219
原创 Linux嵌入式相机 — 项目总结
1、初始化触摸屏2、初始化 LCD通过 ioctl 函数获取 LCD 的固定参数、可变参数,得到分辨率、bpp、一行的长度(以字节为单位),将显存映射到内存上,得到 framebuffer 的首地址,使用 memset 函数将这块区域全部设置为 1,即将LCD设置为白色背景3、打开摄像头4、将背景图片1(带有拍照、相册按钮)显示在 LCD 上这个图片的分辨率是 1024 * 600(板子的屏幕的分辨率也是 1024 * 600)5、将图片放入相册将指定目录(/home/)中已有的图片
2024-09-18 15:24:51
1758
2
原创 代码随想录_刷题笔记_第二次
给定一个链表的头节点head,返回链表开始入环的第一个节点。如果链表无环,则返回null。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(如果pos是-1,则在该链表中没有环。pos,仅仅是为了标识链表的实际情况。链表。**思路:**判断是否有环(快慢指针,看它们是否会相遇),找到环的入口节点(设置两个指针,一个从相遇位置向前移动,一个从头节点开始移动,两者会在环的入口节点处相遇)
2024-09-18 15:22:23
1237
原创 代码随想录_刷题笔记_第一次
*题目要求:**给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。**注意:**使用二分查找法的前提条件(有序数组、无重复元素)
2024-09-15 14:56:10
4144
原创 Linux应用—IO
标准IO由ANSI C标准定义,主流操作系统都实现了C库,通过缓冲机制减少系统调用,实现更高的效率我们C语言经常使用的stdio.h就是标准的I/O文件标准IO只能操作普通文件(一般的文本文件和二进制文件)FILE标准IO用一个结构体类型来存放打开的文件的相关信息标准IO的所有操作都是围绕结构体FILE来进行流(stream)FILE又被称为流(steam)文本流/二进制流全缓冲:缓冲区满才输出行缓冲:遇到换行符输出无缓冲:数据直接写入文件,流不进行缓冲。
2024-08-23 14:40:47
582
原创 字符设备驱动 — 3
目的:不再一味的去配置寄存器,简化 GPIO 驱动开发要想让 PIN_A 引脚用于 GPIO 或者 I2C,就需要通过 IOMUX 将它们连接到不同的模块大多数的芯片,没有单独的 IOMUX 模块,引脚的复用、配置等等,就是在GPIO 模块内部实现的。在硬件上 GPIO 和 Pinctrl 是如此密切相关,在软件上它们的关系也非常密切。pinctrl:引脚控制,用来配置比如引脚mux复用信息,引脚电器属性(比如上/下拉、速度、驱动能力等)信息。gpio:控制gpio的输入输出,以及高低电平。
2024-05-30 20:29:45
1515
原创 字符设备驱动程序—1
注意:驱动程序操作硬件:ioremap 映射寄存器的物理地址得到虚拟地址驱动程序与应用程序之间传递信息:copy_to_user、copy_from_user内核中定义有 struct class 结构体,顾名思义,一个 struct class 结构体对应一个类,内核同时提供了 class_create 函数,用它创建 class 类放在 /sys/class 目录下,一旦创建好这个类,再调用 device_create 就可以在 /dev 目录下创建设备节点。eg:上述代码的 class_create
2024-05-29 11:26:17
1720
原创 文件描述符
每个进程在Linux内核中都有一个进程控制块结构体(task_struct),task_struct 中有一个指针 struct files_struct *files 指向文件描述符表(一个数组),这个表中的每一个元素指向一个已经打开的文件指针(struct file)。用户程序不能直接访问内核中的文件描述符表,而只能使用文件描述符表的索引(即0、1、2等数字),这些索引被称为文件描述符。0、1、2 这三个文件描述符当进程被创建时,就被系统所占用了。(0、1、2:标准输入、标准输出、标准错误)
2024-05-27 20:20:37
233
原创 Linux应用 — 网络编程
数据传输的三要素:源、目的、长度怎么表示源和目的呢?所以,在网络传输中,使用 “ IP 端口 ” 来表示源和目的网络传输中的2个对象:server(服务器)、client(客户端)网络协议被分为5层:运输层为两个主机之间进程的通信提供服务。
2024-05-15 20:44:46
645
原创 进程间通信的方式
首先,最简单的方式就是管道,管道的本质是存放在内存中的特殊的文件。也就是说,内核在内存中开辟了一个缓冲区,这个缓冲区与管道文件相关联,对管道文件的操作,被内核转换成对这块缓冲区的操作。管道分为匿名管道和有名管道,匿名管道只能在父子进程之间进行通信,而有名管道没有限制。2)虽然管道使用简单,但是效率比较低,不适合进程间频繁地交换数据,并且管道只能传输无格式的字节流。为此消息队列应用而生。消息队列的本质就是存放在内存中的消息的链表,而消息本质上是用户自定义的数据结构。
2024-05-14 19:56:41
1483
2
原创 线程同步的几种方式
同步:两个或两个以上的进程或线程在运行过程中协同步调,按预定的先后次序运行。比如 A 任务的运行依赖于 B 任务产生的数据。互斥:一个公共资源同一时刻只能被一个进程或线程使用,多个进程或线程不能同时使用公共资源。对于多线程的程序来说,同步就是在一定的时间内只允许某一个线程访问某个资源,具体可以使用一下四种方式实现:互斥锁(互斥量)(mutex)条件变量(condition)读写锁(reader-writer lock)信号量(semphore)
2024-05-13 16:40:01
687
1
原创 文字显示 —— 字符编码
计算机可以显示不同的字符,字符又可以选择以不同的字体样式显示字符编码决定决定显示何种字符字体文件决定字符以何种形态显示。
2024-04-08 21:49:37
1005
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人