- 博客(47)
- 收藏
- 关注
原创 SG90舵机的pwm信号-使用linux定时器实现控制
ITIMER_VIRTUAL //以该进程在用户态下花费的时间来计算,它发送出SIGVTALRM信号。ITIMER_PROF /以该进程在用户态下和内核态下所费的时间来计算,发送的信号是SIGPROF。(PWM波的频率不能太高,大约50HZ,即周期=1/频率=1/50=0.02s,周期为20ms)函数产生信号,系统随之使用signal信号处理函数来处理产生的定时信号,从而实现定时器。ITIMER_REAL //以系统真实的时间来计算,发送的信号是SIGALRM。为设置定时器(闹钟),可以实现周期定时。...
2022-08-11 17:24:43 790
原创 使用libcurl库编程实现人脸识别和base64的基本认识
还是使用翔云平台来实现人脸识别方案。API调用的要求:①POST请求②url地址(上图中的接口地址)③访问接口需要的参数④识别的图片为base64流编程curl_easy_setopt函数post请求所需要的参数:CURLOPT_POSTFIELDS:发送包含此数据的POST参数CURLOPT_COOKIEFILE:读取cookie到文件中...
2022-05-09 17:02:31 433
原创 strcpy和memcpy的区别
memcpy函数原型:void * memcpy (void * dest, const void * src, size_t n);功能:从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中strcpy函数原型:char * strcpy(char * dest,char * src);功能:把从src地址开始且含有NULL结束符的字符串赋值到以dest开始的地址空间,返回dest(地址中存储的为复制后的新值)。strcpy和memcpy的主要区别。1、
2022-04-25 18:31:42 442
原创 编程实现调用libcurl库访问百度
libcurl相关API介绍在基于LibCurl的程序里,主要采用callback function (回调函数)的形式完成传输任务,用户在启动传输前设置好各类参数和回调函数,当满足条件时libcurl将调用用户的回调函数实现特定功能。下面是利用libcurl完成传输任务的流程:调用curl_global_init()初始化libcurl调用 curl_easy_init()函数得到 easy interface型指针调用curl_easy_setopt设置传输选项根据curl_easy_set
2022-04-25 17:28:19 316
原创 xxxx(动态库名称): cannot open shared object file: No such file or directory
适用于默认安装在默认路径出现的问题!默认路径指的是:在配置文件 /etc/ld.so.conf中指定的动态库搜索路径在使用curl安装包自行安装的时候,使用默认方法:① ./configure②make③sudo make install但是在查看curl --version的时候出现提示:libcurl.so.4: cannot open shared object file: No such file or directory但是通常默认安装的时候,这个libcurl.so.4库应该在默认
2022-04-21 21:23:39 383
原创 libcurl等第三方库通用编译方法
下载libcurl库的链接下载后拷贝至Ubuntu解压:tar -xvf curl-7.71.1.tar.bz2正常我们使用一个库,要去看看里面的README丶docs丶还有INSTALL (有的在docs里面)
2022-04-21 10:29:36 3090
原创 linux下安装libcurl(Ubuntu18)
直接安装sudo apt install curlsudo apt install libcurl4-openssl-dev安装后查看版本:curl --version进入usr目录:find . -name '*curl*'将当前目录及其子目录下所有含有curl关键字的文件列出来:头文件目录:/usr/include/x86_64-linux-gnu/curl库文件目录:/usr/lib/x86_64-linux-gnu...
2022-04-20 10:38:08 6363
原创 http协议的请求和响应丶https和密码学基础
http协议的特性①http协议是建立在TCP/IP协议之上应用层协议,默认端口为80,8080②http协议的的特点是数据交互时才连接,其余时间都处于断开状态。http协议的请求http协议的报文传输的是ASCII码,在TCP/IP协议之上,主要主要分为三部分:请求行、请求头、请求内容理解get和post两种请求方法的区别——GET(完整请求一个资源)、POST(提交表单)GET 请求:当客户端要从服务器中读取文档时,当点击网页上的链接或者通过在浏览器的地址栏输入网址来浏览网页的,使用的
2022-04-19 18:20:22 464
原创 HTTP丶TCP丶SOCKET的区别
参考博文HTTP连接HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是建立在TCP协议之上的一种应用。HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。(就好像我们百度搜索的时候,输入一个关键字,点击“百度一下”,就会发送一次请求,服务器再返回搜索结果的页面,这个过程就表示“一次连接”)由于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”,
2022-04-18 11:02:53 2350
原创 TCP的三次握手和四次挥手
三次握手SYN:请求建立连接首先客户端向服务端发出连接请求的报文段,其中会把同步位SYN置为1,并选择序号seq=x,表明传送数据时第一个数据字节的序号是xTCP 连接请求报文段首部中的同步位SYN被设置为1,,表明这是一个tcp连接请求报文段。序号字段seq被设置了一个初始值x作为TCP客户进程所选择的初始序号。服务端收到连接请求报文段之后,如果同意,则发回确认。服务器在确认的报文段当中,同样也设SYN同步位为1,同时把ACK确认位设为1,而确认号ack设置为x+1,表示之前x序号的
2022-04-17 11:10:24 1772
原创 网络七层模型和TCP/IP分层模型
OSI模型从上到下七. 应用层——规定数据的传输协议HTTP(超文本传输协议-TCP) —— 端口号:80HTTPS(HTTP+SSL超文本传输安全协议-TCP)——端口号:443SMTP(简单邮件传输协议-TCP)——端口号:25POP3(第三版邮局协议-TCP)——端口号:110FTP(文件传输协议-TCP)——端口号:20(数据端口)/21(控制端口)TFTP(简单文件传输协议-UDP)——端口号:69SCP(安全复制协议-TCP)——端口号:22SSH(安全外壳协议
2022-04-16 11:11:46 2871
原创 树莓派3B基于mjpg-streamer的摄像头和人脸识别方案引入
mjpg-streamer的摄像头在树莓派安装所需软件sudo apt-get install gitsudo apt-get updatesudo apt-get upgradesudo apt-get install subversion //Subversion是一个自由开源的版本控制系统sudo apt-get install libjpeg8-dev #JPEG支持库sudo apt-get install imagemagicksudo apt-get install
2022-04-15 10:40:14 468
原创 设计模式(2)——工厂模式
什么是工厂模式这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象代码示例(使用c语言模拟)factory1文件夹可以看成一个工厂,里面的cat.c和dog.c可以看成对象,如果需要添加新对象,只需要往这个文件夹添加新的.c文件。然后再去main函数调用,这样可以使main函数代码更加简洁Animal.h头文件文件主要用于 类声明 以及几个 函数声明,还有其他函数需要的头文件也
2022-04-08 17:12:42 716
原创 设计模式(1)——什么是设计模式?什么是类和对象
什么是设计模式(基本认知)设计模式通常描述了一组相互紧密作用的类与对象c 面向过程(一门不太友好的面向对象语言)java 面向对象使用设计模式是为了让代码更容易被他人理解、保证代码可靠性、程序的重用性。(以前写代码单纯的为了解决问题,容易导致写出来的代码很乱)设计模式最早是建筑设计领域引入到计算机科学中来的。①设计模式是代码设计经验的总结。(稳定,拓展性更强)②一系列(设计模式共23种)编程思想ps:算法不是设计模式,因为算法致力于解决问题而非设计问题。什么是类和对象类:(抽象)
2022-04-08 17:10:39 867
原创 linux-通过BCM2835芯片手册进行IO操控的代码编程
树莓派寄存器阅读驱动开发的两大利器就是开发手册和电路图,但是树莓派在开发手册中就已经将相应的寄存器已经写出来了,所以不需要看电路图,只看开发手册就可以进行开发。进行IO口的驱动,所以在开发手册中找到对应的IO篇章,进行开发有的芯片手册给的是物理地址,bcm2835给的是总线地址GPFSEL0 GPIO Function Select 0: 功能选择 输入/输出GPSET0 GPIO Pin Output Set 0 : 设置输出为1(set就是置1的意思)0 = No effect1
2022-03-28 11:25:10 1516
原创 总线地址,物理地址,虚拟地址
总线地址地址总线 (Address Bus;又称:位址总线) 属于一种电脑总线 (一部份),是由CPU 或有DMA(DMA就可以脱离CPU,独立完成数据传送)能力的单元,用来沟通这些单元想要存取(读取/写入)电脑内存元件/地方的实体位址。其实就是CPU能够访问内存的范围现象:表现得现象有:装了32位的win7的系统,明明内存条8G,可是系统只识别了3.8G ,装了64位系统才能识别8G因为 32位操作系统只能表示/访问:4294967296 bit(2^32)bit 4,294,967,2
2022-03-26 10:52:55 354
原创 驱动认知-驱动代码编写与执行
驱动的认知应用层进行open,read,write驱动程序的时候,linux系统调用过程基于驱动框架代码编写寻找一个驱动参考(字符设备驱动)作为初学者我们可以选择别人写好的驱动作为参考#include <linux/fs.h> //file_operations声明#include <linux/module.h> //module_init module_exit声明#include <linux/init.h> //__init
2022-03-25 10:11:04 2806 1
原创 认识linux内核结构
linux内核结构用户级函数库 :提供了应用程序支配内核干活的接口内核级Linux内核主要由五个子系统组成:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信。1.进程调度(Process Scheduler):控制多个进程对CPU的访问,使得多个进程能在CPU中微观串行运行,看起来却像是并行运行。驱动程序编程中,若没有获得资源则进入休眠,直到被唤醒。2.内存管理(Memory Manager) 允许多个进程安全的共享主内存区域。Linux的内存管理支持虚拟内存(为每个进程进行虚拟内存到
2022-03-22 15:47:45 5056
原创 linux文件系统认知
什么是文件系统正常听到“文件系统”这个概念对它的理解就是根目录,但其实不是这样的。文件系统不是根目录文件系统是操作系统用于明确存储设备组织文件的方法。(文件存放在存储设备上是有不同的存储方式的)以上说的方法:就是文件管理系统(程序),简称文件系统文件系统(文件管理系统的方法)的种类有哪些有:FAT VFAT NTFS EXT1/2/3/4 HFS …无论是Windows操作系统,还是Linux操作系统,每个分区均可以有不同的文件系统查看文件系统的命令: df -T(-T 显示该分区的
2022-03-21 17:14:05 1144
原创 配置适合树莓派的linux内核(配置,编译,拷贝到树莓派sd卡)
树莓派linux源码配置需要对驱动代码进行编译驱动代码的编译需要一个提前编译好的内核编译内核就必须配置:配置的最终目标会生成 .config文件,该文件指导Makefile去把有用东西组织成内核配置内核源码有三种方式通常我们购买芯片,厂家会配linux内核源码,比如说买了树莓派,就提供树莓派linux内核源码第一种方式使用 厂家.config进行配置第二种方式第三种方式...
2022-03-18 10:49:28 1637
原创 树莓派的linux内核开发基础准备工作
在Ubuntu安装交叉编辑工具链和树莓派linux内核源码首先去https://github.com/raspberrypi/下载树莓派的linux源码和交叉编译工具链到共享文件夹注:树莓派的Linux源码需要下载和自己树莓派开发板对应的版本,所以需要在自己的树莓派查看版本号——uname -r寻找对应的版本拷贝到Ubuntu之后解压树莓派linux源码和交叉编译工具链(交叉编译工具链配置)嵌入式设备带操作系统的启动过程个人PC:X86 Intel(windows系统)启动过程:
2022-03-16 15:41:26 229
原创 Ubuntu开启ssh服务
查看ssh是否安装sudo ps -e | grep ssh只有一个agent没有出现sshd,需要试着开启ssh服务尝试开启ssh服务sudo /etc/init.d/ssh start如果返回命令未找到,说明还没有安装ssh服务安装ssh服务sudo apt-get install openssh-server然后再开启ssh服务...
2022-03-13 15:22:42 999
原创 初识交叉编译
交叉编译的概念1.什么是交叉编译?为什么要交叉编译?是什么?交叉编译: 交叉编译是在一个平台上生成另一个平台上的可执行代码。我们在windows上面编写C51代码,并编译成可执行代码,如xx.hex,是在c51上面运行,不是在windows上面运行我们在ubuntu上面编写树莓派的代码,并编译成可执行代码,如a.out,是在树莓派上面运行,不是在ubuntu linux上面运行C51 stm32 交叉编译的发生在keil(集成环境上面)编译 :是在一个平台上生成在该平台上的可执行代码。为
2022-03-13 11:14:27 1398
原创 Ubuntu 在设置共享文件夹时/mnt下没有hgfs文件夹(vmware-tools)
虚拟机设置共享文件夹(关机后)编辑虚拟机设置默认存放在/mnt/hgfs/share中。(但是发现在/mnt下没有hgfs目录)在虚拟机图标上右键,选择重新安装vmware-tools,VMware Tools文件夹就会挂载到/media/用户名/VMware Tools下面,由于该文件夹只读,所以需要把对应的压缩文件解压到其他目录下。把VMwareTools-xxxx-.tar.gz复制到其他目录tar -zxvf VMwareTools-10.3.23-17030940.tar.gz (
2022-03-12 14:11:47 9286
原创 c语言笔记
0.一个字节 8位!!!1.scanf 输入连续字符的时候,按“空格”也算一个字符(区别整数)回车也不行2.数组可以定义这样:int a[]={1,2,3,4} ----大括号里面的数字根据后面的数据自动分配3.sizeof 是关键字不是函数 计算数组大小:sizeof(arry)/sizeof(arry[0])4.冒泡排序(4.4),简单选择排序(4.5)5.二维数组a[][3] (行可以不写)6.函数中形式参数:只有在调用的时候才会申请空间,在调用结束后内存就会被释放掉7.三目运算符:z=
2022-03-08 22:41:28 891
原创 树莓派外设开发综述(wiringpi库,继电器,超声波(gettimeofday),串口,语音模块)
树莓派的接口IO口:Input Ouput 对于主控芯片来说Input:人体红外传感器,烟雾传感器,火焰传感器,震动传感器Output: 继电器,蜂鸣器PWM:电机调速,调整灯光明亮度语音识别模块,液晶屏:串口uart,IIC,SPI,IIS其他特定硬件接口:flash其他芯片:Nanopi:LinuxS3c2410,2440,6410Tiny210 tiny4412海思方案,瑞芯微方案,移远方案C51,STM32,Arduino,WemosD1:没有OS(Linux) 纯裸机开发
2022-03-08 22:41:14 6828
原创 linux库
分文件编程程序分为主入口函数(main函数)和功能性函数(自己定义的函数)好处:分模块的编程思想: a.功能责任划分明确; b.方便调试(那部分出问题找对应函数去解决) c.主程序简洁主程序 main.c#include<stdio.h>#include"add.h"// < >这个符号表示gcc在编译的时候默认的在/usr/include 或 /usr/local/include 下找头文件" " 这符号表示优先从当前路径去找(当前的文件夹),然后再去/usr
2022-01-22 12:13:05 1103
原创 初识树莓派--刷机,登录,安装程序,文件传输
树莓派开发文档笔记参考文档1 树莓派刷机2 树莓登录2.1用HDMI视频线 连接到显示器2.2串口2.2.1 串口破解 (检查设备的串口是否有加密)默认情况,树莓派的串口是和蓝牙连接的。想办法断开蓝牙连接,让串口用来数据通信a .观看树莓派的启动过程(字符)b. 串口登录树莓派修改系统配置,启用串口登录树莓派1.打开SD卡根目录的"config.txt"文件,将以下内容添加在最后并且保存。dtoverlay=pi3-miniuart-bt//这样就停止了蓝牙,解除了
2022-01-17 10:23:41 362
原创 linux 网络编程(2)socket网络编程
基础地址地址由IP地址、端口号构成IP地址:用于设备标识端口号:用于标识网络服务(ftp、http、socket) (5000到10000之间选择)IP地址转换API(IP地址是字符串要转换成网络能识别格式)#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>int inet_aton(const char *cp, struct in_addr *inp); //
2021-09-11 10:14:42 214
原创 linux 网络编程(1)初识网络编程
1、为什么需要学习网络编程?前面学习的进程间通信:管道、消息队列、共享内存、信号、信号量这5种通信方式都是依靠Liunx内核。他们的一个缺点就是,这些通信方式只能在单机运行。所以引入网络编程可以实现多机通讯网络的通讯 Linux与Android、IOS、各种单片机,或者是Android对Android等等。网络编程的主要的问题:网络通讯:通过通信双方地址。地址由IP地址和端口号组成。IP地址:负责定位主机。端口号:负责定位主机上的特定应用(主机上有着多种协议)。端口号作用一台拥有IP地址
2021-09-10 23:05:27 240
原创 linux 多线程编程-(4)条件变量
条件变量条件变量是线程另一可用的同步机制条件变量给多个线程提供了一个会合的场所。条件变量与互斥量一起使用时,允许线程以无竞争的方式等待特定的条件发生。条件本身是由互斥量保护的。线程在改变条件状态前必须首先锁住互斥量,其他线程在获得互斥量之前不会察觉到这种改变,因为必须锁定互斥量以后才能计算条件。条件变量使用之前必须首先初始化pthread_cond_t数据类型代表的条件变量可以用两种方式进行初始化:静态初始化:pthread_cond_t cond = PTHREAD_COND_INITIAL
2021-08-30 15:08:04 251
原创 linux 多线程编程-(3)互斥锁
互斥锁互斥量(mutex)是一把锁,在访问共享资源前对互斥量进行加锁,在访问完成后释放互斥量上的锁。对互斥量进行加锁后,任何其他试图再次对互斥量加锁的线程将会被阻塞直到当前线程释放该互斥锁。如果释放互斥锁时有多个线程阻塞,所有在该互斥锁上的阻塞线程都会变成可运行状态,第一个(需要竞争)变为可运行状态的线程可以对互斥量加锁,其他线程将会看到互斥锁依然被锁住,只能回去等待它重新变为可用。在这种方式下,每次只有一个线程可以向前运行。在设计时需要规定所有的线程必须遵守相同的数据访问规则。只有这样,互斥机制才能
2021-08-29 16:45:21 434
原创 linux 多线程编程-(2)线程的操作(3种)
头文件#include <pthread.h>线程的操作线程操作包括3 种线程的创建,退出,等待线程的创建函数原型int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void *), void *restrict arg);参数tidp:当pthread_create成功返回时,由tidp指向的内存单元被设置为新创建线程的线程I
2021-08-28 19:00:14 175
原创 linux 多线程编程-(1)线程和进程的区别和优点
典型的UNIX/Linux进程可以看成只有一个控制线程:一个进程在同一时刻只做一件事情。有了多个控制线程后,在程序设计时可以把进程设计成在同一时刻做不止一件事,每个线程各自处理独立的任务。进程和线程的区别进程:进程是程序执行时的一个实例,是担当分配系统资源(CPU时间、内存等)的基本单位。在面向线程设计的系统中,进程本身不是基本运行单位,而是线程的容器。...
2021-08-26 16:34:13 203
原创 linux-进程通信(5)信号量(实现读者写者问题)
信号量信号量(semaphore)与已经介绍过的 IPC 结构不同,它是一个计数器。信号量用于实现进程间的互斥与同步,而不是用于存储进程间通信数据。原理临界资源(各进程采取互斥的方式,实现共享的资源称作临界资源。)多道程序系统中存在许多进程,它们共享各种资源,然而有很多资源一次只能供一个进程使用。一次仅允许一个进程使用的资源称为临界资源。许多物理设备都属于临界资源,如输入机、打印机、磁带机等。可以将信号量比喻成一个盒子,初始化时在盒子里放入N把钥匙,钥匙先到先得,当N把钥匙都被拿走完后,再来拿钥
2021-08-23 16:56:53 1068
原创 linux-进程通信(4)信号
信号对于 Linux来说,实际信号是软中断,许多重要的程序都需要处理信号。信号,为 Linux 提供了一种处理异步事件的方法。比如,终端用户输入了 ctrl+c 来中断程序,会通过信号机制停止一个程序。信号的概述每个信号都有一个名字和编号,这些名字都以“SIG”开头,例如“SIGIINT”、“SIGUP”等等。信号定义在signal.h头文件中,信号名都定义为正整数。具体的信号名称可以 使用kill -l来查看信号 的名字以及序号,信号是 从1开始编号的,不存在0号信号。kill对于信号0有
2021-08-21 09:33:17 505
原创 linux-进程通信(3)共享内存
共享内存共享内存(Shared Memory),指两个或多个进程共享一个给定的存储区。1.查看系统中的共享存储段:ipcs -m2.删除系统中的共享存储段:ipcrm -m shmid(通过ipcs -m查看得到)特点1、共享内存是最快的一种 IPC,因为进程是直接对内存进行存取。2、因为多个进程可以同时操作,所以需要进行同步。3、信号量+共享内存通常结合在一起使用,信号量用来同步对共享内存的访问。步骤1、创建/打开共享内存(shmget)2、进程A连接共享内存,写数据(shma
2021-08-19 16:56:19 96
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人