- 博客(38)
- 收藏
- 关注
原创 Windows 无法访问\192.168.xx.xx 请检查名称的拼写。否则,网络可能有问题。要尝试识别并解决网络问题,请单击“诊断“
参考文档:https://zhuanlan.zhihu.com/p/673820397。1、首先开启Windows 10/11家庭版组策略功能。
2025-03-04 18:11:40
404
原创 进程执行其他程序
参考博文链接:https://blog.youkuaiyun.com/u014530704/article/details/73848573exec族函数函数的作用:我们用fork函数创建新进程后,经常会在新进程中调用exec函数去执行另外一个程序。当进程调用exec函数时,该进程被完全替换为新程序。因为调用exec函数并不创建新进程,所以前后进程的ID并没有改变。exec族函数定义: 可以通过这个网站查询:linux函数查询功能: 在调用进程内部执行一个可执行文件。可执行文件既可以是二进制文件,也可以
2022-05-12 21:49:27
276
原创 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
149
原创 Shell script Ⅳ
参考博文https://www.xuliangwei.com/$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误Linux Systemctl 命令由来及详解 参考博文https://blog.youkuaiyun.com/small_queen/article/details/115531530systemctl是 Systemd 的主命令,用于管理系统。shell学习:(监控系统状态) 先取行->取值->对比->判断->输出->修改sh -n xxx.sh 检
2022-05-05 10:22:09
705
原创 shell script学习笔记
查找历史命令 history | grep xxx1、定义变量 变量名 = 变量值 // 驼峰命名2、复用变量 可使用$变量 或者 ${变量}3、查看变量 echo $变量名 set 显示所有的变量,包括自定义和环境变量4、取消变量 unset 变量名 作用范围: 当前终端系统的环境变量 //全局变量export export 变量 ,将⾃定义变量转换成环境变量定义的变量最好不要和系统变量相同 否则会被覆盖如:结果如下:系统变量显示当前 路径变量永久生效 需要在 /
2022-05-01 14:26:34
111
原创 shell学习
脚本脚本简单地说就是一条条的文字命令,这些文字命令是可以看到的(如可以用记事本打开查看、编辑),脚本程序在执行时,是由系统的一个**解释器,**将其一条条的翻译成机器可识别的指令,并按程序顺序执行。因为脚本在执行时多了一道翻译的过程,所以它比二进制程序执行效率要稍低一些。shell脚本也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,它使用了Linux/Unix下的命令。
2022-04-30 21:07:19
83
原创 进程间通信学习
一、管道1、半双工通信(一个方向)2、亲属间通信二、命名管道三、消息队列1、消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级。2、消息队列独立于发送与接收进程。进程终止时,消息队列及其内容并不会被删除。3、消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取。四、信号量1、信号量用于进程间同步,若要在进程间传递数据需要结合共享内存。2、信号量基于操作系统的 PV 操作,程序对信号量的操作都是原子操作。3、每次对信号量的 PV 操作不仅限
2022-04-18 20:35:15
125
原创 SPI接口协议学习笔记
SPI时序图SPI是串行外设接口(Serial Peripheral Interface)的缩写。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,如今越来越多的芯片集成了这种通信协议。SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的,它们是SDI(数据输入)、SDO(数据输
2022-04-15 17:39:46
331
原创 回调函数学习
https://mp.weixin.qq.com/s?src=11×tamp=1648382346&ver=3702&signature=wBth*pfEcx8FInIBkiWNBIJesv-GhmmeLttRSs0DIDRYW2an5hPko8zujAAI1f7ZVPpY7felkZD6UXsGCHCoi84jXTMITeiXWmpFsnrBDjOrHZ1Lrizc832-5TzgpmpW&new=1回调函数:在计算机科学中,回调函数是指一段以参数的形式传递给其
2022-03-27 20:34:58
138
原创 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
2661
原创 网络协议HTTP、TCP、socket学习
原文链接:https://blog.youkuaiyun.com/weixin_43122090/article/details/105462015原文链接:https://blog.youkuaiyun.com/Yansky58685/article/details/98118124原文链接:https://www.cnblogs.com/thinksasa/archive/2013/02/26/2934206.html1、计算机网络七层模型2、网络协议是什么在计算机网络要做到井井有条的交换数据,就必须遵守一些事先约
2022-03-17 20:33:30
3575
原创 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
3220
原创 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
471
原创 Linux驱动代码初试
用户层:可直接调用C库 进行需求开发(文件、进程、进程间通信、线程、网络、界面)用户层C库提供了支配内核干活的接口,打通了与内核的通路(open、read、write fork、pthread、socket)进行树莓派开发则需要wiringPi库 ,不同的wiringPi不同的平台,厂家不一定会提供库,那么需要开发者自己学会开发。inux 一切皆文件! Linux的设备管理是和文件系统紧密结合的,各种设备都以文件的形式存放在/dev目录下,称为设备文件。应用程序可以打开、关闭和读写这些设备文件,完
2022-03-10 21:49:35
449
1
原创 sudo insmod pin4driver.ko
我出现这种原因是因为驱动代码没有写完整,复制时module_exit(xxx_drv_exit);MODULE_LICENSE("GPL v2");这两行代码不存在,请仔细检查驱动代码是否完整
2022-03-10 20:45:36
181
原创 树莓派-内核下载代码 编译 替换内核
参考博文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
636
原创 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
126
原创 树莓派-内核开发
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
97
原创 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
190
原创 树莓派超声使用
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
82
原创 动态库初学
动态库制作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
191
原创 Linux库初学习笔记
库一个“程序函数库”简单的说就是一个文件包含了一些编译好的代码和数据,这些编译好的代码和数据可以在事后供其他的程序使用。程序函数库可以使整个程序更加模块化,更容易重新编译,而且更方便升级。程序函数库可分为3种类型:静态函数库(static libraries)、共享函数库(shared libraries)、动态加载函数库(dynamically loaded libraries):“< >” 表示进行编译的时候 从user/include/ 的路径查找目标文件“ ” 表示优先当前路径
2022-03-02 17:13:26
61
原创 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
9784
18
原创 初学链表——静态链表制定点增加一个新的节点
#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
204
原创 Linux 线程API学习
线程开发的最基本概念主要包含三点:线程,互斥锁,条件。其中,线程操作又分线程的创建,退出,等待 3 种。互斥锁则包括 4 种操作,分别是创建,销毁,加锁和解锁。条件操作有 5 种操作:创建,销毁,触发,广播和等待。其他的一些线程扩展概念,如信号灯等,都可以通过上面的三个基本元素的基本操作封装出来。详细请见下表:...
2021-02-18 22:05:47
186
原创 Linux线程初识
什么是线程1、一个程序中的多个执行路线就叫线程(thread),线程是一个进程内部的一个控制序列。2、典型的UNIX/Linux进程可以看成只有一个控制线程:一个进程在同一时刻只做一件事情。有了多个控制线程后,在程序设计时可以把进程设计成在同一时刻做不止一件事,每个线程各自处理独立的任务。线程有进程的关系1、事实上,所有的进程都至少有一个执行线程。2、进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。3、进程不是基本的运行单位,而是线程
2021-02-16 16:27:37
203
原创 创建子进程函数fork与vfork 区别
创建子进程我们可以通过调用fork创建一个新的进程,这个系统调用复制当前的进程,在进程表中创建一个新的表项,新表项中的许多属性与当前进程是相同的。新进程几乎与原进程一摸一样,执行代码也完全一样,但新进程右自己的数据空间、环境和文件描述符。fork和exec函数结合在一起使用就是创建新进程所需要的一切了。1、fork函数创建如下2、fork函数与vfork函数的区别a、vfork直接使用父进程存储空间,不拷贝。b、vfork保证子进程先运行,当子进程调用exit (0)退出后,父进程才执行。#i
2021-01-16 15:21:38
183
原创 判断父子进程,使用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
2762
原创 进程—Linux操作环境的基础部分
在学习进程前需要先掌握的一些概念知识什么是程序?什么是进程?各有什么区别1、 程序是是静态的概念,如gcc xxx.c -o pro ,在磁盘中生成pro文件,该文件便叫程序。或者是桌面上一些其他未运行的软件2、进程是程序的一次运行活动,简单的讲就是程序运行起来了,跑起来了,系统就多了一个进程。正在运行的程序。3、从是否运行角度可以判断如何查看系统中有哪些进程?a、使用ps指令查看在实际工作中,配合grep来查找程序中是否存在某一各进程使用如查找我们需要存在init的进程root
2021-01-14 15:54:30
81
原创 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
550
原创 初学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
1434
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
187
原创 如何在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
168
原创 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
142
原创 学习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
97
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人