- 博客(62)
- 问答 (2)
- 收藏
- 关注
原创 GB28181协议简介以及学习GB28181协议所涉及的名词汇总(入门篇)
GB28181协议简介以及学习GB28181协议所涉及的名词汇总(入门篇) 近年来,国内视频监控应用发展迅猛,系统接入规模不断扩大,涌现了大量平台提供商,平台提供商的接入协议各不相同,终端制造商需要给每款终端维护提供各种不同平台的软件版本,造成了极大的资源浪费。各地视频大规模建设后,省级、国家级集中调阅,对重特大事件通过视频掌握现场并进行指挥调度的需求逐步涌现,然而不同平台间缺乏统一的互通协议。在这样的产业背景下,基于终端标准化、平台互联互通的需求,GB/T28181应运而生。
2023-05-05 11:18:54
11543
1
原创 什么是C语言,C语言包含什么,C语言基础讲解
C语言是一门广泛应用于系统编程、嵌入式开发、科学计算等领域的编程语言,具有高效、灵活、可移植等特点。C语言的基础概念包括变量、数据类型、运算符、流程控制、函数、文件操作、预处理器、指针等,熟练掌握这些概念对于学好C语言非常重要。在学习C语言时,可以通过阅读相关书籍、视频教程、实践编程等方式提高自己的编程水平。同时也要注意规范编程风格,避免出现一些常见的错误,例如数组越界、内存泄漏、空指针访问等。总的来说,C语言是一门非常重要的编程语言,在计算机科学领域发挥着巨大的作用。
2023-02-23 14:03:49
7184
原创 ADC系统记录
本文解析了电信号采集系统中的核心术语,包括高频/低频/工频信号、行波、ADC转换器及其相关参数(偏置、阈值、采样)、波形处理、RMS均方根计算、RAM存储以及多通道ADC应用。这些概念共同构成了MCU(如STM32)安全准确采集模拟信号并进行数据分析的技术基础。文章通过电力监测实例(如50Hz工频采样、电压异常判断、行波故障检测)说明各要素的协同工作机制,并提供了通俗易懂的名词对照表,帮助读者快速理解专业术语在实际系统中的应用价值。
2026-01-14 16:10:46
694
原创 Git 中 pull.rebase = true 的作用与设置方法详解
Git中pull.rebase=true的作用是将git pull默认的merge操作改为rebase,使提交历史保持线性整洁。设置方法包括:1)当前仓库设置:git config pull.rebase true;2)全局设置:git config --global pull.rebase true。适合需要干净历史的开发流程,但要注意避免对已push的commit进行rebase。验证设置可用git config pull.rebase查看。该配置能避免多余的merge commit,使版本历史更清晰。
2026-01-08 13:16:08
341
原创 DMA1和DMA2是什么?DMA总线与Dcode总线有区别?SDIO又是干嘛的,system干嘛的?总线矩阵干嘛的?
本文系统解析了STM32芯片的总线架构与关键组件。主要内容包括:1. DMA1与DMA2控制器的区别,DMA2专用于高速外设(SDIO/ADC);2. DMA总线与DCode总线的功能差异,前者用于数据搬运,后者用于CPU访问Flash;3. SDIO接口的高速特性及其与DMA2的配合使用;4. System总线作为CPU访问RAM和外设的主要通道;5. 总线矩阵的核心作用,实现CPU、DMA和外设的并行访问。这些组件共同构成了STM32高效的数据处理架构,特别是总线矩阵设计显著提升了F4系列的性能。
2026-01-08 10:42:25
1007
原创 STM32芯片简介,以及STM32的存储器映射是什么?
本文介绍了STM32微控制器中的寄存器概念和存储器映射机制。寄存器是CPU直接访问的存储单元,STM32芯片由Cortex-M3内核和片上外设组成,通过总线连接。存储器映射将外设、Flash、SRAM等资源统一编址,CPU通过读写特定地址来控制外设。以点亮LED为例,必须开启GPIO时钟并设置为输出模式,可通过直接操作地址、标准库或HAL库三种方式实现。存储器映射是STM32控制外设的核心机制,理解这一概念对嵌入式开发至关重要。
2026-01-08 10:12:48
713
原创 Flash 是什么?SRAM 是什么?它们的作用、特点、区别、在 STM32 中如何使用?
摘要:Flash是STM32中的非易失性存储器,用于存储程序代码、常量和配置数据,具有断电不丢失但写入需先擦除的特点。SRAM是易失性存储器,用于程序运行时存放变量、堆栈等临时数据,读写速度快但断电即丢失。STM32F439ZIY6S芯片包含2MB Flash和256KB SRAM。Flash通过烧录工具自动写入,SRAM由程序自动分配使用。关键区别在于Flash适合长期存储(代码/配置),SRAM适合高速临时数据存取,两者在存储特性、速度和用途上形成互补。
2026-01-08 08:38:44
891
原创 STM32 MCU 的引脚分类
STM32微控制器引脚功能系统解析 摘要:本文系统梳理了STM32微控制器的引脚分类及功能。主要包括7类关键引脚:1)电源引脚(VDD/VSS、VDDA/VSSA等)为MCU及各模块供电;2)晶振IO提供精准时钟信号;3)下载/调试IO用于程序烧录与调试;4)BOOTIO决定启动模式;5)复位IO实现系统重启;6)最小系统由上述必要引脚构成;7)GPIO实现外设连接与控制。特别解析了模拟电源VDDA/VSSA对ADC/DAC精度的影响,以及晶振作为MCU"心跳"的关键作用。通过最小系统+
2026-01-07 19:13:03
813
原创 STM32 系列 MCU 常见接口类型
【STM32接口分类速查表】 📌数字通信接口 GPIO:通用I/O,用于按键/LED/复用功能 USART:串口通信(蓝牙/GPS) SPI/I2C:外设扩展(闪存/传感器) CAN:汽车/工业总线 USB/Ethernet:数据传输/网络通信 QSPI:高速闪存接口 📌模拟接口 ADC:传感器采样 DAC:模拟信号生成 运放/比较器:信号处理 📌定时器 基本/通用定时器:延时/PWM 高级定时器:电机控制 📌显示接口 LTDC:TFT驱动 DMA2D:图形加速 📌存储扩展 FMC/SDIO:外接
2026-01-07 18:43:31
452
转载 STM32型号及其命名规则
STM32是ST公司基于ARM Cortex-M内核设计的32位微控制器,主要分为高性能、主流、超低功耗和无线四大系列。其型号命名包含7个部分,分别表示产品类型、子系列、引脚数、存储容量等特性。例如STM32F103C8T6代表增强型通用MCU,48引脚、64KB Flash。不同系列在性能、功耗和外设方面各有侧重,如F1系列适合工业控制,L4系列专攻低功耗应用。STM32采用ARM授权内核,由半导体厂商生产完整芯片。
2026-01-07 18:17:36
521
转载 keil5安装教程(附安装)Keil C51超详细图文教程
摘要:本文详细介绍了Keil uVision5 C51版开发环境的安装步骤,包括下载解压、管理员身份运行、路径设置、许可证激活等关键环节,并提供了常见问题解决方法。特别强调了解压后需替换Uv4执行文件、管理员权限运行等易忽略的操作细节。针对开发中遇到的编译报错、烧录失败等问题给出了实用建议,帮助初学者快速掌握这款8051系列单片机的开发工具。安装包下载链接和密码已提供,适合单片机开发入门者参考学习。
2026-01-06 13:04:49
320
原创 tcp的三次握手与四次挥手简介
TCP连接建立与释放过程详解:三次握手确保可靠连接建立,通过SYN和ACK报文交换确认双方收发能力;四次挥手实现全双工连接的安全释放,允许服务端完成数据传输后再关闭。关键区别在于:建立连接时服务端可合并SYN+ACK(3次),而关闭连接需先确认FIN再发送自己的FIN(4次)。两次握手的缺陷在于可能导致服务端误判连接状态,三次握手则通过客户端最终确认避免了"半开连接"问题。该机制有效防止了SYN洪泛攻击,确保通信可靠性,类似电话通话前需双向确认的通话机制。
2025-09-15 16:31:13
1172
原创 exosip 与 osip 库源码下载及编译方法
本文介绍了开发SIP应用时常用的两个开源库osip2和exosip2的安装方法。osip2提供底层SIP协议支持,exosip2封装了更高层API。文章详细说明了从官方或国内镜像站下载源码的多种方式,包括使用GitHub镜像和多线程下载工具加速。重点讲解了编译安装顺序:先安装osip2,再安装exosip2,并配置动态库路径。最后提供了验证安装和解决国内下载慢的方案,帮助开发者快速搭建SIP开发环境。
2025-09-15 14:21:04
717
原创 Python 离线安装 PyInstaller 的完整步骤(以python3.11.4-amd64.exe为例)
本文介绍了在离线环境为Python 3.11.4(64位)安装PyInstaller的方法。首先在联网电脑使用pip download下载PyInstaller及其依赖包,将文件复制到离线机器后,通过pip install --no-index --find-links命令进行离线安装。文章详细说明了每个步骤的操作命令和参数含义,并提供了安装验证方法。该方法同样适用于其他Python包的离线安装,适用于生产服务器、内网开发机等无网络环境下的软件部署需求。
2025-07-17 17:29:52
2888
原创 Socket编程简介
Socket编程是网络通信的基础,它允许不同主机间通过网络进行数据传输。通过套接字(socket),应用程序可以发送和接收数据,实现客户端与服务器之间的通信。套接字(socket)是支持网络通信的API,它为不同进程之间提供了一种基于网络的通信机制。
2025-02-10 17:11:37
464
原创 GDB 简介及其基础用法:GDB是 Linux 环境下用于调试程序的强大工具,特别适用于 C 和 C++ 代码。它允许开发者在程序运行时进行调试,比如设置断点、单步执行、查看变量值等。
GDB 是 GNU 工具链中的调试器,用于分析程序运行时的状态,找出导致程序崩溃或行为异常的原因。查看代码执行流程设置断点来暂停程序检查和修改变量的值单步执行代码GDB 是一个功能强大的调试器,可以帮助你发现并修复程序中的错误。通过设置断点、单步执行、查看变量值等功能,你可以深入了解程序的执行过程并快速定位问题。
2024-09-12 10:10:18
1380
原创 Valgrind 是一款强大的程序分析工具,广泛用于检测内存错误、内存泄漏等问题
Valgrind 是一款强大的程序分析工具,广泛用于检测内存错误、内存泄漏等问题。它特别适合用于 C/C++ 项目的调试和优化工作。下面,我们将详细讲解 Valgrind 的基础用法,并重点说明常用的参数以及它们的作用。
2024-09-11 16:06:38
1476
原创 在Linux终端中如何对文件夹进行打包,以及如何对其进行解包;tar命令打包,解包常用法;
在Linux终端中如何对文件夹进行打包,以及如何对其进行解包;tar命令打包,解包常用法;
2024-08-01 15:19:15
664
1
原创 如何查看cpu架构,查看CPU架构的方法
查看CPU架构的方法有很多,具体取决于你使用的操作系统。以下是一些常见的操作系统中查看CPU架构的方法:
2024-07-27 17:24:36
6981
原创 临时更改服务器或Linux终端的IP及网关
在某些情况下,我们需要临时更改服务器或Linux终端的IP地址和网关,以便进行网络调试或临时连接网络。这种更改是临时的,不会影响到系统的永久配置。以下是具体步骤及示例命令,并展示了每一步的输出结果。本文介绍了如何通过临时更改服务器或Linux终端的IP地址及网关,使其能够连接到网络。这种方法确保了更改在重启后失效,避免永久更改导致的潜在问题。尝试ping一个外部地址,由于旧的默认网关还没有被移除,ping操作可能会失败。以上步骤在重启后会失效,因为更改是临时的。在更改网关之前,查看当前的路由表。
2024-07-27 17:08:15
1235
1
原创 linux终端中启用IPv4转发功能步骤如下:解决IPv4 forwarding is disabled. Networking will not work.告警步骤如下:
linux终端中启用IPv4转发功能步骤如下:解决IPv4 forwarding is disabled. Networking will not work.告警步骤如下:避免因 IPv4 转发问题导致的网络问题;
2024-07-27 16:10:15
1305
原创 RFC3984: RTP Payload Format for H.264 Video英文版官方文件,H.264视频的RTP荷载格式中文版;RFC3984中文版;
RFC3984: RTP Payload Format for H.264 Video英文版官方文件,H.264视频的RTP荷载格式中文版;RFC3984中文版;
2024-04-30 16:18:23
1254
原创 基于H.264的RTP打包中的组合封包以及分片封包结构图简介及抓包分析;FU-A FU-B STAP-A STAP-B简介;
基于H.264的RTP打包中的组合封包以及分片封包结构图简介及抓包分析; FU-A FU-B STAP-A STAP-B简介;
2024-04-29 14:33:11
2037
原创 RFC3984: RTP Payload Format for H.264 Video(中英文版)官方文献,RTP协议头格式分析详解;RTP载荷H264码流;
RFC3984: RTP Payload Format for H.264 Video(中英文版)官方文献,RTP协议头格式分析详解;RTP载荷H264码流;
2024-04-28 11:34:21
822
原创 linux终端下vi文本编辑器的基础使用方法
对于更复杂的操作和详细功能,建议查阅官方文档或在线教程以获取更全面的指导。如果文件存在,则打开该文件;如果不存在,则创建新文件。要从命令模式切换到插入模式,请按。要返回命令模式,请按下。
2024-03-21 13:34:08
905
2
原创 在C++11中利用for()循环遍历迭代器的同时,也可对容器内的数据进行更改
for (auto &&it : _groups) 是一个范围-based for 循环(也称为 foreach 循环),用于遍历容器 _groups 中的元素。这种循环语法在 C++11 及更高版本中引入,允许以一种更简洁的方式遍历容器中的元素。
2024-01-04 18:19:52
836
原创 auto关键字的含义以及常见用法,C++11中的关键字
关键字在这些例子中简化了代码,使得代码更加清晰,减少了手动指定变量类型的工作量,同时保持了类型安全。关键字在 C++ 中用于自动推断变量的类型,它可以让编译器根据初始化表达式的类型推导出变量的类型。提高了代码的灵活性和可读性,但过度使用时也可能降低代码的可读性,因此应在合适的场景使用。auto:这是 C++11 引入的关键字,用于自动推断变量的类型;
2024-01-04 08:44:52
1098
原创 通过WinFsp将linux目录映射到windows下,ubuntu开启SSH服务,并允许ROOT权限远程登录,WinFsp使用教程;
通过WinFsp将linux目录映射到windows下,ubuntu开启SSH服务,并允许ROOT权限远程登录,WinFsp使用教程;
2023-08-26 14:43:10
2879
原创 C语言设计实现十六进制与十进制数之间的相互转换
C语言设计实现十六进制与十进制数之间的相互转换一、十六进制数转为十进制数1.设计一个C语言代码实现十六进制数例如0xFEFF转为十进制二、十进制数转换为十六进制数1.设计一个C语言代码实现十进制转为16进制数并且16进制数的形式是0x0000000,这种形式:三、总结通过上述两个代码示例,研究进行假设不同的数据,进行进制转换过程;
2023-06-14 15:51:01
33078
3
原创 linux强制复制某文件夹到另一个文件夹下
要在Linux中强制复制一个文件夹到另一个文件夹下,你可以使用。选项来递归复制整个目录结构。命令将询问是否覆盖。为了强制覆盖而不进行任何提示,你可以使用。请注意,如果目标文件夹已经存在同名的文件夹,为实际的源文件夹和目标文件夹的路径。
2023-05-23 17:14:51
2791
转载 嵌入式工程师 面试题 集-C语言
答:预编译又称预处理 , 就是做些代码文本的替换工作。# 开头的指令,比如拷贝 #include 包含的文件代码,#define 宏定义的替换 , 条件编译等,就是为编译做的预备工作的阶段。C提供的预处理功能主要有以下三种:1 )宏定义。#define2 )文件包含。#include。该指令指示编译器将xxx.xxx文件的全部内容插入此处。3 )条件编译。何时需要预编译:1 )总是使用不经常改动的大型代码体。2 )程序由多个模块组成,所有模块使用一组标准的包含文件和相同的编译选项。
2023-05-20 16:53:39
2335
1
原创 在GB28181项目中,调用eXosip_register_send_register函数并且返回值为-2或者-3的含义是什么
身份验证失败:可能由于提供的用户名或密码错误或者没有提供正确的凭据,导致服务器拒绝注册请求。在某些情况下,服务器可能只允许一次注册,如果您尝试多次注册,服务器可能会拒绝请求。该返回值的含义是注册请求被拒绝,可能是由于身份验证失败或其他原因导致的。网络连接问题:可能是由于网络连接故障或配置错误,导致无法发送注册请求。注册信息格式错误:可能是由于注册请求中提供的信息格式不正确,或者缺少必需的字段,导致服务器拒绝请求。服务器故障:可能是由于服务器发生故障或配置错误导致的。参数中提供的注册信息可能存在问题。
2023-05-19 09:28:27
1157
原创 Thread线程学习(3) 了解Linux线程中的pthread_cancel()函数
Thread线程学习(3) 了解Linux线程中的pthread_cancel()函数;二、使用pthread_cancel()函数的基础示例;三、使用pthread_cancel()函数取消线程的进阶示例本文深入介绍了Linux线程的pthread_cancel()函数,该函数可以用于取消一个正在执行的线程。在使用pthread_cancel()函数时,需要合理设置线程的取消状态和取消类型,并确保线程在取消前完成必要的清理工作。
2023-05-17 14:39:07
2597
原创 Thread线程学习(2) Linux线程的创建、终止和回收
线程ID(Thread ID)是用于唯一标识一个线程的值。它是在操作系统层面上分配和管理的,用于区分不同的线程。线程ID的作用是多方面的:线程标识:通过线程ID,我们可以区分不同的线程。每个线程都被分配一个唯一的线程ID,使得我们能够对特定的线程进行操作,如创建、终止、回收等。线程控制:线程ID可以用于控制线程的执行。通过线程ID,我们可以向指定的线程发送信号、设置线程的优先级、挂起或恢复线程的执行等。线程同步:在线程同步的场景中,线程ID常用于标识要进行同步操作的线程。
2023-05-16 20:28:18
912
原创 Thread线程学习(1) 了解线程的基本知识——什么是线程
线程可以被看作是进程中的一个执行路径。在一个进程中,可以同时运行多个线程,每个线程独立执行自己的任务。与进程不同的是,线程之间共享进程的资源,如内存空间、文件句柄等。线程可以更高效地利用系统资源,并能够实现并发执行。通过本文的介绍,我们了解了线程的基础知识。线程是执行计算机程序的基本单元,它能够实现并发执行、高效利用系统资源,并在许多应用场景下发挥重要作用。理解线程对于学习并发编程是至关重要的。然而,多线程编程也带来了一些挑战,如数据竞争、死锁等问题。
2023-05-15 11:40:58
460
原创 将虚拟机的Ubuntu映射为windows的网络驱动器,将Linux下的目录映射到Windows目录下,以及如何解决映射盘更换登录用户名问题;
将虚拟机的Ubuntu映射为windows的网络驱动器,将Linux下的目录映射到Windows目录下,以及如何解决映射盘更换登录用户名问题;指定的网络文件夹目前是以其他用户名和密码进行映射的。要用其他用户名和密码进行连接,首先请与所有现有连接到该网络共享的映射断开连接。
2023-05-10 20:11:20
4509
1
原创 解决Ubuntu 20.04网络无法连接,没有网络图标
网络适配器处于NAT,并且电脑主机有网络,但是Ubuntu20.04中没有网络,或者初次启动Ubuntu20.04时是由网络的,但后来不知是何原因导致网络不通,无法用浏览器访问百度。缓存文件,重启网络后问题就解决了。如下图右上角有线网络图标消失了。右上角有线网络图标重新出现了。打开浏览器可以访问百度了。
2023-05-05 15:06:46
6368
9
PyInstaller 离线安装包以及相关依赖,以python3.11.4-amd64.exe为准
2025-07-17
在java中如何写方法签名
2023-02-07
如何用C语言实现计时重传(超时检测重传)机制:
2023-01-07
为代码添加注释讲解一下
2023-01-05
获取系统时间函数,输出错误,如何修改
2022-08-18
给std::vector这一句代码添加注释,可简要分析
2022-08-12
char xml_body[4096];是什么意思
2022-08-09
gb28181场景中,map用法分析,对其进行代码注释说明
2022-08-10
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅