自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 树莓派平台的交叉编译工具安装使用

一、交叉编译介绍1、什么是交叉编译?交叉编译是在一个平台上生成另一个平台上的可执行代码。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行(来自百度百科)举例说明:ubuntu linux上编写的代码,编译生成的可执行性文件,不能直接在树莓派平台上运行,需要在Ubuntu平台上安装树莓派的交叉编译工具,来编译供树莓派平台使用的可执行性文件。2、为什么使用交叉编译?①有时目的平台上不允许或不能够安装我们所需要的编译器,②有时目的平台上的资源贫乏,无法运行我们所需要

2021-01-24 15:11:38 354

原创 Makefile与make的使用解析

Makefile与make是配套使用的编写Makefile需要知道一个规则,两个函数,三个变量一、一个规则定义:若想生成目标,需要检查目标中的依赖条件是否存在,如不存在,需要寻找是否有规则生成该依赖文件。检查规则中的目标是否需要被更新,必须检查他所有的依赖,依赖中任何一个被更新,则目标被更新。编写Makefile的格式:目标文件:依赖条件 (一个Tab缩进)命令例子:1、hello:hello.c gcc hello.c -o hello然后使用 make 该目录下就会生成 hell

2020-08-12 22:18:56 218

原创 Linux静态库与动态库制作及使用

一、二者区别1、静态库是在程序执行前就加入到目标程序中去动态库程序执行的过程动态的由目标程序去调用2、静态库对空间要求不高,对时间要求高动态库对时间要求不高,对空间要求高二、库制作同一目录下有三个文件 主:helloMain.c 头: helloMain.h功能: helloFunc.c1、静态库的制作静态库文件格式:libxxxx.aa、gcc helloFunc.c -c 生成helloFunc.o文件b、ar rcs libhellotest.a helloFunc.o 生成lib

2020-08-11 18:27:18 150

原创 gcc编译器基础及其指令

一、gcc编译步骤过程gcc编译4步骤:预处理、编译、汇编、链接详细步骤过程:(注意-o的作用是生成指定文件)1、hello.c 经过预处理变为hello.i指令:gcc -E hello.c -o hello.i预处理作用:展开宏、头文件,替换条件编译,删除注释、空行和空白2、hello.i 经过编译变为hello.s指令:gcc -S hello,c -o hello.s(包括前面一步)编译作用:检查语法规范,消耗资源和系统时间最多3、hello.s经过汇编变为hello.o

2020-08-11 10:08:41 395

原创 基于树莓派驱动开发详解

一、驱动开发认知1、驱动开发思想要想进行驱动开发首先我们应该知道,上层到底层是如何进行的,上层调用c库的open函数,首先会发生一次软中断,从用户空间进入内核空间,触发系统调用接口函数sys_call,然后通过open函数的设备名找到设备号, 调用虚拟文件系统的sys_open,最后去调用底层驱动的open,操作相关的寄存器,实现io口拉高电平或者低电平。因此我们在进行驱动开发的时候,从底层到上层依次实现,首先在内核空间添加驱动,通过文件名和设备号来区分底层驱动,然后编写底层设备驱动函数,最后编译驱动

2020-08-09 20:15:49 3269 2

原创 vi编辑器 常用基本操作指令

1、vim有三种模式:命令模式,文本模式,末行模式命令模式----->文本模式 i a o I A O s S文本模式----->命令模式 Esc命令模式----->末行模式 :末行模式----->命令模式 Esc两次2、命令模式下1、i在光标前面插入 I在光标所在行的行首插入2、a在光标之后插入 A在光标所在行的行尾插入3、o在光标所在行的下一行插入 O在光标所在行的上一行插入4、s删除一个字符为代价切换工作模式 S删除一行为代价切换工作模式5、光标移动 h

2020-07-18 17:53:28 649

原创 linux最基本的gdb调试命令

gdb用来调试逻辑错误不能用来调试语法错误1、gdb调试基本命令1、gcc main.c -o main -g //编译程序要加 -g2、gdb main //进入gdb调试环境3、list/l 1 //从第一行开始列出要调试的程序4、break/b 25 //在第25行设置断点5、run/r //执行程序6、next/n //执行下一条指令 会越过函数7、step/s //执行下一条指令 会进入函数8、print/p i //查看i变量的值9、continue //继续执行断点后续指令

2020-07-18 16:25:06 545

原创 linux下的ftp文件服务器

1、ftp文件服务器的功能,客户端通过访问服务器的ip地址,可以连接到服务器。客户端连接成功后,可以拷贝服务器下的文件和访问服务器的文件夹,同时可以将自己的文件拷贝给服务器2、服务器demo...

2020-07-09 17:16:58 228

原创 linux之小白都懂的网络编程

一、为什么要使用网络编程五种进程间通信的方式都是基于linux内核的单机通信,无法完成多机之间的通信,而网络编程,socket,可以实现多机之间的通信,很容易完成服务器与客户端之间的通信。二、TCP协议与UDP协议TCP是面向连接的;UDP是无连接的,发送数据之前不需要建立连接。TCP提供可靠服务,即通过TCP建立连接发送的数据,无差错,无丢失,无重复,按序传送;UDP则是尽最大努力交付,不可靠传输。TCP是面向字节流;UDP是面向报文的,UDP没有拥塞控制,即网络面对拥塞不会使源主机发送速率降低

2020-07-05 20:39:46 172

原创 Linux最全的多线程编程

1、进程与线程进程是资源分配的最小单位,线程是程序执行的最小单位,在面向线程设计的系统中,进程本身不是基本运行单位,而是线程的容器。父进程通过fork一个子进程,是将相关代码进行拷贝,会消耗内存空间,线程是一个进程中不同的执行路径,有自己的堆栈,局部变量,没有独立的地址空间。一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但进程切换时,消耗资源大,效率低。对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程。2、线程开发API概要多线程开发在 Linux 平台

2020-07-04 23:44:49 333

原创 Linux之进程通信

进程间的5种通信包括:管道(命名管道和无名管道)、消息队列、信号量、共享内存、Socket、Streams等。其中socket和streams支持不同主机之间的IPC。一、管道1、特点a:管道是半双工的,有固定的读端和写端。父进程通过管道和子进程通信时,父进程通过写端向管道中写数据,子进程通过读端从管道中读取数据;子进程通过写端向管道中写数据,父进程通过读端从管道中读取数据。这两个过程不能同时进行,数据只能在一个方向上流动。b:管道类似于水管,水管中的水流完就没了,管道中的数据,传输完也会丢失。它可

2020-07-04 17:47:05 208

原创 Linux——system与popen函数

一、system函数1、system函数功能system函数其实就是exec族函数的封装,完成exec族函数某一进程中执行可执行性程序的功能,但与exec族函数不同的是,exec族函数在执行完某一程序不会再返回该进程,执行exec族函数语句后面的代码,而system函数在执行完某一可执行性程序还会返回该进程,执行其后面的语句。system函数相比exec族函数,更简单容易深受程序员的喜爱。2、demo验证#include <stdio.h>#include <stdlib.h&

2020-07-02 21:21:31 295

原创 Linux进程——exec族函数

1、为什么要使用exec族函数当我们fork一个子进程就是为了执行一个新的程序,此时可以调用exec族函数,执行已经编译好的可执行程序或者Linux自带的ls、cd等命令。2、exec族函数如何使用函数原型:#include <unistd.h> extern char **environ; int execl( const char *path, const char *arg, ...); int execlp( const char *file, const char *ar

2020-07-02 18:14:51 270

原创 系统编程之进程

一、进程相关概述1、相关指令ps -aux 查看所有进程ps -aux|grep 进程 只会过滤出指定进程信息top 指令类似Windows任务管理器2、进程描述符 pidpid = 0 称为交换进程 --进程调度pid =1 init进程 --系统初始化二、getpid() getppid()二、c程序的存储空间是如何分配的从高地址到低地址 按如下顺序命令行参数和环境变量:int main(int argc,char**argv)栈空间:自定义的函数和

2020-06-30 23:21:52 104

原创 Linux 之 文件编程

一、文件的打开与创建1、函数使用#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <stdio.h>int main(){ int fd ;//文件打开会返回一个文件按描述符,用于后续操作 fd = open("./file",O_RDWR|O_CREAT,0600); if(fd == -1) { perror("open file fail

2020-06-30 20:18:01 136

空空如也

空空如也

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

TA关注的人

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