自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Ubuntu 联网

Ubuntu 联网

2022-12-16 22:08:07 1200 1

原创 进程执行其他程序

参考博文链接:https://blog.csdn.net/u014530704/article/details/73848573exec族函数函数的作用:我们用fork函数创建新进程后,经常会在新进程中调用exec函数去执行另外一个程序。当进程调用exec函数时,该进程被完全替换为新程序。因为调用exec函数并不创建新进程,所以前后进程的ID并没有改变。exec族函数定义:  可以通过这个网站查询:linux函数查询功能:  在调用进程内部执行一个可执行文件。可执行文件既可以是二进制文件,也可以

2022-05-12 21:49:27 235

原创 scriptⅥ

普通数组关联数值name =davecho ${name:1} // v 类似切片echo ${name:1:1} // dbook =(math、language、music)echo ${boo[1]} // mathecho ${book[*/@]} // 全部echo ${#array1[@]} 查看数组个数echo ${!array1[@]} 查看数组索引declare -A name //关联数组必须申明name=([wan

2022-05-06 16:59:55 112

原创 Shell script Ⅳ

参考博文https://www.xuliangwei.com/$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误Linux Systemctl 命令由来及详解 参考博文https://blog.csdn.net/small_queen/article/details/115531530systemctl是 Systemd 的主命令,用于管理系统。shell学习:(监控系统状态) 先取行->取值->对比->判断->输出->修改sh -n xxx.sh 检

2022-05-05 10:22:09 675

原创 Shell script Ⅲ

-

2022-05-02 16:11:02 288

原创 shell script学习笔记

查找历史命令 history | grep xxx1、定义变量 变量名 = 变量值 // 驼峰命名2、复用变量 可使用$变量 或者 ${变量}3、查看变量 echo $变量名 set 显示所有的变量,包括自定义和环境变量4、取消变量 unset 变量名 作用范围: 当前终端系统的环境变量 //全局变量export export 变量 ,将⾃定义变量转换成环境变量定义的变量最好不要和系统变量相同 否则会被覆盖如:结果如下:系统变量显示当前 路径变量永久生效 需要在 /

2022-05-01 14:26:34 82

原创 shell学习

脚本脚本简单地说就是一条条的文字命令,这些文字命令是可以看到的(如可以用记事本打开查看、编辑),脚本程序在执行时,是由系统的一个**解释器,**将其一条条的翻译成机器可识别的指令,并按程序顺序执行。因为脚本在执行时多了一道翻译的过程,所以它比二进制程序执行效率要稍低一些。shell脚本也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,它使用了Linux/Unix下的命令。

2022-04-30 21:07:19 60

原创 进程间通信学习

一、管道1、半双工通信(一个方向)2、亲属间通信二、命名管道三、消息队列1、消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级。2、消息队列独立于发送与接收进程。进程终止时,消息队列及其内容并不会被删除。3、消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取。四、信号量1、信号量用于进程间同步,若要在进程间传递数据需要结合共享内存。2、信号量基于操作系统的 PV 操作,程序对信号量的操作都是原子操作。3、每次对信号量的 PV 操作不仅限

2022-04-18 20:35:15 80

原创 SPI接口协议学习笔记

SPI时序图SPI是串行外设接口(Serial Peripheral Interface)的缩写。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,如今越来越多的芯片集成了这种通信协议。SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的,它们是SDI(数据输入)、SDO(数据输

2022-04-15 17:39:46 273

原创 回调函数学习

https://mp.weixin.qq.com/s?src=11&timestamp=1648382346&ver=3702&signature=wBth*pfEcx8FInIBkiWNBIJesv-GhmmeLttRSs0DIDRYW2an5hPko8zujAAI1f7ZVPpY7felkZD6UXsGCHCoi84jXTMITeiXWmpFsnrBDjOrHZ1Lrizc832-5TzgpmpW&new=1回调函数:在计算机科学中,回调函数是指一段以参数的形式传递给其

2022-03-27 20:34:58 105

原创 libcurl库的实现

参考博文:https://www.cnblogs.com/xietianjiao/p/13260021.html

2022-03-27 20:34:22 1160

原创 libcurl库安装笔记

libcurl是一个跨平台的网络协议库,库下载https://github.com/curl/curl/releases/tag/curl-7_71_1下载后拖入Linux进行解压创建目录 httphander在httphander 目录下 拷贝解压https://www.cnblogs.com/clemente/p/11288966.htmltar cvf etcbak.tar etc/ 打包一个tartar xvf etcbak.tar 解开一个tartar cv

2022-03-27 17:11:37 2559

原创 网络协议HTTP、TCP、socket学习

原文链接:https://blog.csdn.net/weixin_43122090/article/details/105462015原文链接:https://blog.csdn.net/Yansky58685/article/details/98118124原文链接:https://www.cnblogs.com/thinksasa/archive/2013/02/26/2934206.html1、计算机网络七层模型2、网络协议是什么在计算机网络要做到井井有条的交换数据,就必须遵守一些事先约

2022-03-17 20:33:30 2975

原创 sizeof与strlen

https://www.cnblogs.com/bixiaopengblog/p/8036429.html对 sizeof 而言,因为缓冲区已经用已知字符串进行了初始化,其长度是固定的,所以 sizeof 在编译时计算缓冲区的长度。也正是由于在编译时计算,因此 sizeof 不能用来返回动态分配的内存空间的大小。sizeof的功能是计算一个数据类型的大小,这个类型可以是数组、函数、指针、对象等,单位为字节,它的返回值是size_t类型,也就是unsigned int类型,是一个无符号整数。注意:size

2022-03-12 14:25:37 2788

原创 gpio驱动测试

https://www.cnblogs.com/alwayswyy/p/5157557.html测试代码#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <stdio.h>int main(){ int fd; fd =open("/dev/pin4",O_RDWR); if(fd < 0 ) {

2022-03-11 10:23:09 400

原创 Linux驱动代码初试

用户层:可直接调用C库 进行需求开发(文件、进程、进程间通信、线程、网络、界面)用户层C库提供了支配内核干活的接口,打通了与内核的通路(open、read、write fork、pthread、socket)进行树莓派开发则需要wiringPi库 ,不同的wiringPi不同的平台,厂家不一定会提供库,那么需要开发者自己学会开发。inux 一切皆文件! Linux的设备管理是和文件系统紧密结合的,各种设备都以文件的形式存放在/dev目录下,称为设备文件。应用程序可以打开、关闭和读写这些设备文件,完

2022-03-10 21:49:35 417 1

原创 sudo insmod pin4driver.ko

我出现这种原因是因为驱动代码没有写完整,复制时module_exit(xxx_drv_exit);MODULE_LICENSE("GPL v2");这两行代码不存在,请仔细检查驱动代码是否完整

2022-03-10 20:45:36 144

原创 树莓派-内核下载代码 编译 替换内核

参考博文http://nicekwell.net/blog/20171108/shu-mei-pai-nei-he-kai-fa-shuo-ming-xia-zai-dai-ma-bian-yi-ti-huan-nei-he.html一、概述树莓派的github主页:https://github.com/raspberrypi,里面包含了linux源码、交叉编译工具链等内容。对于我们要用到的有两个仓库:https://github.com/raspberrypi/linux 内核源码https:/

2022-03-09 15:23:08 565

原创 Linux 交叉编译工具以及源代码准备工作

根据登录的树莓派查看版本 uname -r在www.raspberry/linux 网站 Branch 查找相对于的源代码版本 code -download ZIP在Linux界面 cp /mnt/hgfs/share/ linux-rpi-4.141zip . 内核源代码 cp /mnt/hgfs/share/ tools-master.zip . 交叉编译工具unzip tools-master.zip 解压vi .bashrc 添加路径 export PATH

2022-03-09 11:01:37 99

原创 树莓派-内核开发

http://nicekwell.net/blog/20171108/shu-mei-pai-nei-he-kai-fa-shuo-ming-xia-zai-dai-ma-bian-yi-ti-huan-nei-he.html

2022-03-09 09:50:36 67

原创 linux常用内核源代码目录树结构

Linux内核源代码目录树结构参考学习来自:https://www.cnblogs.com/senior-engineer/p/4929703.htmlarch:包含和硬件体系结构相关的代码,每种平台占一个相应的目录。和32位PC相关的代码存放在i386目录下,其中比较重要的包括kernel(内核核心部分)、mm(内存管理)、math-emu(浮点单元仿真)、lib(硬件相关工具函数)、boot(引导程序)、pci(PCI总线)和power(CPU相关状态)。block:部分块设备驱动程序。cryp

2022-03-09 09:20:43 128

原创 树莓派超声使用

wringpi库引脚1、https://www.cnblogs.com/lulipro/p/5992172.html2、获取gpio 引脚信息gpio readall3、超声波代码 https://www.cnblogs.com/yuemo/p/8888342.html#include <wiringPi.h>#include <stdio.h>#include <sys/time.h>#define Trig 4#define Echo

2022-03-04 12:00:10 51

原创 动态库初学

动态库制作gcc -shared -fpic yunsuanti.c -o libyunsuanti.so //yunsuanti.c 为目标c文件 libyunsuanti.so 动态库-shared 指定生成动态库-fpic 用于编译阶段,生成位置无关码,在生成目标文件必须使用PIC是position independent code的缩写,也就是位置无关代码,一般在编译动态库so的时候加这个选项。区别在于:不加-fPIC,代码在调用so动态库里面的函数时需要重定位代码引用的数据对

2022-03-03 10:41:30 158

原创 Linux库初学习笔记

库一个“程序函数库”简单的说就是一个文件包含了一些编译好的代码和数据,这些编译好的代码和数据可以在事后供其他的程序使用。程序函数库可以使整个程序更加模块化,更容易重新编译,而且更方便升级。程序函数库可分为3种类型:静态函数库(static libraries)、共享函数库(shared libraries)、动态加载函数库(dynamically loaded libraries):“< >” 表示进行编译的时候 从user/include/ 的路径查找目标文件“ ” 表示优先当前路径

2022-03-02 17:13:26 44

原创 keil编译时报错:error: L6002U: Could not open file .\***\core_cm3.o

解决方案根据百度其他答案给的思路,其实就是修改环境变量,因为当前系统TEMP和TMP环境变量存在着中文。但是如果你直接修改 %USERPROFILE% 为其他英文路径开Keil会卡死并闪退(其实是你打开main.c就闪退)!!!因为修改成别的一个英文文件夹是不行的,你只是在环境变量中修改了文件路径,但是电脑中这些路径并不存在,所以你打开Keil才会闪退。那么解决问题的关键就是:先在系统C盘中创建好了所有的英文路径,再你创建的文件夹路径修改环境变量!!!准备工作:先将你的Keil软件关闭1、在【

2021-05-02 15:57:16 8354 14

原创 初学链表——静态链表制定点增加一个新的节点

#include <stdio.h>#include <stdlib.h>struct Test{ int data; struct Test *next;};int newincreat(struct Test *head, int data,struct Test *new) 想要指定的data 节点后边 { struct Test *p=head; while( p != NULL ) { if

2021-03-12 21:03:56 178

原创 Linux 线程API学习

线程开发的最基本概念主要包含三点:线程,互斥锁,条件。其中,线程操作又分线程的创建,退出,等待 3 种。互斥锁则包括 4 种操作,分别是创建,销毁,加锁和解锁。条件操作有 5 种操作:创建,销毁,触发,广播和等待。其他的一些线程扩展概念,如信号灯等,都可以通过上面的三个基本元素的基本操作封装出来。详细请见下表:...

2021-02-18 22:05:47 150

原创 Linux线程初识

什么是线程1、一个程序中的多个执行路线就叫线程(thread),线程是一个进程内部的一个控制序列。2、典型的UNIX/Linux进程可以看成只有一个控制线程:一个进程在同一时刻只做一件事情。有了多个控制线程后,在程序设计时可以把进程设计成在同一时刻做不止一件事,每个线程各自处理独立的任务。线程有进程的关系1、事实上,所有的进程都至少有一个执行线程。2、进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。3、进程不是基本的运行单位,而是线程

2021-02-16 16:27:37 143

原创 创建子进程函数fork与vfork 区别

创建子进程我们可以通过调用fork创建一个新的进程,这个系统调用复制当前的进程,在进程表中创建一个新的表项,新表项中的许多属性与当前进程是相同的。新进程几乎与原进程一摸一样,执行代码也完全一样,但新进程右自己的数据空间、环境和文件描述符。fork和exec函数结合在一起使用就是创建新进程所需要的一切了。1、fork函数创建如下2、fork函数与vfork函数的区别a、vfork直接使用父进程存储空间,不拷贝。b、vfork保证子进程先运行,当子进程调用exit (0)退出后,父进程才执行。#i

2021-01-16 15:21:38 151

原创 判断父子进程,使用fork进程函数的使用

1、编程时使用getpid函数获取自身的进程标识符,getppid获取父进程的进程标识符。2、使用fork函数创建一个进程fork进程函数的原型:pid_t fork(void);fork 函数调用成功,返回两次返回值为0,代表当前进程是子进程;返回值为非负数,代表当前进程是父进程调用失败,返回-1使用fork函数来判断父子进程#include<stdio.h>#include<sys/types.h>#include<unistd.h.

2021-01-14 21:48:06 2565

原创 进程—Linux操作环境的基础部分

在学习进程前需要先掌握的一些概念知识什么是程序?什么是进程?各有什么区别1、 程序是是静态的概念,如gcc xxx.c -o pro ,在磁盘中生成pro文件,该文件便叫程序。或者是桌面上一些其他未运行的软件2、进程是程序的一次运行活动,简单的讲就是程序运行起来了,跑起来了,系统就多了一个进程。正在运行的程序。3、从是否运行角度可以判断如何查看系统中有哪些进程?a、使用ps指令查看在实际工作中,配合grep来查找程序中是否存在某一各进程使用如查找我们需要存在init的进程root

2021-01-14 15:54:30 58

原创 Arduino环境下使用Wemos D1板设计简单手机控制智能避障小车项目

Arduino环境下使用Wemos D1板设计简单手机控制智能避障小车项目使用的模块由Wemos D1板、超声波模块、L9220S电机模块#include <ESP8266WiFi.h>#define Echo D2#define Trig D8#define Dong1 D7#define Dong2 D6#define zhuan1 D4#define zhuan2 D5void initChaoShenBo(){ pinMode(Trig, OUTPUT)

2020-12-02 18:48:01 476

原创 初学Arduino环境下WeMos D1制造简单智能垃圾桶项目(蜂鸣器、 SG90舵机、超声波模块)

初学Arduino环境下WeMos D1制造简单智能垃圾桶项目(蜂鸣器、 SG90舵机、超声波模块)项目代码#include <Servo.h>#define DuoPIN D5#define Echo D2#define Trig D8#define BEEP D7Servo myDuoJi;void initChaoShenBo(){ pinMode(Trig,OUTPUT); pinMode(Echo,INPUT);}long Gettime(){

2020-11-30 08:59:56 1358 1

原创 初学Linux环境下链表的 头插和 尾插法

初学Linux环境下链表的 头插和 尾插#include <stdio.h>#include <stdlib.h>struct Test { int data; struct Test *next;};void printflink(struct Test *head){ while( head != NULL) { printf("%d ",head->data); head=head

2020-11-30 08:17:16 138

原创 如何在liunx下做开发(Liunx常用命令)

LINUX如何在liunx下做开发一、 VI 的使用VI的模式 分为1、输入模式 按 i 进入,看到insert就能编辑代码2、命令模式 默认为命令模式,从输入模式回到命令模式:按下 ESC 键 insert 消失。-退出 V I 模式 保存代码在命令模式下 按“ : ”(冒号 )键 再按 wq ( w :保存 q: 退出)二、 gcc 编译工具对已敲好的代码 进行编译 gcc a.c -o a (其中a.c是你要编译的文件

2020-11-25 22:11:26 133

原创 C 语言typedef 关键字

typedef 关键字typedef为C语言的关键字,作用是为一种数据类型定义一种新的名字。数据类型包括内部数据类型(int char等 )和自定义的数据类型(struct 等)。匹配1、和普通类型匹配,通过名字来获取一些信息。2、和 struct 来匹配为了代码编写简介。和普通的类型匹配在单片机开放,寄存器位 8位 16位 32位typedef unsigned char u_int8;typedef unsigned short int u_int16;typedef

2020-11-08 17:58:23 120

原创 学习C结构体

学习C结构体结构体初识数组:类型相同的一组数的集合;结构体:类型不同的一组数的集合;(数据更多,更丰富,数据更大)例如结构体的定义和使用结构体 后面记得 加 “ ; ”内存空间char *p 为野指针 直接 d.p 的话崩溃 ,需要给char *p 开辟空间 然后初始化 ‘、0’;#include <stdio.h>#include <stdlib.h>struct student { int score; char *na

2020-11-08 09:41:38 75

空空如也

空空如也

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

TA关注的人

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