- 博客(30)
- 收藏
- 关注
原创 LINUX-内核驱动
中断嵌套:当CPU正在处理一个中断源请求的时候(执行相应的中断服务程序),发生了另一个优先级比他还高的中断源请求,如果CPU能够暂停对原来的中断源的服务程序,转而去处理优先级更高的中断源请求,处理完以后,再回到低级中断服务程序,这样的过程称为中断嵌套。通常不能超过(6%)。中断:当中央处理机 CPU 正在处理某件事的时候外界发生了紧急事件请求,要求 CPU 暂停当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。定时器:溢出一次,定时一次。
2025-09-08 09:17:05
941
原创 liunx-树和二叉树
例如,对于根节点1,访问路径为:1(第1次经过,先序访问)→2(第1次经过,先序访问)→4(第1次经过,先序访问)→4(第2次经过,中序访问)→4(第3次经过,后序访问)→2(第2次经过,中序访问)→5(第1次经过,先序访问)→5(第2次经过,中序访问)→5(第3次经过,后序访问)→2(第3次经过,后序访问)→1(第2次经过,中序访问)→3(第1次经过,先序访问)→3(第2次经过,中序访问)→3(第3次经过,后序访问)→1(第3次经过,后序访问)。其中,A的左指针指向第一个孩子B,右指针为空;
2025-08-28 10:31:22
707
原创 进程间通信-IPC机制
原因:进程间空间独立,无法直接通信,需要IPC机制实现通信同一主机进程间通信:1、古老的通信方式无名管道:可以用于同一主机,任意进程间通信有名管道:只能用于同一主机,具有亲缘关系的进程间通信(父子进程间)信号:进程间通知机制2、IPC对象通信system V共享内存:效率最高消息队列:信号量集(信号灯)主要同在不同主机进程间通信1、socket通信网络通信1.创建无名管道:pipe() pipefd[0] 读端 pipefd[1]:写端。
2025-08-22 10:02:58
1957
原创 LINUX-线程的学习
轻量级的进程,可实现多任务的并发。进程是操作系统资源分配的最小单位;线程是操作系统任务调度的最小单位。线程由某个进程创建。进程创建线程时,会为其分配独立的(8M)栈区空间;线程和所在进程,以及进程中的其他线程,共用进程的堆区、数据区、文本区。
2025-08-19 15:05:53
1067
原创 数据结构-内核链表-栈—队列
这个关系称之为哈希函数。存储数据时,通过对应的哈希函数可以将数据映射到指定的存储位置;哈希存储:将要存储的数据的关键字和存储位置之间,建立起对应的关系,查找时,仍可通过该函数找到数据的存储位置。哈希表(散列表):提高数据的查找效率。
2025-08-06 21:55:28
157
原创 C语言编译Makefile文件的使用
时间戳:在编译代码时,只编译修改后的源文件,其他没有修改的,只进行链接即可。依赖文件:main.c fun.c。2文件名Makefile或者makefile。L:指定使用到的库所在的位置。I : 指定头文件所在位置。目标文件:a.out。链接:处理多文件及函数的链接关系。汇编:将汇编指令生成二进制指令。编译:将源程序转换成汇编指令。预处理:处理和#相关的指令。
2025-08-06 21:36:13
265
原创 ubangtu虚拟机的网络配置,以及gcc中内存探测工具
ubantu 安装valgrind 终端输入:sudo apt-get install valgrind。2. 编辑-》虚拟网络编辑器-》更改设置-》VMnet0-->桥接--》桥接到PC正在上网的网卡上。使用指令:valgrind 可执行程序 例如:valgrind ./a.out。gnu提供的内存探测工具,可以用来监测内存错误和内存泄露。1. 虚拟机-》设置-》网络适配器-》桥接模式-》确定。--》应用--》确定。
2025-08-06 21:05:55
218
原创 linux开发-C语言数据结构学习
散列结构:(哈希结构)将数据的存储位置与数据元素之间的关键字建立起关系,根据该关系进行数据存储和插值。索引结构:将要存储的数据的关键字和存储位置之间构建索引表。树形结构:数据元素与元素之间存在一对多的关系(二叉树)链式结构:可以在内存中选用一段非连续的内存空间进行存储。顺序结构:在内存中选用一段连续的内存空间进行存储。2)物理结构:数据元素在计算机内存中的存储方式。图形结构:数据元素与元素之间多对多的关系。1)逻辑结构:数据元素与元素之间的关系。集合:元素与元素之间平等的集合关系。
2025-08-04 09:10:52
401
原创 Linux 开发-C语言指针的学习
在C语言中,指针是一种变量,用于存储内存地址。每个变量在内存中都有唯一的地址,指针通过保存这一地址实现对变量的间接访问。对于指针p p + n 仍未一个指针,指针地址为p + sizeof(n基类型)4、在两个或者多个具有包含关系的作用域中定义的同名标识符,外层标识符在内层不可见。作用域:局部作用域、全局作用域(全局作用域的变量未赋值,自动清零)2、在没有包含关系的两个不同作用域中定义的同名标识符,互不影响。数组名本质是首元素地址的常量指针,可通过指针算术访问数组元素。可访问或修改目标变量的值。
2025-07-28 22:52:09
434
原创 Linux开发C语言学习—预处理命令
宏定义是C语言预处理命令中最常用的功能之一,通过#define指令实现。对象式宏和函数式宏。// Windows平台专用代码// Linux平台专用代码#else// 其他平台代码#endif。
2025-07-27 23:22:26
284
原创 C语言函数的嵌套调用、递归调用
1. 函数未声明int main()foo();// 未声明或定义return 0;修正:在调用前声明或定义函数。2. 递归无终止条件// 无限递归修正:添加终止条件。3. 数组越界访问// 越界访问修正:确保索引在有效范围内。4. 参数类型不匹配int main()// 类型不匹配return 0;修正:传递与声明一致的类型。5. 返回值类型错误int func()// 返回字符串而非int修正:返回声明类型的值。6. 数组作为参数时长度丢失。
2025-07-24 23:23:53
372
原创 C语言循环语句的使用(goto语句 while语句 do while语句 for语句)
goto语句允许程序跳转到代码中的指定标签位置,通常用于简化错误处理或退出多层循环。Goto 语句是一种控制流语句,允许程序无条件跳转到代码中的指定标签位置。其语法通常为,其中label是程序中的一个标记点。errorenderrorwhile循环是一种控制流语句,用于在条件为真时重复执行代码块。特点是 先判断表达式,再执行语句。
2025-07-20 20:34:53
848
原创 c 语言选择结构程序设计(if 语句,switch语句)
忘记break语句switch语句会继续执行下一个case的代码块,直到遇到break或结束。这种错误可能导致逻辑错误。case 1:// 漏掉 breakcase 2:break;case标签不是常量表达式case后的值必须是编译时常量,不能是变量或运行时计算的表达式。int y = 2;case y: // 错误:y 不是常量break;重复的case值同一个switch语句中不能有重复的case值。case 1: // 错误:重复的 case。
2025-07-18 20:43:26
524
原创 c语言输入输出函数的使用,及常见错误解析
我们发现运行警告,警告显示我们数据类型是长整型,0xffffffffffff占八个字节,然而Printf函数默认四个字节,也就是会发生高位截断,本来我们我们12个f但是现在输出结果是8个f ,由于是十六进制,也就是刚好四个字节。当我们使用这段语句的时候就会报错,原因就是%f表示的单精度,然而我们定义的是双精度,而我们&访问的是地址名而不是数据本身,所以并不知道数据是什么类型因此就会报错。类似于%d这种%后面加一个字母的成为格式字符,也叫占位符,也就是后面的参数,会按照顺序替代占位符。
2025-07-17 20:47:22
938
原创 学习C语言赋值运算常见错误类型
由于short型数据占两个字节,而int型占四个字节,所以short的数据赋值到int型数据中后会扩展没有数据的位置,例如 i = 0xffff,则发生扩展后的a = 0x0000ffff,扩展的是0还是1,取决于原来的数据的正负,因为对于寄存器来说,首位代表符号位,所以如果是正数,则符号位扩展的时候补0,如果是负数则符号位扩展补1,如果是无符号类型的数据进行符号位扩展,则补数据0;就是我们20 和 30都是整数,所以相除表达式是整形,所以运行结果是整形,不是浮点型,所以我们得到是整数部分0。
2025-07-17 12:32:13
925
原创 C语言中转义字符和字符常量的使用方法
观察运行结果我们发现前面八位一组,9加上八个空格为一组,后面的123不受到影响。在计算器上也就是相当于我们常用的tab键。同理 \xhh 表示的\x后面跟的一到两个十六进制字符,例如‘\x41’= A,因为65的十六进制为41。转义字符 \ddd使用方法,\后面跟上一到三位八进制字符,例如'\101'=A,因为A的。由运行结果我们可以知道\b退格也就是向前删掉几位。由训练结果可以发现789覆盖掉原来的123。ASCII位65 八进制位101。训练结果处输出一个\。
2025-07-16 20:00:41
275
原创 c语言浮点型数据如何存储在ARM中
阶码指的是化为二进制科学计数法时的阶数2^2中的后面的这个2为阶码,实际存储时需要将其加上127然后化为二进制,例如此时为2,那加上127位129化为二进制为1000 0001。将其连起来表示则为1100 0000 11000 1000 0000 0000 0000 0000。尾数则是二进制计数的1.001中去除首位的1,得到的001,然后不足23位,在其后面补0。例如 十进制6.25转换为二进制110.01 = 1.001*2^2。浮点型在寄存器存储的时候分为符号位 1位,阶码 8位,尾数23位。
2025-07-15 23:19:39
211
原创 c语言中数据类型在寄存器中的存储方式,以及数据类型最大最小值的推到过程
因此我们也可以知道整形数据取值范围,如果是符号整形,则最小值为1000 0000 0000 0000 0000 0000 0000 0000 化为二进制为-2147483648,注意计算具体数据的时候先求原码再计算,同理最大值为0111 1111 1111 1111 1111 1111 1111 1111因为首字母代表符号,所以最大值,首位为0,因此最大值化为十进制为21474833647。2)八进制整数,以0开始,表示八进制,如0123表示八进制123,换算为十进制则通过加权乘法即可。
2025-07-15 22:58:37
1115
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅