自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ESP32 WSL环境搭建

ESP环境搭建

2024-06-02 23:30:09 465

原创 STM32使用滴答定时器实现delayms

在STM32上使用SysTick实现jiffies(时间戳)并且实现delay_ms。注意需要添加 SysTick_CTRL_TICKINT_Msk。并且设置LL_Init1msTick(64000000);也可以调用LL_SYSTICK_EnableIT。也可以用GPIO控制,使用示波器进行查看。由于时钟树配置64M SYS TICK。这样才会触发倒计时完毕进入中断。每1000MS实现一次打印。转化成MS 为 1MS。

2024-03-24 23:33:03 583

原创 利用smap进行内存泄漏分析

smaps文件是Linux的proc文件系统提供的查看系统下运行进程内存使用情况的方法,Linux给每个进程都提供了一个这样的文件,学会查看并分析smaps文件有助于定位和解决诸如内存泄漏、性能瓶颈等内存资源相关问题。发现Size,Rss,Pss ,Private_Dirty,Referenced, Anonymous字段大小一直持续增长。:驻留内存大小,是进程当前实际占用的物理内存大小,包括进程独自占用的物理内存、和其他进程共享的内存。:当前能够被引用到的内存,以及当前可达的内存。

2024-03-03 12:21:36 679

原创 文件系统制作

Linux文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux 用户和程序看到的文件、目录、软连接及文件保护信息等都存储在其中。

2024-03-02 19:55:30 851

原创 Completion 机制

Completion是Linux内核的一种同步机制: 信号量Completion 机制是 Linux 内核中用于处理异步操作完成的机制。它通常用于等待某个事件、任务或操作的完成,并且能够在事件完成后通知等待的线程或者程序。 结构体,提供了一个等待队列和一组相关的函数,允许一个线程等待某个条件的发生。#include <linux/completion.h>struct completion test_completion;使用init_completion 对completion对象进行初始化例子:等

2024-03-01 23:56:46 848

原创 wpa_supplicant交叉编译

export PKG_CONFIG_PATH=/mnt/f/Project/Linux/Study/wpa_supplicant-2.10/wpa_supplicant/install【替换成你的路径】https://github.com/thom311/libnl/releases/download/libnl3_5_0/libnl-3.5.0.tar.gz 或。wpa_supplicant官网:http://w1.fi/wpa_supplicant/出现没有 if_macsec.h头文件。

2024-03-01 23:35:08 963

原创 imx6ull 8723BS WIFI驱动移植

添加驱动到 linux/drivers/net/wireless 目录下。需要将驱动源码中的rtl8723bs_nic.bin 放置到。将WIFI 插到 SD卡槽上,由于接口与SD一致,直接使用。使用udhcpc 向网关申请IP地址 成功既可证明网络正常。/lib/firmware/rtlwifi/ 的位置上。修改Kconfig 以及 Makefile 加入如下。如果出现accquire FW from file。ping www.baidu.com 基础验证网速。有wlan0 网卡OK。

2024-03-01 23:20:30 693

原创 君正电机驱动代码解析

SPEED, STOP, MOVE, GET_STATUS, GO_BACK, CRUISE调用接口。在jz_timer_interrupt中检测到state为 stop下 调用。发送信号给调用motor_ops_stop的进程,唤醒,表示已经停止转动。step_8为节拍表,A-AB-B-BC-C-CD-D-DA-A。A—AB—B–BC—C—CD—D—DA,再次从头循环。调用motor_move_step。驱动 5V/500mA 继电器。驱动 5V/500mA 电磁阀。采用 MOS 工艺设计功率管。

2024-03-01 17:35:54 856

原创 SPI总线协议

通过将 QUADSPI_CCR 寄存器的 IMODE/ADMODE/ABMODE/DMODE 字段设置为 11,可对不同的命令阶段分别进行配置,以使用四线 SPI 模式。通过将( QUADSPI_CCR 中的) IMODE/ADMODE/ABMODE/DMODE 字段设置为 01,可对不同的命令阶段分别进行配置,以使用此单个位模式。在每个已配置为四线模式的阶段中, IO0/IO1/IO2/IO3 在数据阶段进行读取操作时均处于高阻态(输入),在其他情况下为输出。

2024-02-29 10:16:47 1368

原创 IIC通信协议

IIC 集成电路总线,多用于主控制器和从器件间的主从通信,在小数据量场景下使用,传输距离短,任意时刻只能有一个主机。发送器每发送一个字节(8bit),就在第 9个时钟脉冲期间释放数据线,由接收器反馈一个应答信号。主机检测到错误时,可以发送一个NACK信号,选择重试或终止信号。时钟线SCL为高电平期间,数据线SDA由高电平向低电平变化。时钟线SCL为高电平期间,数据线SDA由低电平向高电平变化。当时钟信号为高电平时,数据线上的数据必须稳定。100KHZ 以及400KHZ。

2024-02-28 18:32:21 358

原创 TCP/UDP基础知识

因为TCP通信的时候,双方发送和接收的速度不一定是相等的,如果发送方速度太快,接收方处理不过来,会将数据放在接收缓存区,但是如果缓存区满了,发送方仍然在发送,接收方只好丢失新的数据包。流量控制和拥塞控制的区别:流量控制主要是根据接收方的处理速度和要求来控制发送方的滑动窗口,避免接收方缓存溢出。如何实现流量控制:通过滑动窗口实现流量控制,接收方返回ACK时包含一个窗口字段,表示当前接收方能接收的窗口大小,以次控制发送方的发送滑动窗口大小。接收方的窗口分为三个部分:已接收已确认、等待接收、不可接收部分。

2024-02-27 13:13:10 1945

原创 c++模板

尖括号中的typename是定义形参的关键字,用来说明其后的形参名为类型 参数,(模板形参)。数据的类型也可以通过参数来传递,在函数定义时可以不指明具体的数据类型,当函数调用时,编译器根据传入的实参自动推断数据类型。数据的值可以通过函数参数传递,在函数定义时数据的值是未知的,只有等到函数调用 时接收了实参才能确定其值。——这就是值的参数化。程序设计中经常会用到一些程序实体:它们的实现和所完成的功能基本相同,不同的仅 仅是所涉及的数据类型不同。值和类型是数据的两个主要特征,它们在C++中都可以被参数化。

2024-02-26 11:28:26 142

原创 C++动态内存&智能指针

借助 weak_ptr 类型指针可以获取 shared_ptr 指针的一些状态信息,比如有多少指向相同的 shared_ptr 指针、通过expired()判断shared_ptr 指针指向的堆内存是否已经被释放等等,还可以解决shared_ptr 循环引用的问题。share_ptr虽然已经很好用了,但是有一点share_ptr智能指针还是有内存泄露的情况,当两个对象相互使用一个shared_ptr成员变量指向对方,会造成循环引用,使引用计数失效,从而导致内存泄漏。这时,就需要配合使用weak_ptr。

2024-02-26 00:21:35 737 1

原创 c++类基础知识点

类的成员函数是函数的一种,它的用法和作用和一般函数基本上是一样的,它也有返回值和函数类型。它与一般函数的区别只是:它是属于一个类的成员,出现在类体中。它可以被指定为private(私有的),public(公用的)或protected(受保护的)。在使用类成员函数的时候,要注意调用它的权限(即,它能否被调用)以及它的作用域(函数能使用什么范围中的数据和函数)。例如,私有的成员函数只能被本类中的其他成员函数所调用,而不能被类外调用。

2024-02-25 16:03:22 978

原创 RTP协议

如果使用 RTP 包荷载视频帧数据,由于视频帧数据较大,可能需要多个 RTP 包承载一个视频帧,而音频帧一般较小,一般只用一个 RTP 包也可以承载。MTAP-24的设计目的是在单个RTP包中传输多个NALU,这些NALU具有不同的时间戳,但属于相近的时间点。通过使用24位位移字段,MTAP-24可以支持更大的时间戳差异,适用于需要更高精度时间戳的场景。MTAP-16的设计目的是在单个RTP包中传输多个NALU,这些NALU具有不同的时间戳,但属于相近的时间点。Type:(5Bit) RTP载荷类型。

2024-02-24 23:56:27 2755

原创 流媒体TS协议

ts 层的内容是通过 PID 值来标识的,主要内容包括:PAT 表、PMT 表、⾳频流、视频流。PAT 表的和 PMT 表需要定期插⼊ ts 流,因为⽤户随时可能加⼊ ts 流,这个间隔⽐较⼩,通常每隔⼏个视频帧就要加⼊ PAT和 PMT。首先解析PAT包,获取PID字段,其中PAT的PID字段固定为0x0, 在PAT中包含了各个PMT的PID,解析即可获得视频流或者音频流的PID,并且查找其PMT编号, 再继续收包获取对应想要的PMT流,即可找到对应媒体流的PID,从而收取数据包PES。

2024-02-22 22:53:38 1016 1

原创 MQTT协议

QoS1 代表,Sender 发送的一条消息,Receiver 至少能收到一次,也就是说 Sender 向 Receiver 发送消息,如果发送失败,会继续重试,直到 Receiver 收到消息为止,但是因为重传的原因,Receiver 有可能会收到重复的消息;在 MQTT 中,存在很多长度不确定的字段,例如 PUBLISH 报文中的 Payload 部分就用来承载实际的应用消息内容,而应用消息的长度显然是不固定的。每次客户端连接到代理时,代理都会创建一个新的会话,没有任何之前的订阅状态。

2024-02-22 11:38:52 1093 1

原创 Linux性能分析

perf 是一款性能分析工具,是Linux系统提供的性能分析工具集,包含多种子工具,能够监测多种硬件及软件性能指标,包括cpu、内存、io等,这些可监测指标称为event工作原理: 利用事件采样原理,基于性能事件, 如软件事件和tracepoint事件 进行采样perf的应用场景:系统级性能优化,包括性能剖析和代码优化。找出性能瓶颈和热点代码,并进行相应的调整。

2024-02-21 23:00:52 2714

原创 oops分析

Oops如何产生的解释如下:由于处理器使用的地址几乎都是虚拟地址,这些地址通过一个被称为“页表”的结构被映射为物理地址。epc为发生错误时候的PC值,对应为ffffffe0002cf05e 查询vmlinux以及其他程序可知,该段为linux内核elf档案加载地址,反汇编可以查到对应为refcount_inc函数。Linux内核在发生kernel panic时会打印出Oops信息,把目前的寄存器状态、堆栈内容、以及完整的Call trace都show给我们看,这样就可以帮助我们定位错误。

2024-02-21 19:05:26 461

原创 设备驱动加载

mdev是busybox提供的一个工具,在嵌入式系统中,相当于简化版的udev,作用是:在系统启动、热插拔和动态加载驱动程序时,自动创建设备节点。文件系统中的/dev目录下的设备节点都是由mdev创建的。在加载驱动过程中,根据驱动程序,在/dev下自动创建设备节点。在系统启动时,通过执行“mdev -s”扫描/sys/class和/sys/block,在目录中查找dev文件。

2024-02-21 12:27:14 289

原创 HTTP超文本链接

由请求报文和响应报文组成。

2024-02-20 23:01:25 365 1

原创 TCP四次挥手

TCP四次挥手

2024-02-20 19:36:06 623 1

原创 TCP为什么需要三次握手

为何需要TCP三次握手

2024-02-20 17:43:29 200 1

Python剪映自动K帧脚本,支持画面缩放和位置移动

剪映自动K帧代码是一款专为剪映软件设计的Python脚本自动化工具。它能够帮助用户全自动地添加关键帧,并进行X/Y轴移动以及XY缩放1.5倍的功能。无需手动调整,即可实现精确的动画效果,极大地提高了视频编辑的效率和便捷性。 使用方式python --path=2月25日 等待修改完毕,自动在剪映草稿中添加对应关键帧

2024-02-25

空空如也

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

TA关注的人

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