自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 xv6 启动流程

是的,就是这个简单的不能再简单的指令,这就是第一条指令,在riscv中,他是一个汇编指令。并且这是一个每个cpu都有的4096字节的栈。生活是一辆列车,重要的是从哪来,到哪去,程序也是一样,那么,我们程序中的第一条指令,到底从哪里来呢?这里涉及到了riscv的联动。首先我们可以看到sp是栈指针,储存的是栈的初始地址。csrr a1,mhartid会将CPU的id号加载到a1中。addi a1,a1,1会将a1加1,变成新的cpu。sp+a0最后得到的就是真正的初始栈地址了!然后a0储存的是栈的大小。

2024-03-16 17:43:13 211

原创 xv6第一章:神奇的makefile梳理

其中,扩展名必须为大写的 S,这是因为,大写的 S 可以使 gcc 自动识别汇编程序中的 C 预处理命令,像#include、 #define、 #ifdef、 #endif 等,也就是说,使用 gcc 进行编译,你可以在汇编程序中使用 C 的预处理命令。对于这一行,我们可以看到,我们使用了echo $(LAB),这其实是打印出LAB对应的SYSCALL并且在SYSCALL中使用tr,可以看到后边是一个tr的命令,他的意思是,将所有的小写字母转化为大写字母!有人会问,LAB这个变量从何而来,其实很简单。

2024-03-16 13:29:10 1548

原创 【无X是随机变量标题】

X是随机变量,x是具体取值,因为取值可能很多,所以需要X来表示很多这个过程,同时用x表示具体是什么,来表示x造成的影响。

2024-02-20 16:04:28 366

原创 【无标题】

然后就是随机变量是什么,那就是一种类似于函数的表示,比如我有X,这不是一个表示变量,而是一个函数的好表示过程,比如说,X<12,不是说x<12,而是f(x)<12。因为我希望一个映射可以更好的表示,所以我有X。然后x是什么,那就是我们的最大值,也就是说,我们设置了最大值和概率之间的关系。X呢,X就是我们的表示这种的函数,只不过我们需要一个东西作为中间变量罢了。首先,我是数学的神,我想命令谁是变量,谁就是变量。所以所谓的数学变量是我自己定义的。

2024-02-20 15:47:34 80

原创 【无标题】

对于参数和自变量,比方说我们想求y和x的关系,此时y是因变量,x是自变量,与此同时呢?我们需要一个东西,那就是参数,为什么?比如说正态分布,诚然miu和theta是会影响结果的。不是,所以我们只关心x和y,那为什么这里有,你可以这样想,如果没有,我们就必须有许多方程,但是miu和theta可以概括这所有的情况,使语言成为数学语言,同时我们只要不关心他们,他们爱是多少,是多少,虽然他们可以变,而且确实在变,但是最后我们只会使用到他们的一种情况,对于自变量却是研究关系,这就是参数和自变量。

2024-02-18 09:41:31 85

原创 【无标题】

同时,如果我们发现了另一个东西:也就是还有一个变量,Y>y这种随机变量就是一个例子,一旦y确定了,Y也确定了关系,这时候y看似是一个变量,但是因为我们不是想看y的整体的关系,我们只是希望y作为一种常数的代表,换句话说,我们将y看做变量也可以,最后确实得出了一个结论,但是最后关头我们一定会给y一个赋值,让y变成集合中仅一个,这,就是我认为常数和变数的区别了。2、对于y=2x,这种等式是一对一映射,集合中一个数对应另一个集合中另一个数。对于y>2x这种不等式,是把集合中一个数映射成另一个集合中的一个集合。

2024-02-17 09:53:13 180

原创 【无标题】

头结点是我们的链表中那个没有数据域的节点,通过头结点,可以将原本的需要特殊处理的头插法变为不需要特殊处理的一般方式,于此意义,头结点如同一座桥梁,深刻发挥着自己的作用。// 那就是dist[j]可能更小,而dist[j]是一个,因为只有与其直接相连的,dist才不是无穷。// 事实上,这个head结点是十分重要的,他应该是一个外部变量,因为头结点应该是一直存在的。// 不是无穷了,也可能是无穷,这并不重要,重要的是还有后续操作哦!// 所以这其实应该看做是一个整体,既是箭头,又是节点内存块。

2024-02-11 22:56:40 556

原创 【无标题】

求长度的方法(数组):sizeof(num) /sizeof(int)

2024-02-02 11:31:08 221

原创 【无标题】

之后,我们将会看到其他的消息,其中一个就是头结点,对于头结点,关键是他是一个虚拟的节点,它不保存数据,而头指针,指向第一个节点,有头指头,无头指初。List是一种统称,叫线性表,是一个大类,包括数组和链表,其中数组是顺序的,链表则是可以随时插入的,因此这就是他们的区别。然后双向链表就是有头结点和尾结点,所以顺序不是单向的,上边都是单向节点。然后注意的是,指针包括头尾和线,头,我们无法表示,尾和线都是一个东西。之后是双端节点,特点是还有一个指针指向尾节点。一下还有,什么是静态链表,以及复杂度分析!

2024-02-01 12:31:36 64 1

原创 elf文件逻辑解析

对于包含一个数据的符号,st_size表示这个符号的大小,比方说double就是8(字节),而num则是我们的符号在符号表中的下标,之后是name,也就是符号的名称,那么这个名字怎么获得呢,这就要说明为什么字符串表二符号表都必须有了,原因之一就是我们的name其实是偏移,谁的偏移,答案是strtab的偏移量,相对于strtab的基准的偏移就是我们的name的本质了。以下只是个人版本的,对elf文件的相关格式的理解,不是官方版本的,而且因为喜欢举例子,所以是通过举例子的版本来的。

2023-10-01 00:01:07 29

原创 【无标题】

对于char b[] = "55" ,我们是movw了而其中0x3535就是0x35 x 2 也就是ascii53也就是字符5,所以这是char的初始化过程,即给%rbp - 0xb两个5,而movb $0x0,-0x9(%rbp)就是给数组最后赋值'\0'然而对于char *a,我们则不是这样的,我们给他存的是%rax是一个地址,指向了我们的a的存储的实际地址的位置,然后我们看一下。这就是其中的a和b的过程,然后我们可以看到a和b的初始化分别在这两个位置,之后我们继续查看后续·。

2023-09-30 08:53:04 20

原创 【无标题】

在其中有很多核心的文件,其中一个就是四元数的转化函数,我们来看odomCB,首先我们获得了msg中的xyz,之后我们通过一个euler_from_quaternion进行转化,这是一个四元数转化为欧拉角的函数,通过这个函数,我们将。在launch文件中,我们知道arg指引的是我们在launch中定义的参数,所以我们会开启一个ns为JA01的faster算法的py文件。注意python中的回调函数,这是一种十分特殊的函数,通过这一函数可以实现很多功能。其关键是将一个函数作为参数传给下一个函数。

2023-09-19 17:33:24 16

原创 【无标题】

刚才是链接,而且是静态链接,现在是装载。首先进程可以使用的只有3GB,因为有1GB被kernel使用了。之后pae是什么,pae不过是一种映射方式,通过这一映射方式,我们可以确保我们的pm可以大于4G,当然,vm不可以,因为vm取决于cpu。我们可以通过调用多个256mb的窗口达到将多个物理内存映射到同一虚拟内存的结果。

2023-09-15 21:10:15 13

原创 【无标题】

首先,链接的对象是谁,你不是说了吗,对象吗,hh,也就是说是a.o,b.o这样的.o文件,通过这些文件,链接可以顺利进行,同时,由于.o文件具有多个段,因此第一步就是将他们按照各个段进行合并,如此就可以顺利实现链接第一步了。但是这个vm是os自己分配的,而不是我们分配的,一开始的时候也是没有的,也就是说分配过程是后过程,而非前过程。总之关键在于,我们通过地址分配得到了结果,得到了偏移量,得到了段长,然后通过地址分配,得到最终连接的结果。通过objdump -r a.o则可以看到a.o的重定位地址。

2023-09-14 19:54:16 20 1

原创 【无标题】

首先我们调用的是cpu_exec(-1),也就是说,首先获得现在的g_print的step,也就是看是否现在的传入的n小于最大运行指令数,之后我们看状态state,是end或者abort就报错,否则就给state赋值为running,然后我们就开始看运行时间了, 我们先通过execute指令进行执行,过程中我们要看到下一步是先对n进行递减,之后进行n次exec_once,过程中每次都进行isa_exec_once,其结果是让pc和snpc都置为pc,其中s为我们刚定义的一个指令。于是空格就是空格*3+1。

2023-09-14 19:19:21 32 1

原创 对while循环的理解

这里我们将会对我们的while循环是否加;

2023-08-25 23:36:12 23 1

原创 【无标题】

pa中一个很有趣的字符串处理函数就是我们的strtol函数,这个函数和strtok函数很像,注意不要搞错哦。strtol可以将字符串转化为长整型,众所周知的是,长整型真的很具有魅力。

2023-08-25 00:50:07 23 1

原创 关于变量的思考

很简单,你找的东西会不会变,如果你们两个都罩住了水果,水果自己当然可以变化,它变了我们自然也就跟着变,可是如果你找的东西是不会变的,我承认,你异火吞了之后自己升级了,可是这跟我异水有什么关系,我异水照样还得按照自己的实力找下一个等级的异火(水),我是没有变的,因为你升级的不是你找的东西这个共同体,而是你这个异火本身这个独特的变量,这样想来故事似乎也变得简单了呢。a和b显然都是那个该死的水果的附属品,虽然但是,他们对的确实是同一个盒子。好吧,语言是如此的苍白无力,我企图用例子进行形象化处理。

2023-08-24 22:32:43 27 1

原创 【无标题】

在safegetparam中,我们调用了getparam,这是一种获得参数的方法,怎么呢,其中第一个参数是我们在roslaunch文件中为为我们要传递的参数所起的名字,而第二个参数呢,则是我们在程序中定义的变量的名字,在launch文件中我们会定义一个参数,这里便是将参数中的值付给了程序中我们定义的变量。这里也不难看到,我们其实是使用了rospy的订阅者模型,而且我们订阅的对象很简单,那就是一个是State类型的数据,一个是Twist类型的数据,目前的问题是这两种数据类型信息及其关联,未知!

2023-08-24 21:12:16 16 1

原创 【无标题】

vue一个十分重要的点是,我们必须确定我们的单词拼写是正确的。

2023-08-20 12:55:07 16 1

原创 【无标题】

另一个很重要的点是,我们第一次传入的我们的字符串,但是第二次我们传入的就开始是NULL了,这是一个硬性要求。也就是切割字符串str,将其分割成所有的后边的子串,知道我们到达结尾了,我们呢返回NULL。strtok的使用是十分重要的,接下来我们将会对strtok的使用进行解析与解释。然后对他们的每一个字符以此比较,如果返回值小于0,str1小于str2。要是找不到对应的字串,我们就返回strtok对应的字符串。首先我们比较str1和str2,什么是strcmp,很简单。

2023-08-19 20:30:29 18

原创 【无标题】

显然,现在是两个地址作为一个块了,简单的方法已经不行了(指的是看最后两位),很简单,现在的最后一位,只有一个作用,那就是看到底是对应的什么偏移量,也就是每一个块有两个地址,对应的是左边的还是右边的,当然我们这里是一一对应的!首先我们看的就是这个东西,这里展示的就是我们的内存memory的直观展示,注意的是,每一个不同的颜色就是一个不同的内存块,换句话说,就是一个地址对应一个块,而这个块就是有自己的大小的,大小是多少呢,答案是1byte。我们是左边是一个索引,右边是一个值,值是一个byte。

2023-08-13 00:09:41 16 1

原创 C语言正则表达式

在该篇文章中,我将会对我使用C语言的正则表达式的过程进行一些记录,同时对其中的一些问题进行一定程度的解答,并对一些我无法回答的问题进行记录,希望有朝一日我能将这些问题成功解答出来。说白了,这就是几种不同的匹配规则,就好像到底匹配的时候到底应该使用哪种匹配,一般我使用的时候就是使用扩展形式的正则表达式。到底怎么样才能匹配到所有的,全局的匹配呢,因为显然这里只能匹配到唯一一个符合标准的,真实令人头大啊!一是我们将会得到pmatch[0],其中储存的是我们的匹配的结果。REG_NOSUB 不用存储匹配后的结果。

2023-08-01 16:26:54 69 1

原创 strtok的通俗使用

显然,经过:和,可以将这个字符串分割成三个部分,所以我们使用一个char*p[3];也就是我们将str通过,和:进行了分割将结果保存在了p中。结果就是我们想象的那样了。我们使用了p[i] = strtok(str,",:");首先我们定义一个字符串(“我,好:帅”)

2023-07-13 10:06:42 25

原创 makefile之南大pa使用

如果存在a=$(b) 和 b=$(a)就可以陷入到无限的展开中,若是使用了shell和wildcard,由于不知道会被调用多少次,所以会产生程序报错。将reverse中的$(1) 和 $(2) 变为a和b后将reverse的值作为输出即为b,a。对于 = 左侧是变量,右侧是变量的值,可以定义在任何一处,即使是后边的前边的也可以使用。把执行操作系统命令后的输出作为函数返回,通过生成一个新的shell程序的方式进行操作。这种方法的特点是前边的变量不能使用后面的变量,只能使用前边已经定义好的变量。

2023-07-13 09:41:42 59

原创 鸟哥的Linux私房菜——sed 的尝试英语解释

(3)-f (filename) 执行filename中的文件的sed命令。(5)-i (immediate) 直接修改读取的文件内容,而不是屏幕输出。(1) -n (silent) 只有经过sed特殊处理的一行会被列出来。(2) -e (editor) 直接在命令行界面进行sed的编辑。c:change 改变,取代n1和n2之间的行。(4)-r (regex) 延伸性正则表达式。i:insert插入 在目前的上一行出现。a: add 新增 在目前的下一行出现。s:save 取代,进行取代。

2023-06-30 00:01:43 32

原创 C语言内联汇编理解

答案是,内容自然可以省略,想我们上边的(1),但是即使内容可以省略,可是冒号却无法省略,事实上我们也知道,这样的用法即使是在JAVA中,也是很常见的。开头已经知道了,那么什么是a,什么是b,也就是说,我们任何时候,先得知道我们有什么权利,我们的限制是多少,接下来呢,我们要知道的是我们对谁有权利,那么对谁有呢?% 操作数甚至可以和下一个操作数切换 ,什么是%,在计算机里可以认为他是取模,取模可以循环着来,那么%自然也可以变来变去,不过这只是个人的理解。(2). =a(initval) 是我们的输出。

2023-06-29 23:25:46 55 2

空空如也

空空如也

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

TA关注的人

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