自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Makefile的快速入门

Makefile的使用: 首先写目标文件编译时需要依赖哪些文件如: main: main.c fun1.o #表示目标文件main的生成需要main.c和fun1.o等依赖文件 gcc main.c fun1.o -o main #对这些文件进行编译并连接成main可执行文件 fun1.o: fun1.c gcc -c fun1.c #当main的依赖文件没有fun1.o时,需要继续寻找fun1.o生成的方法 clean: rm *.o main #当要删除没有用的文

2022-05-19 15:44:36 406

原创 详解SPI通信协议

一、SPI简介 SPI,即Serial Peripheral Interface的英文缩写。从字面意思看就是串行外部设备接口,是一种全双工、高速、同步的通信总线。 SPI最早是摩托罗拉公司开发的全双工同步串行总线,用于微控制器(MCU)连接外部设备之间的同步串行通信,主要应用于Flash、数模转换器、信号处理器、控制器、EEPROM存储器等外设中。 SPI总线属于一主多从接口,和I2C不同的是,SPI 采用CS片选来控制主机与从机通信。现在的单片机几乎都支持SPI总线,其已经成为一种高速、同步、双工的通用标

2022-05-14 17:10:41 2719

原创 BM20 数组中的逆序对

描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P mod 1000000007 数据范围: 对于 50%50\%50% 的数据, size≤104size\leq 10^4size≤104 对于 100%100\%100% 的数据, size≤105size\leq 10^5size≤105 数组中所有数字的值满足 0≤val≤10000000 \le val .

2022-05-05 01:50:13 776

原创 cp函数的自我实现

在Linux系统中,经常需要用到cp函数来实现对文件的拷贝,其原理无非就是将源文件打开,将其读到字节流中。 然后将字节流写到目标文件中去,在这里如果提前定义一个数组用来存放数据,定义小了无法将数据全部复制,定义大了浪费空间,于是此次我们采用动态申请的方式来灵活实现。 申请的大小可以采用lseek函数的返回值来确定堆空间申请多少合适,lseek函数原型如下 off_t lseek(int fd, off_t offset, int whence); 第一个参数fd为要进行偏移定位的文件描述符, 第二个参数o

2022-04-29 02:25:39 286

原创 Linux系统下dup()函数的用法

dup函数简介 dup()和dup2()函数都可以用来复制一个文件描述符,其原型为 int dup(int oldfd); int dup2(int oldfd,int newfd); dup函数创建一个新的文件描述符,该新文件描述符和原文件描述符指向相同的文件、管道、或网络连接,dup返回的新文件描述符是取系统当前可用的最小整数值(一般情况下系统默认了标准输入0、标准输出1、标准出错2,在没有其他文件描述符的情况下,文件描述符fd的值为3,那么首次调用dup函数的返回值为4(3+1)) dup2函数和d

2022-04-27 00:15:14 2700

原创 C语言实现快速排序

前述 快速排序算法是一种高效的排序算法。 在平均情况下,排序n个项目要O(nlogn)次比较。 在最坏状态下需要O(n^2)次比较,相当于冒泡排序,但这种情况并不常见。 快速排序使用分治法(Divide and conquer)策略来把一个串行分为两个串行。 特点: List item 其两个子表的形成都是采用从两头向中间交替式逼近法。 List item 每趟中对子表的操作都相似,可以采用递归算法 算法步骤 1.从数列中挑出一个元素,称为“基准”(pivot); 2.重新排列数列,把比基准小的元素

2022-04-26 22:21:26 1209

原创 volatile在程序设计中有什么作用?

问题引出: 对于一些变量的存取,为了提高存取效率,编译器有时会把变量读取到一个寄存器中缓存起来。当以后再取变量值时,直接从寄存器中取值,而不需要从内存中去读取。 在单线程环境下,这样的优化能显著提高程序运行效率,但是,在多线程环境下就会有潜在的风险。假设存在一个线程1和线程2共享的变量sharedObj,如果在线程11中把sharedObj缓存到寄存器,当线程2对内存中的sharedObj修改时,线程1无法读取到这个最新的值,因为线程1会从寄存器读取,而不是在内存读取。在多线程编程的环境下,编译器优化有可能

2022-04-20 13:06:47 288

原创 static(静态)变量有什么作用?

在C语言中,关键字static的意思是静态,他的主要作用有两个: 1.在函数体内 静态变量具有“记忆”功能,即一个被声明为静态的变量只会被初始化一次,该函数在调用过程中,其值保持不变。一个变量被定义为静态变量就会将其放到静态数据区,而不是栈区。 也就是说一个静态变量只有在声明时对其进行一次出初始化,如果声明时未对其进行赋值操作: 静态整型默认为0‘’ 静态字符默认为空; 下面来看一个例子 void add() { static int a = 0; //定义一个静态整型a,并对其初始化为0 a++;

2022-04-18 16:44:46 17123 1

原创 一文搞懂指针常量、常量指针、指向常量的指针有什么区别?

1.指针常量 int * const p; 先看const再看*,p是一个常量类型的指针,该指针的指向不可修改,但该指针指向的地址上存储的值可以修改 用C++之父的方法来记忆:p is a const pointer to int p是一个常量指向整型 既然有指向作用,那么p就是指针,他的类型为常量类型,在该例中他指向整型。 常量类型不可修改,p还是一个常量指针,const限制住了p存储的值不可修改,也就是p的指向不可修改,但是在这个地址上的值是不受限制,可以修改的。 也可以用...

2022-04-17 01:40:40 897

原创 访问空指针导致段错误问题

我们在遍历链表时通常用while条件来判断链表的某一结点是否为空,是空则跳出while循环,但在今天考虑不周到由while返回结点时返回了空结点,在收到返回结点的程序中没有判断是否为空直接访问该结点的内容,导致运行时当输入链表以外数据进行遍历时产生段错误。 原错误代码是这样的: 由ptemp指针接收链表中要查找的buf所在结点,当输入非法数据时链表遍历完直到指向空结点返回,然而在该程序中未判断直接访问了空结点的pbeat()函数和peat()函数,导致段错误发生。 只需在接收时判断是否为空指针即可:

2022-04-02 20:09:52 651

原创 Linux中从用户空间到物理空间的执行过程

1.Linux内核 内核是操作系统的核心,具有很多最基本功能,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。 Linux 内核由如下几部分组成:内存管理、进程管理、设备驱动程序、文件系统和网络管理等。如图: 2.从用户空间到操作物理硬件经历了哪些 这里拿C语言库函数open举例。 首先用户空间调用open("/dev/pin4",O_RDWR),此时产生软中断,中断号是0x80, 接下来传递到内核空间,进入系统调用处理入口由sys_call.

2022-03-29 16:18:39 1926

原创 浅谈ecec函数

exec用被执行的程序(调用的新程序)替换调用他(原程序)的程序,相比于fork函数创建一个心进程会产生一个新的PID,exec会启动一个新程序来替换当前的程序,且PID值不变。exec族函数有6种形式,我们一起来学习下吧。 #include <unistd.h> extern char **environ; int execl(const char *path, const char *arg, ...); int execlp(const char *file, const char

2021-11-11 22:08:01 195

原创 Linux学习之cp函数编写

cp命令是我们常用的文件复制命令,他可以将一个文件的内容复制到另一个文件。 其调用格式为:cp 文件1.后缀 文件2.后缀。 我们都知道我们调用的库函数都是别人编写好的我们需要时可以方便地调用,那么复制命令cp的函数是怎样编写的呢?话不多说,上代码 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include<stdio.h> #include <unistd.h

2021-08-03 00:52:01 812

原创 2021-07-28

Linux文件写入操作笔记 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include<stdio.h> #include <unistd.h> #include<string.h> int main() { int fd; char* buf = "chenlichen hen shuai!"; //定义字符指针存

2021-07-28 00:31:57 76

空空如也

空空如也

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

TA关注的人

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