自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C语言之问题汇总

为复杂的声明定义一个新的简单的别名。对复杂变量建立一个类型别名的方法很简单,只要在传统的变量声明表达式里用类型名替代变量名,虽然把关键字typedef加在该语句的开头就可以了。或许,在C++中,typedef的这种用途二不是很大,但是理解了它,对掌握以前的旧代码还是有帮助的,毕竟我们在项目中有可能会遇到较早些年代遗留下来的代码。原则是在原来的声明里逐步用别名替换一部分复杂声明,如此循环,把带变量名的部分留到最后替换,得到的就是原声明的最简化版。另外,因为typedef是定义了一种类型的新别名,

2024-04-26 17:47:55 506

原创 内核-自旋锁

每个进程中访问临界资源的那段程序称为临界区(临界资源是一次仅允许一个进程使用的共享资源)。每次值准许一个进程进入临界区,进入后不允许其他进程进入。union {将raw_spinlock结构展开,可以看到这是一个体系相关的arch_spinlock_t结构本文只关心常见的x86_64体系来说,这种情况上述结构展开为上述的结构时SMP上的定义,对于UP来说。arch_spinlock_t就是一个空结构。所以自旋锁就是一个原子变量(修改这个变量会LOCK总线,因此可以避免多个CPU同时对其进行修改)

2023-12-14 14:38:53 741 1

原创 linux驱动开发-PTR_ERR,ERR_PTR,IS_ERR,IS_ERR_OR_NULL

也就是说内核返回指针的函数,如果执行正确,返回的指针的大小绝对不会小于0xc0000000。判断是否为错误指针也是很简单unlikely((x) >= (unsigned long)-MAX_ERRNO),错误码在返回的时候都去负数了,负数大的他的绝对值就小了。内核中没有这个变量,因此内核开发者根据内核的地址空间的特点用了一种新的方法来获得错误码。内核函数都遵守一个约定,如果不能返回正确的指针,那么就返回错误的,在不同的体系结构中也有一些err的宏定义,但是内核规定总的大小不能超过4095。

2023-12-01 17:29:38 552 1

原创 linux驱动开发-内联函数与宏

define <宏名> <字符串>例: #define PI 3.1415926。

2023-12-01 17:06:10 811 1

原创 linux驱动开发-regmap框架

linux引入regmap是为了统一管理内核的i2c,spi等总线,将i2c、spi驱动做了一次重构,把I/O读写的重复逻辑在regmap中实现。只需要初始化时指定总线类型、寄存器位宽等关键参数,即可通过regmap模型接口来操作器件寄存器。将等抽象出统一接口等接口,从而提高代码的可重用性。regmap是在linux内核为减少慢速I/O驱动上的重复逻辑,提供的一种通用接口来操作底层硬件寄存器的模型框架。如下所示:底层物理总线。

2023-12-01 14:08:53 1197 1

原创 《C和指针》动态内存分配

数组的元素存储在内存中连续的位置上。当一个数组被声明时,所需的内存在编译时就被分配。当然也可以使用动态内存分配使得在运行时为它分配内存。

2023-11-16 19:34:07 27 1

原创 Linux终端指令

可以使用它在文件中搜索某个单词或单词的组合,也可以将其他linux命令的输出通过管道传输到grep,并显示出想要查看的输出。ls是list的缩写,可以通过ls命令不仅可以查看linux文件夹包含的文件,还可以查看文件权限(包括目录、文件夹、文件权限)查看目录信息等等。其中,pattern表示要查找的模式,file(s)表示要查找的文件,如果不指定文件,则默认从标准输入中读取数据。demsg:内核的所有输出会进入缓冲区中,而不是打印到stdout上,这是因为stdout是进程特有的环境。

2023-11-08 18:55:27 39 1

原创 《C和指针》-课后习题

2. 编写一个函数,删除一个字符串的一部分。函数的原型如下: 在写上述代码的时候出现了两个问题:程序报错:Program received signal SIGSEGV,Segmentation fault。执行到(*str++) = (*ps++)会报错。原因:最开始的变量初始化 char *str = "ABCDEFG"; str指向的是只读常量区,所以执行到(*str++) = (*next++)会报错,该语句试图改变只读常量区里的值时,操作系统向程序发送了一个信号,告诉程序操作系统检测

2023-10-25 15:27:39 52 1

原创 ubuntu下安装vscode(C/C++)

在窗口顶部出现操作面板,在其中选择使用“Tab”缩进之后会接着出现从1-8这几个数字的选项。对于刚下载好的vscode中的代码格式不一定是适合自己平时的阅读习惯和编码习惯所以需要进行相应的设置。另一种方式是通过"File"菜单中的"Preferences"子菜单打开"Settings"面板,点击右上角的"只需要在该输入框之中将值改成4就可以修改制表符空格数量为4个了,但是输入浮点数或者不是数字的字符就是会出现报错提示。提供了许多常见的代码片段,例如if/else语句、循环语句、函数定义、数组操作等等。

2023-10-24 13:56:49 5204 2

原创 算法学习-队列与广度优先搜索(BFS)

BFS就是从图中的某个顶点出发,寻找紧邻的、尚未访问的顶点,找到多少就访问多少,然后分别从找到的这些顶点出发,继续寻找紧邻的、尚未访问的顶点。由于广度优先搜索是一层一层的依次往下进行搜索,直到所有的顶点都被访问完截止。而最短路径一定是最先访问到最后终点的,所以打印出来的路线是最短的。BFS思想:像树的遍历当中的层序遍历,一层一层的搜索,搜索完一层后再搜下一层,直到最后得到想要的结果。通过广度优先搜索的规则可以看出,它可以和队列结合进行代码的编写。BFS适用于统计路径的条数,比如说走迷宫的问题。

2023-10-17 13:56:29 314

原创 算法学习-栈与深度优先搜索(DFS)

首先给定一个二维数组来表示一个迷宫,其中1表示墙壁,0表示可以走的路,规定只能横着走和竖着走,不能斜着走,要求通过写一个程序,找出从左上角到右下角中的一条路线。在深度优先搜索的过程中,借助了栈的方法达到回溯的要求。2. 如果一个都没有找到,则回退之前访问过的顶点,看看是否存在漏掉的顶点。图的遍历主要是逐个访问图中的每一个顶点,并且还要确保,图的所有顶点都只被访问一次。通常情况下,深度优先搜索算法访问图中顶点的顺序是不唯一的,即顶点的。其实通过具体步骤的分析可以看出,在深度优先搜索的时候,可以用一个。

2023-10-17 09:33:11 468

原创 算法学习-归并排序

通过图片可以看出,对于一个需要排序的数组,首先以start是否小于end的条件,不断的分割数组,只到不符合条件为止。分割完后再依次向上合并,合并的时候需要将数组进行按照由小到大进行排序。常见的算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。外部排序:因为排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。1. Divide:把长度为n的输入序列分为两个长度为n/2的子序列。3. Combine:将两个排序好的子序列合并排序成最终的排序序列。

2023-10-16 13:49:42 23 1

空空如也

空空如也

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

TA关注的人

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