自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【树莓派上编译kprobe】

从图中可以看出arch =arm64 交叉编译工具链为aarch64-linux-gnu-或者在终端输入export CONFIG_SAMPLE_KPROBES=m。在对应的源码目录下修改Makefile。

2024-10-16 11:32:45 273

原创 树莓派读写spi_flash w25q64

写入数据前必须先擦除,擦除后,所有数据位变为1(Flash有专门的擦除命令,操作时仅需要发送擦除命令即可),在Flash中0FFH代表空白。连续写入多字节时,最多写入一页的数据,超过页尾位置的数据,会回到页首覆盖写入(页缓存器的限制),在写入时,要注意写入的地址范围不能跨越页尾。直接调用读取时序,无需使能,无需额外操作,没有页的限制,读取操作结束后不会进入忙状态,但不能在忙状态时读取。每个数据位只能由1改写为0,不能由0改写为1(成本和技术原因)写入操作结束后,芯片进入忙状态,不响应新的读写操作。

2024-10-08 15:21:45 723

原创 树莓拍引脚图

2024-09-24 15:55:23 433

原创 树莓派之修改设备树文件

在设备树文件中添加设备节点,路径为arch/arm/boot/dts/bcm2710-rpi-3-b.dts。重启设备,在/sys/firmware/devicetree/base/目录下可以看到添加的节点。下载对应版本的树莓派内核源码。替换到开发板的boot目录下。并且可以看到对应的属性。

2024-09-23 16:38:35 475

原创 树莓派驱动之spi回环测试

选择Interfacing options,选择spi打开。可以看到spi_bcm2835。短接MISO和MOSI。

2024-09-18 17:46:35 314

原创 SPI子系统

Mode0:CPOL=0,CPHA=0:此时空闲态时,SCLK处于低电平,数据采样是在第1个边沿,也就是SCLK由低电平到高电平的跳变,所以数据采样是在上升沿(准备数据),(发送数据)数据发送是在下降沿。Mode1:CPOL=0,CPHA=1:此时空闲态时,SCLK处于低电平,数据发送是在第1个边沿,也就是SCLK由低电平到高电平的跳变,所以数据采样是在下降沿,数据发送是在上升沿。spidev.c文件解析,spidev.c是spi通用的设备驱动文件,一些简单的spi设备可以直接使用spidev.c。

2024-09-10 17:38:31 1149

原创 MS-TCN lipreading运行中的问题

【代码】MS-TCN lipreading运行中的问题。

2022-11-28 22:02:57 247

原创 pycharm远程连接服务器

2.我自己create的conda虚拟环境里面有3个版本的python,只有python3.9的那个才配了pytorch环境的是能用的。1.学长教的是默认配的conda环境,其他pytorch啥的还是要自己配。3.找pyhon3.9的环境路径。

2022-11-20 15:17:44 645

原创 JAVA学习之继承

语法在java中用extents关键字来表示一个类继承了另一个在JAVA中object类是所有类的父类方法重写:方法重写是指子类可以根据需要对从父类继承来的方法进行改写,是多态机制的前奏方法重写注意点:·重写方法必须和被重写方法具有相同的方法名称、参数列表和返回值·重写方法不能比被重写方法有更严格的访问权限·父类中的私有方法,不能被重写·在子类重写的方法中继续调用父类被重写的方法可以通过super.函数名获取toString();equals();hashcode();clone

2022-04-18 17:42:41 279

原创 java学习之面向对象——封装

面向对象有三大特性:封装、继承、多态。封装的概念:将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体(即:对象)。类内的访问权限:封装的目的:隐藏内部实现细节,对外提供功能接口UML(Unified Modeling Language):是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言。构造函数(构造方法)构造方法负责对象初始化工作, 为对象的属性赋合适的初始值创建对象时,其类的构造方法确保在用户操作对象之前进行。语法规则:方法名与类名一致没有返回类型

2022-04-17 11:03:20 285

原创 JAVA 学习第二课 周边概念理解

JAVA、 SE、 EE、 ME的区别:JAVA SE:(Java Platform,Standard Edition)标准版本。JAVA EE:Java 平台企业版(Java Platform Enterprise Edition)面向企业的开发。多了很多api。主要用于B/S架构开发。Java ME: 称为微型版本(Java Platform,Micro Edition)是为机顶盒、移动电话和PDA之类嵌入式消费电子设备提供的Java语言平台。JRE、JDK、JVM的区别JRE:(Java R

2022-04-11 15:53:15 155

原创 嵌入式学习Java第一课

嵌入式为什么要学习java首先来看一下传统的嵌入式学习路线:C语言 >> 应用:C51,STM32linux系统编程C++ >> 应用:QTARM开发在系统的UI层面上:无操作系统的裸机开发:用C语言手撕图像像素(优点:响应速度快,对硬件资源要求低。缺点:UI界面丑)带操作系统的(linux):c、MINIGUI、GTK图像库、NCURSE-带操作系统的(linux):C++、QT目前趋势:安卓平台普及(刷卡机、点歌机)鸿蒙系统:内嵌安卓总结:在

2022-04-11 11:14:49 1338

原创 在 制作基于stm32f103的温湿度检测时遇到的问题及解决方法

1、DHT11模块启动不了1.没有做DHT11启动判断(若DHT11启动会出现一段低电平),(硬件启动有点玄学问题),如果一次不行就跳过这次循环,下一次再尝试启动DHT11传感器。或者尝试多次拉高电平然后再根据芯片手册的启动电平信号去改变电平信号。2、屏幕上的数值反应有点慢。。有时候还会卡住。猜想:可能是DHT11在某次数据采集过程中出现问题,然后在某个while循环中阻塞住了。解决办法:在while循环中做延时有效性判断,若延时了很久那就直接return,进入下一次数据采集。3.在DHT11_

2022-04-06 16:22:18 6634

原创 学习c++遇到的问题

1:&在定义时为引用,在当做运算符时为取地址、2.再类内定义有参数的构造函数时,在类外定义该类时应调用该构造函数Person p = Person(10,10);//显示调用Person p1(10,10);//隐式调用

2022-03-06 11:08:58 443

原创 C语言易错点

在子函数定义的数组不能被return,因为在子函数的数组的内存在运行结束后会回收。使用malloc申请内存空间即可。free()函数 只能free malloc创建的内存,free静态创建的变量会导致段错误。

2022-02-07 13:23:25 561

转载 C语言结构体大小计算

我们实际生活中,保存的数据一般不会是同一种类型,所以引入了结构体。而结构体的大小也不是成员类型大小的简单相加。需要考虑到系统在存储结构体变量时的地址对齐问题。由于存储变量地址对齐的问题,结构体大小计算必须满足两条原则:一、结构体成员的偏移量必须是成员大小的整数倍(0被认为是任何数的整数倍)二、结构体大小必须是所有成员大小的整数倍下面来具体分析1、简单结构体truct s1{undefined char ch1; char ch2; int i;};这个结构体的大小

2022-02-01 19:51:09 463

原创 KMP算法求next数组

next 数组各值的含义:代表当前字符之前的字符串中,相同前缀后缀长度+1本文仅供本人忘记时复习使用。b站有个老师讲的很好的:https://www.bilibili.com/video/BV16X4y137qw?from=search&seid=8054889486484307163&spm_id_from=333.337.0.0...

2022-01-28 18:46:34 192

原创 字符数组与字符串赋值问题

产生这个错误的原因:[Error] assignment to expression with array type字符数组与字符串赋值问题(1)数组不能直接给数组赋值(2)指针不能直接给数组赋值根本原因:数组名在内存中是一个类似于常量的存在,可以理解为const,在编译的时候就已经给分配的储存位置,在需要使用到数组名时,直接获取的就是一个地址值,因此是不能改变的。char c[3] = a; //错误---》数组不能直接给数组赋值char d[3] = p; //错误---》指针不能

2022-01-26 17:10:44 2626

原创 为什么在printf中 数组名++不行,而数组名+1却可以

#include<stdio.h>int main(){ int arry[3] = {1,2,3}; int *p = arry; printf("%d\n",*p); printf("%d\n",*p++); printf("%d\n",*arry++); printf("%d\n",*(arry+1));} 对上面的代码进行编译发现第三个printf出现报错,错误信息:lvalue required as increment operand个人理解:数组名表示数组首元

2022-01-11 19:06:56 1490 1

原创 关于STM32上电按下复位键时串口输出FF

最近玩stm32,使用串口发送数据在PC端使用串口工具检测接收到的数据,发现STM32串口发送到电脑的数据乱码,按下复位键总是显示FF,配置GPIO的时候先打开GPIO时钟再初始化GPIO和串口问题就解决了(可能是顺序问题)配置串口时尽量按下面的顺序配置1.开启IO和外设USART时钟。2.GPIO_Iinit();3.NVIC_Init();(如果使能中断)4.USART_ITConfig();5.USART_Cmd();2和3一定不能颠倒!!!...

2021-03-05 21:41:53 2007 1

原创 智能家居中 将树莓派摄像头拍摄的图片转为base64流时 libcurl传输时出现的 “产品类型错误”

如视频所示 20210212-202151 这可能是由于拍摄的图片的文件过大从而导致转换成base64流的字符串也特别长将拍摄命令改为`可解决问题raspistill -o img1.jpg -q 5...

2021-02-12 20:36:24 302

转载 Linux环境变量 PATH与LD_LIBRARY_PATH的区别去设置总结

转载自:https://os.51cto.com/art/201703/535881.htmPATH: 可执行程序的查找路径查看当前环境变量:echo $PATH设置:方法一:export PATH=PATH:/XXX 但是退出当前终端后就失效方法二:修改 ~/.bashrc 或 ~/.bash_profile或系统级别的/etc/profile在其中添加例如export PATH=/opt/ActivePython/bin:$PATHsource .bashrc (Source命令

2021-02-05 16:30:04 365

转载 HTTP与 HTTPS相关名词扫盲(面试)

文章目录http协议http之请求请求行http协议的响应响应行响应头响应主体HTTPS密码学基础对称加密非对称加密http协议http协议是建立在TCP/IP协议之上应用层协议,默认端口为80,8080http之请求http协议的报文传输的是ASCII码,在TCP/IP协议之上,主要主要分为三部分:请求行、请求头、请求体请求行第一行,包含三个信息:请求方式,url,http协议版本GET 请求GET /books/?sex=man&name=Professional HTTP/1.

2021-02-03 19:49:57 541

原创 TCP三次握手、四次挥手(面试)

TCP三次握手第一次握手:客户端发送第一个包,其中SYN标志位为1, ACK=0,发送顺序号sequence=X(随机int)。客户端进入SYN发送状态,等待服务器确认。第二次握手:服务器收到这个包后发送第二个包,其中包SYN、ACK标志位为1,发送顺序号seq=Y(随机int),接收顺序号ACK=X+1,此时服务器进入SYN接收状态。第三次握手:客户端收到服务器传来的包后,向服务器发送第三个包,SYN=0, ACK=1,接收顺序号ACK = Y+1,发送顺序号seq=X+1。此包发送完毕,客户端

2021-01-31 15:58:05 295

转载 OSI七层网络模型 (面试重点)

综合图表下面的图表试图显示不同的TCP/IP和其他的协议在最初OSI模型中的位置:7 应用层 例如HTTP、SMTP、SNMP、FTP、Telnet、SIP、SSH、NFS、RTSP、XMPP、Whois、ENRP6 表示层 例如XDR、ASN.1、SMB、AFP、NCP5 会话层 例如ASAP、TLS、SSH、ISO 8327 / CCITT X.225、RPC、NetBIOS、ASP、Winsock、BSD sockets4 传输层 例如TCP、

2021-01-31 12:05:48 2868

原创 树莓派3B + Pi摄像头+mjpg-streamer操作步骤

步骤1:sudo apt-get install libjpeg8-dev #JPEG支持库sudo apt-get install imagemagicksudo apt-get install libv4l-dev #4l是小写"L"sudo apt-get install cmake #下载编译工具步骤2:sudo apt-get install gitgit clone https://github.com/jacksonliam/mjpg-streamer.gitcd

2021-01-30 18:36:59 195

原创 网络编程1、概念

IPC的几种方式:管道、消息队列、共享内存、信号和信号量。它们都是基于内核来工作的,只能让本机上的进程之间通讯,无法做到多机通讯。多机通讯就是电脑和电脑之间,或者手机和电脑之前的通讯。想要做到多机通讯就要用到网络通讯。IP地址:设备在网络中的地址,而且只有一个端口号:网络服务的端口,起到区分服务的作用​ ...

2021-01-27 19:03:16 93

原创 线程学习之互斥锁

互斥锁  当一个进程中存在两个及以上(一个进程本来就有一个线程)的线程时,线程间会互相争夺共享资源,导致单个线程中的执行秩序会被打乱。所以需要用到互斥量来进行秩序控制,保证单个线程中的程序先执行完毕。  所以互斥锁的作用就是使上锁与解锁之间的代码完整的、不受别的线程“打扰”的执行完。而另一个线程必须等到这个锁解开了,才能执行自己的代码。注意互斥锁不能控制多线程的执行顺序,也就是我们加了锁之后,并不知道先执行那个线程.相关API创建互斥锁pthread_mutex_init();函数原型; int

2021-01-27 19:03:01 1571

原创 函数指针与指针函数

函数指针定义:  函数名表示存储空间的首地址,存放着函数首地址的指针变量,简称函数指针。定义方式:  函数返回值类型 (* 指针变量名) (函数参数列表);例子 int(*p)(int, int);使用struct humanlife{ char name[6]; char sex[6]; void (*pborn)(); void (*pgrew)(); void (*pchasedream)

2021-01-16 12:45:22 123

原创 stm32 USART—串口通讯

当下列这些标志位条件成立时,都是置1

2021-01-14 10:11:23 383

原创 SYStick定时器编写延迟函数

SysTick—系统定时器SysTick—系统定时器有 4 个寄存器,简要介绍如下。在使用 SysTick 产生定时的时候,只需要配置前三个寄存器,最后一个校准寄存器不需要使用。SysTick 寄存器汇总寄存器名称寄存器描述CTRLSysTick 控制及状态寄存器LOADSysTick 重装载数值寄存器VALSysTick 当前数值寄存器CALIBSysTick 校准数值寄存器(不常用到)SysTick 控制及状态寄存器位段名称类型

2021-01-12 12:53:22 1088

原创 STM32配置外部中断

中断概括STM32 中断非常强大,每个外设都可以产生中断,内核水平上搭载了一个异常响应系统, 分为:系统异常和外部中断。NVICNVIC相当于一个中断总开关,总开关打开,相应的中断才能使用。在讲如何配置中断优先级之前,我们需要先了解下 NVIC。 NVIC 是嵌套向量中断控制器,控制着整个芯片中断相关的功能,是内核里面的一个外设。代码 17-1 NVIC 结构体定义,来自固件库头文件: core_cm3.h1 typedef struct {2 __IO uint32_t ISER[8];

2021-01-11 11:02:40 386

原创 使用HSE配置系统时钟

配置时钟顺序需要按照时钟树的顺序来配置。  我们使用STM32时基本都是使用 HSE(外部高速时钟),然后 HSE 经过 PLL 倍频之后作为系统时钟。通常的配置是:HSE=8M,PLL 的倍频因子为:9,PLL时钟就设置成:72M,选择PLLCLK为系统统时钟源;则SYSCLK = PLLCLK8M * 9 = 72M。编写代码步骤1. 复位时钟固件库:RCC_DeInit();  在系统启动时已经将时钟配置好了是开启(enable)的状态,有些时钟寄存器在enable的情况下是不能配置的,所

2021-01-09 22:03:27 2113

原创 使用stm32固件库点亮LED

文章目录创建固件库模板工程实现点亮LED准备工作:编写代码代码解释:创建固件库模板工程首先在此下载固件库文件:固件库在文件夹创建如下几个文件夹 将固件库中的libraries文件导入Lib文件夹中最后模板文件夹的各个文件如下所示Lib文件夹USER文件夹在PROJEECT文件夹中建立新的工程文件。并在工程中建立如下几个文件夹  START UP文件下包含32的启动代码,根据闪存大小的不同,选取的文件也不同。64k—128k的选 结尾为 _md的文件。FW-lib中包含的是固件库中的

2021-01-07 20:04:23 671

原创 linux驱动学习之对树莓派IO操作代码编写

linux地址的概念地址总线:是由CPU 或有DMA 能力的单元,用来沟通这些单元想要存取(读取/写入)电脑内存元件/地方的实体位址。一个 16位元 宽度的位址总线到达 2 的 16 次方 = 65536 = 64 KB 的内存位址;但现在很多计算机内存已经大于4G(windows XP x32位系统最大只能识别3.29G,所以要使用4G以上大内存就要用windows x64位系统)。物理地址:是指处理器芯片发出,来进行地址空间寻址的地址,它与处理器地址引脚上发出的电信号相对应。虚拟地址:程序所操作地

2021-01-01 19:16:02 532 1

原创 驱动学习之代码编写

驱动框架 使用static是为了防止名字重复,让其只作用于当前文件。内核代码量巨大很容易出现重复。#include <linux/fs.h> //file_operations声明#include <linux/module.h> //module_init module_exit声明#include <linux/init.h> //__init __exit 宏定义声明#include <linux/device.h>

2020-12-31 11:04:49 334

原创 驱动学习之概念

文章目录学习的目的Linux设备驱动链表的作用:用户调用驱动的运行机制学习的目的   学习驱动的目的是为了以后,换了块板子,没有相应的wiringPi库调用,你也可以通过编写驱动来实现一些相应的功能,说白了学习驱动就是为了实现 “wiringPi库”。Linux设备 linux一切皆文件   Linux的设备管理是和文件系统紧密结合的,各种设备都以文件的形式存放在/dev目录下,称为设备文件。应用程序可以打开、关闭和读写这些设备文件,完成对设备的操作,就像操作普通的数据文件一样。为了管理这些设

2020-12-30 21:00:27 196

原创 Linux内核框架的粗略认知

文章目录内核的作用Linux内核的任务:Linux系统层次结构用户(或应用程序)空间内核空间内核空间的层次系统调用接口内核代码**体系结构的代码**内核中的子系统(1)系统调用接口(2)进程管理(3)内存管理(4)虚拟文件系统(5)网络堆栈(6)设备驱动程序内核的作用  是将应用层序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址。Linux内核的任务:1.从技术层面讲,内核是硬件与软件之间的一个中间层。作用是将应用层序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和

2020-12-29 18:32:48 164

原创 十一、linux系统文件认知

文章目录1. 什么是文件系统?2.FHS3. 文件系统(文件管理系统的方法)的种类有哪些?4. 什么是分区?虚拟文件系统 Virtual File Systems1. 什么是文件系统?  Linux文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux 用户和程序看到的文件、目录、软连接及文件保护信息等都存储在其中。  以上说的方法:就是文件管理系统(程序),简称文件系统2.FHS  Filesystem Hierarchy Standard(文件系统层

2020-12-29 17:15:46 99

原创 十、树莓派Linux源码配置及编译

文章目录配置目的及准备工作2.交叉编译链的获取3.内核源码的获取配置编译环境变量配置内核(config)的方式编译配置目的及准备工作   配置、编译内核的的目的是为了驱动代码的编写而驱动代码的编译需要一个提前编译好的内核,编译内核就必须配置。配置的最终目标会生成 .config文件,该文件指导Makefile去把有用东西组织成内核。注意:  树莓派里安装的系统镜像版本要和kernel代码对应。因为树莓派系统是在不断开发和升级的,如果你的树莓派使用的是某个时间的系统镜像,那么最好也使用当时的kern

2020-12-26 19:33:21 1083

空空如也

空空如也

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

TA关注的人

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