自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 linux指令

cd /home 进入 '/ home' 目录' cd .. 返回上一级目录 cd ../.. 返回上两级目录 cd 进入个人的主目录 cd ~user1 进入个人的主目录 cd - 返回上次所在的目录 pwd 显示工作路径 ls 查看目录中的文件 ls -F 查看目录中的文件 ls -l 显示文件和目录的详细资料 ls -a 显示隐藏文件 ls *[0-9]* 显示包含数字的文件名和目录名 tree 显示文件和目录由根目录开始的树形结构lstree 显示文件和目录由根目录开始的树

2020-11-09 16:53:04 151

原创 C++ 1

C++第一个程序hello world面向过程面向对象第一个程序hello world#include <iostream>using namespace std;int main(){ cout << "hello world!" <<endl; return 0;}在上面的程序中 #include <iostream> 表示的是标准的输入输出流using namespace std; 使用标准命名空间 cont 对象存储

2021-04-19 20:00:17 271

原创 ST-Link

2021-03-22 15:00:52 239

原创 C语言 const的使用

const 使用方法#include <stdio.h>const int a=10;/*const 使用的是全局变量进行赋值的时候, * 1. 如果直接对值进行赋值,会产生错误 * 2. 如果通过地址改变内容,会产生段错误 * */void test(){ printf("%d\n",a);// a=11;// printf("%d\n",a);// int *p=&a;// *p=100; printf("%d\n",a);}void tes

2021-03-02 23:46:13 172

原创 make makefile

make1.makemakefile语法规则例子1例子2makefile中的变量makefile的预定义变量1.makemake执行的是当前目录下的Makefile,默认情况下什么是make?make是一个命令,是一个可执行文件,用来解析makefile文件的命令什么是makefile?makefile是一个文件,该文件描述了我们程序的编译规则在执行make的时候,会在当前目录下寻找makefile根据makefile的文件的规则进行文件的编译使用makefile的好处简化编译程序的时

2021-02-19 00:16:11 212

原创 libcurl库 openssl

libcurl库libcurl库介绍libcurl库的安装libcurl库的应用寻找库文件libcurl库介绍libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies,和用户认证。libcurl的官网 http://curl.haxx.se/库下载https://

2021-02-18 22:52:28 1051

原创 DS18B20使用心得 反码 补码 原码

DS18B201.2. 编程 反码补码原码1.反码补码原码编程实现DS18B20初始化过程的体现写函数的实现读函数的实现温度的表示1.DS18B20温度传感器和DHT11类似 也是单总线进行数据的传输和控制2. 编程 反码补码原码1.反码补码原码最高位为1 表示负数最高位为0 表示正数正数的原码的补码就是原码本身负数的原码的补码是原码的反码加1负数:负数的补码反码的首位都是 表示为1例如得到的是-5表示的是1000 0000 0101 0000补码进行表示的就是

2021-02-18 22:10:47 1377

原创 struct 结构体大小 结构体定义 位段(位域)

结构体结构体的定义方式结构体大小的计算结构体的定义方式//使用方式一struct 结构体名{ int a; int b; char x;}; //需要分号struct 结构体名 变量名;//使用方式二 声明与定义同时进行struct 结构体名{ int a; int b;}变量名;//使用方式三 直接进行定义struct { int a; int b;}stu1;//使用方法四 使用typedef 重新定义一个数据类型typedef st

2021-02-13 23:32:38 1944

原创 工厂模式 multiple definition 多重定义 即重复定义 找不到/dev/vide0设备

工厂模式是表示面向对象的编程分成不同的对象分别进行编程使用结构体struct moban { int changdu; int jiadu; char *name; void (*peat)(); void (*peatb)();};使用该结构体的时候可以直接使用该结构体的几个参数struct moban cat={ .name="Tom", .peat=catpeat, .peatb=catpeatb};这样就可以单

2021-02-06 22:11:51 503

原创 http协议 socket TCP http之间的区别

原文:https://www.cnblogs.com/xietianjiao/p/13255099.htmlhttp协议一.http协议1.http协议的特点2.http协议的请求请求行请求头请求主体3.http的响应一.http协议1.http协议的特点 http协议是建立在TCP/IP之上的应用层的协议 默认的端口号为80 8080 http的协议特点是无状态,无连接 在网站上输入搜索的东西,请求数据的时候发生连接,数据传递回啦之后断开连接2.http协议的请求http协议

2021-02-04 22:01:59 194

原创 DHT11 模块的使用

这里写目录标题DHT11模块DHT11模块介绍DHT11模块DHT11模块介绍DHT11模块 数据线是单线双向一次完整的数据传输为40bit 高位先出数据格式:8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据+8bit校验和数据传送正确时校验和数据等于“8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据”所得结果的末8位。...

2021-02-03 17:30:56 2095

原创 STM32 DMA

DMADMA介绍DMA的使用1.DMA进行串口数据的搬运DMA介绍DMA直接存储器存取储存器可以是SRAM或者FLASH一共有两个DMA DMA1和DMA2 DMA2只存在于大容量的单片机中DMA的一个通道在同一时间一般只允许一个外设进行数据的传输DMA的使用1.DMA进行串口数据的搬运上面的表格阐述了DMA1的通道的使用对串口进行数据的传输,需要使用的是DMA的通道四和通道五首先进行初始化DMA的操作设置宏定义#define DMA_CHANNEL4 DMA1_C

2021-02-03 17:27:33 240

原创 OLED使用 SSD1306 IIC

OLED使用OLED的使用1.使用IIC通讯协议进行数据通信2.OLED函数OLED的使用1.使用IIC通讯协议进行数据通信IIC通讯协议两根总线 SDA数据总线 SCL时钟总线(主机提供)IIC的起始信号SCL为高电平 SDA由高电平变成低电平 SCL变成低电平结束信号 SCL为高电平 SDA由低电平变成高电平 响应信号ACK 系统传输完成一个字节8bit之后 会把SDA总线的控制权给从机SCL为高电平 SDA为高电平 表示非应答信号

2021-02-01 21:45:29 3580 2

原创 网络模型 TCP三次握手,四次挥手

网络模型1.OSI模型(1).七层网络模型(2)TCP/UDP四层模型1.OSI模型(1).七层网络模型 OSI模型提供一个使不同计算机和网络实现互联的一个标准 分为七层网络模型 1.物理层 eg:RJ45等将数据转化成0和1; 2.数据链路层 规定了0和1的分包形式,确定了网络数据包的形式; 3.网络层 此处需要确定计算机的位置,怎么确定?IPv4,IPv6! 4.传输层 每一个应用程序都会在网卡注册一个端口号,该层就是端口

2021-01-30 23:06:10 163

原创 排序法

冒泡排序法对里面的元素进行分析对里面的元素进行赋值操作 第一个5 第二个90 第三个 -9 第四个0 第五个8 通过4次依次得到从右到左的最大值 int i; int md; int j=0; for(i=0;i<cmd;i++){ for(j=0;j<cmd-i;j++){ if(aa[j]>aa[j+1]){ md=aa[j];

2021-01-29 14:23:15 75

原创 驱动认知 驱动的编写

1.驱动的认知打开文件 打开的是 文件名 (存放在/dev下面)设备号设备号又分为 主设备号次设备号分为三个层次 第一个是用户层第二个是内核态第三个是硬件层该图简单的介绍了驱动如何从用户层进入到内核中2.驱动框架解读#include <linux/fs.h> //file_operations声明#include <linux/module.h> //module_init module_exit声明#include &l

2021-01-26 17:40:06 1279

原创 STM32 控制超声波 舵机

1.初始化GPIO设置Trig引脚GPIO的输出模式为推挽输出设置Echo引脚GPIO的输入模式为浮空输入并打开相应GPIO的时钟 GPIO_InitTypeDef GPIO_InitStructure; /* Configure TRIG Button */ RCC_APB2PeriphClockCmd(RCC_TRIG, ENABLE); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置成推挽输出 GPIO_Ini

2021-01-21 22:11:52 1809 2

原创 FTP access函数 chdir函数 popen函数

FTP编程要点服务器端编程服务器端第一个文件 server.c服务器的第二个文件 server_Cmd.c 文件chdir函数access函数第三个文件 server_config.h客户端编程客户端第一个文件客户端的第二个函数第三个文件编程要点服务端首先创建socket 进行网络间的通信使用while循环 在while循环中一边等待其他客户端的接入,一边使用fork函数创建进程用于接收客户端的信息读取客户端创建socket进行网络间的通信使用while循环 把要写入的信息发送到服务器

2021-01-18 15:52:13 299

原创 条件编译 #if 预处理器

1.条件编译中使用的预编译指令#define 定义一个预处理宏#undef 取消宏的定义#if 编译预处理中的条件命令,相当于C语法中的if语句#ifdef 判断某个宏是否被定义,若已定义,执行随后的语句#ifndef 与#ifdef相反,判断某个宏是否未被定义#elif 若#if, #ifdef, #ifndef或前面的#elif条件不满

2021-01-16 22:55:35 378

原创 树莓派 刷机 端口联网 关机指令sudo shutdown -h now

刷机过程修改系统配置,启用串口登录树莓派1.打开SD卡根目录的"config.txt"文件,将以下内容添加在最后并且保存。在文章的最后插入dtoverlay=pi3-miniuart-bt这样就停止了蓝牙,解除了对串口的占用。2.然后再修改根目录的"cmdline.txt",将里面的内容全部替换成以下内容,以防万一,请先备份好这个文件的原内容。dwc_otg.lpm_enable=0 console=tty1 console=serial0,115200 root=/dev/mmcblk0.

2021-01-16 17:06:37 1078

原创 fgets函数 sprintf函数

char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)第一个参数为数据存放的数组,第二个参数为最大长度,第三个参数为输入源,我们从键盘读入,参数为stdin可以看到fgets()读取的字符串长度包含了结尾的 ‘\0’,遍历数组时要注意下标越界。strlen(A)-1 为字符串实际长度...

2021-01-13 20:54:37 245

原创 Wemos

函数Wemos同Arduino上电后不断执行loop函数中的代码,我们核心控制代码写入loopsetup函数只调用一次,一般用于硬件相关的初始化,比如IO口,串口,wifi等void setup() {}void loop() {}串口函数Serial.begin(115200) 开启串口 设置波特率Serial.begin("start") 串口输出数据并换行Serial.available() 判断缓冲区是否有数据Serial.read() 读取缓存..

2020-12-15 00:29:06 576 1

原创 关于链表的操作

链表就是把结构体连接起来头插法head 表示链表的头new表示新插入的文件头插法的目的就是把new插入在head前面使用一段代码进行讲解struct student *touChaFa(struct student *head){ struct student *phead; phead=head; struct student *new=NULL; if(head==NULL){ head=new; return head;

2020-12-03 21:38:23 213

原创 文件系统的认知

文件系统 常规认识 : 根目录 cd /文件系统是操作系统用于明确储存设备组织文件的方法以上说的方法就是文件管理系统(程序) 简称文件系统FAT VFAT NTFS EXT1/2/3/4 HFS …树莓派查看文件系统的命令: df -Tvfat : boot(bootloader, kernel)ext4 : 根目录tmpfs : 内存文件系统嵌入式系统可以分为4个区,分别是bootloader、 启动代码para、 启动代码向内核传递参数的位置k

2020-11-30 16:33:53 174

原创 交叉编译 内核编译 软链接

交叉编译交叉编译是一个平台生成另一个平台的可执行文件例如在keli里面生成的xxx.hex文件在C51里面运行我们在Ubuntu Linux生成的可执行文件a.out 在树莓派里面运行,而不是在Ubuntu Linux下面运行为什么要交叉编译平台不能够安装编译器,或者没有办法安装编译器 例如C51平台资源匮乏,不能安装编译器树莓派是不是可以不使用交叉编译树莓派有时候因为目的平台还没有建立,连操作系统都没有,更别说编译器操作系统也是代码,也要编译!平台运行需要两样至少东西:bootlo

2020-11-30 13:56:05 646

原创 树莓派wiringPi库 GPIO引脚控制函数 超声波测距 串口

使用 gpio readall查看所有引脚使用的时候要包含头文件#include <wiringPi.h>int main(){ wiringPiSetup(); return 0;}使用该库的时候首先要初始化该函数wiringPiSetup();进行初始化操作返回执行结果 如果为-1 表示返回失败使用继电器继电器一共三个开关控制 三个开关分别是 VCC GND 还有一个继电器控制引脚介绍 GPIO控制函数配置引脚void pinMo

2020-11-27 22:24:27 1043

原创 树莓派linux库 引入 分文件编程 静态库 动态库

分文件编程分文件编程 表示的是主函数的程序中用的函数例如 在dema1中#include <stdio.h>#include "dema2.h"int main(){ int t1; int t2; int jia; printf("请输入第一个数:"); scanf("%d",t1); printf("请输入第二个数:"); scanf("%d",t2); printf("加数总和是:%d",jia=jia1(t1,t2)); retur

2020-11-26 23:50:47 218

原创 网络编程 atoi将字符串中的数字提取出来转换成整数

网络编程网络编程数据字节序网络编程需要了解IP地址 和端口号数据协议 http TCP/UDP 协议socket套接字TCP 面向连接的 A B 打电话     可靠  UDP 面向报文的  A B 发短信     不可靠 数据量大1、TCP面向连接(比如打电话那种连接起来);UDP是无连接的,及发送数据前不需要提前建立连接。2、TCP提供可靠的服务,也就是说,通过TCP连接的数据,无差错,不丢包,不重复,且按序到达,UDP尽最大努力交付,也不能

2020-11-20 16:13:59 1026

原创 线程操作 脚本

线程操作一、线程的概念:1、进程简要回顾2、使用线程原因二、线程的API1、线程(1)、线程的创建进程创建例子(2)、线程的退出(3)、线程的等待函数原型(4)、线程的脱离(5)、线程ID获取及比较一、线程的概念:1、进程简要回顾进程可以看作只有一个线程,一个进程同一时间只能进行一件事情的操作,有了多个线程后,程序同一时间可以进行多个不同的事情进程是程序执行的实例,是担当分配系统资源的基本单位。进程本身不是基本运行单位,而是线程的容器。进程有独立的内存空间,一个进程崩溃后,在保护模式下不会影响其他

2020-11-18 21:31:39 415 1

原创 进程间通信 无名管道pipe 有名管道fifo mkfifo 消息队列msg 共享内存shm 信号signal sigaction 信号量

IPC 进程间的通信IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。一、管道管道,通常指无名管道,是 UNIX 系统IPC最古老的形式。1、特点:它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端。它只能用于具有亲缘关系的进程之间的通信(也是父子进程或者兄弟进程之间)。它可以看成是一种特殊的文件,对于它的读写也可以使用普通的read、write 等

2020-11-17 22:47:12 854 1

原创 用户权限

ls -l查看用户的权限下面具体介绍chmod命令。Linux系统中,每个用户的角色和权限划分的很细致也很严格,每个文件(目录)都设有访问许可权限,利用这种机制来决定某个用户通过某种方式对文件(目录)进行读、写、执行等操作。操作文件或目录的用户,有3种不同类型:文件所有者、群组用户、其他用户。最高位表示文件所有者的权限值,中间位表示群组用户的权限值,最低位则表示其他用户的权限值,所以,chmod 777中,三个数字7分别对应上面三种用户,权限值都为7。文件或目录的权限又分为3种:只读、只写、可执行。

2020-11-15 10:58:24 82

原创 exec族函数配合fork函数使用 system函数 popen函数

通过文件编程小应用修改文件的信息这个代码把修改文件的通过gcc dema.c -o change产生一个可执行文件changeint main(){ pid_t pid; int deta; while(1){ printf("please data\n"); scanf("%d",&deta); if(deta==1){

2020-11-12 22:34:48 184

原创 linux进程---exec族函数 转载

exec族函数函数的作用:我们用fork函数创建新进程后,经常会在新进程中调用exec函数去执行另外一个程序。当进程调用exec函数时,该进程被完全替换为新程序。因为调用exec函数并不创建新进程,所以前后进程的ID并没有改变。exec族函数定义:  可以通过这个网站查询:linux函数查询功能:  在调用进程内部执行一个可执行文件。可执行文件既可以是二进制文件,也可以是任何Linux下可执行的脚本文件。函数族:  exec函数族分别是:execl, execlp, execle, execv

2020-11-12 19:19:31 114

原创 父进程等待进程 wait waitpid abort 异常退出 孤儿进程

子进程状态不被收集的话,这个进程就变成僵尸进程,父进程等待子进程退出,并收集子进程的退出状态。 #include <sys/types.h> #include <sys/wait.h>//函数原型pid_t wait(int *status);/*status参数是一个整数型指针非空:子进程退出状态放在它的地址中空:不关心退出状态wait(NULL)后子进程结束后就消失不会变成僵尸进程*/...

2020-11-12 13:41:04 256

原创 进程相关概念 读取当前进程getpid 读取父进程id getppid

进程是程序的一次运行活动通俗点的意思就是程序跑起来了,系统中多了一个进程如何查看在liunx下面使用 ps 指令进行查看完整的是 ps -aux但是显示的太多,需要筛查 配合grep来查找系统中的进程ps-aux|grep init 直接筛选出来init的进程或者使用top指令 类似windows的任务管理器进程标识符每个进程都有一个唯一的非负整数表示唯一ID叫做pid,类似与我们的身份证pid=0;成为交换进程,表示进程调度pid=1;表示init进程 作用系

2020-11-11 21:32:20 1285

原创 学生成绩管理系统

学生成绩管理系统,通过两个链表,分别代表学生和班级的链表班级的链表作为学生链表的头可以输入成绩,学生成绩有数学,语文,和英语,找出学生成绩总分的最高分和最低分,并求出平均成绩首先定义两个结构体,一个表示班级的结构体,一个表示为学生的结构体//学生结构体typedef struct Student { int xueHao; int yuWen; int shuXue; int yingYu; int zongFen;

2020-11-10 20:23:59 259

原创 运算符

| 和 ||,& 和 && 的区别我们将 || 和 && 定义为逻辑运算符,而 | 和 & 定义为位运算符。&& 如果两个操作数都非零,则条件为真;|| 如果两个操作数中有任意一个非零,则条件为真。& 按位与操作,按二进制位进行"与"运算。运算规则:(有 0 则为 0| 按位或运算符,按二进制位进行"或"运算。运算规则:(有 1 则为 1...

2020-11-09 16:48:42 51

原创 文件编程概述,文件创建、打开和编辑,标准C语言库函数的编写

Linux操作系统提供一系列的API打开 open写 读 write read光标定位 lseek关闭 close

2020-11-09 15:33:30 390

原创 指针2

一、通过指针改变元素的内容int a=5;int b=10;jaiohuan(a,b);//这样写不会在函数里面实现交换jiaohuan(&a,&b);//把a和b的地址传过去定义jiaohuan函数void jiaohuan(int *a,int *b){ int y=0;//中间变量 *a=*b;//把b的值给a y=*a;//把a的值给中间变量y *b=y;//把中间变量的值给b }二、数组的指针数组的指针:是一个指针,指向数组的指

2020-10-31 14:15:44 95

原创 指针

**指针**一、 指针的使用定义指针char *p;//这里的指针是一个野指针p=(cahr *)malloc(128);//开辟128字节的空间 并强制转换成char型memset(p,'\0',128);//给开辟的空间初始化读取指针的内容 使用*pprintf("指针的内容是%d",*p);读取指针的地址 使用p 因为指针本身就是一个地址printf("指针的地址是%p",p);二、函数指针使用函数指针首先要有一个定义的int add(int a,int

2020-10-31 12:28:32 266

空空如也

空空如也

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

TA关注的人

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