自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 一个良好的开发流程需要哪些文档

1.规范:编码规范、方案模板、错误码规范、开源软件管理规范、分支/版本管理规范软件架构规范、接口设计规范、数据库开发规范特性开发流程规范、问题单修改流程规范2.接口协议接口手册、消息类型定义3.产品资料软硬件、功能、规格(包括性能、稳定性)4.开发文档特性(方案设计(接口、流程、需求分解)、测试用例、进度文档(日报/半周报/周报)、review文档、记录(流程串讲记录、变更记录、联调问题记录)、特性总结)问题单(典型问题分析/回溯(背景、现象、原因、对策、检证/rev

2021-08-25 16:38:37 525

原创 嵌入式设备的基本框架

1.消息机制1.1.功能:点对点、一对多订阅通知1.2.实现:socket分发、fd epoll、第三方2.进程间通信2.1.信号量+共享内存3.内存管理3.1.目的:防止内存碎片、可视化内存使用方便定位问题4.线程管理4.1.一个线程绑定到一个CPU上,提高效率4.2.一个线程处理一件事情,线程尽量少减少锁的使用,提高效率5.模块对外接口管理5.1.模块对外提供的接口,文档记录好,修改代码必须先更新文档6.基本结构(可参考)应用

2021-08-15 10:24:54 416

原创 音视频处理

1.转发1.1.接收客户端,建立连接,接收音视频1.2.发送服务端,监听端口,接受连接,发送音视频1.3.接收发送关联接收报文,转发出去1.4.直接转发、间接转发2.转封装2.1.解析、去包头,组包2.2.拆包,加包头3.资源管理3.1.本机音视频资源管理3.2.网络接入IPC、编码器音视频资源管理4.协议信令处理4.1.信令码流区分4.2.接收,处理,相应信令5.保活5.1.客户端保活5.2.音视频流保活...

2021-08-12 16:06:28 196

原创 音视频相关名词解释

名词 英语全拼 解释 YUV 无 一种颜色编码方法。Y(Luminance或Luma)是明亮度/灰阶值,UV(Chrominance或Chroma)是色度 RGB Red Green Blue 一种颜色标准。 ES Elementary Stream 基本码流。是由...

2021-08-09 17:49:14 212

原创 一些常用工具(个人长期更新)

代码管理:git,svn发送http报文:postman(windows),curl(linux)windows抓包,分析报文:wiresharklinux抓包:tcpdump企业内部沟通:钉钉,企业微信,全时,内网通编译任务管理:jenkins第三方库文件版本管理:conan容器管理:docker,k8s消息队列:kafka,zeroMQ数据库:sqlite3,大象视频流相关:ffmpeg,live555,SRS代码编辑,比较:source insight,VS

2021-07-05 20:11:46 69

原创 个人常用git命令整理

更新分支:git remote update origin -p回退本地修改:git checkout (目录 or 文件名)

2021-07-05 18:00:27 139

转载 (转)C++定义map类型的模板迭代器(undefined map)

C++定义map类型的模板迭代器template <typename K, typename V>using MapIterator_T = typename std::map<K, V>::iterator;使用下面这种形式会报错template <typename K, typename V>typename std::map<K, V>::iterator MapIterator_T; //error代码示例#include &l.

2021-07-05 17:54:31 305

原创 结构化数据协议解析 json、xml、tlv、protobuf

结构化数据是为了方便传输和存储:传输接收方能解析出发送方发送的数据,存储读取者可以解析出写入者写入的数据目前结构化数据协议主要有json,xml,tlv,protobuf等。对比分析如下:(todo:此处暂时缺个表)它们分别长这样:1. json:{ "student":[ { "name":"张三", "age":"30", "sex":"男" } { "name":"李四", "age":"25", "sex":"男" } { "name":"王五", "age":"27", "

2020-12-03 11:35:09 1340

原创 protobuf中增加map的处理

1.定义:xxx.proto文件,结构体中增加map字段2.写入调用mutable_xxx()接口,添加map字段:xxx[i] = xxxx;3.读取调用xxx()接口,获取map表,直接下标访问:xxx[i];

2020-11-24 13:39:42 6913 1

原创 码流分析

[cmd]tcpdump –s 0 –i eth0 host 206.xxx.xxx.xxx and port 554 –vv –w name.pcap -c 5000//监听网卡0,适用于大部分情况//监听206.xxx.xxx.xxx:554//只抓5000个报文,防止NVR oom/***************************** 以下分析tcp报文 ******************************/[wireshark]右键->follow tcp s..

2020-05-12 15:46:53 818

原创 sleep性能消耗大问题

首先介绍一下时间片,我的理解就是cpu执行一段程序,但是cpu有不能一直执行这一个程序,还需要执行其他程序,所以cpu会给这段程序分配一个执行时间,时间到了后去执行其他程序,这个执行的时间就是时间片。通过网上搜集资料,linux的时间片一般在5ms-800ms。再介绍一下sleep函数,sleep就是让这段程序休眠,释放cpu,让cpu去执行其他程序,休眠期间是不占用cpu的。等到休眠时间到了后会被唤醒,但这个时间一般是不太准确的,往往都会大于休眠时间,因为别的程序执行完了才会执行这个程序

2020-05-12 15:34:42 7598

原创 内联函数是否真的内联,和编译选项有关

对于inline函数,如果gcc的优化选项未开启的话(我们core中的优化选项是O0,等价于未开启),inline函数实际上是不生效的。未开启gcc优化的情况下,如果要使用inline函数,可以使用__attribute__ ((always_inline))属性。static inline void test_inline()static __attribute__ ((always_i...

2020-05-08 13:54:21 1040

原创 linux C语言 char 有符号 or 无符号?

标准中,没有特别说明char是有符号的 or 无符号的,那么,char的符号是如何确定的呢?char的符号是由CHAR_MIN宏来决定的:若CHAR_MIN < 0,则char等同singed char.若CHAR_MIN = 0,则char等同unsigned char.在x86、arm平台上,分别打印CHAR_MIN,结果如下:#include <stdio...

2020-04-16 09:37:49 1048

原创 windows路由配置

1.进入cmd2.查看路由:route print3.添加路由:route add 206.0.0.0 mask 255.0.0.0 192.168.1.1 -p4.删除路由:route delete 206.0.0.0

2020-04-16 09:26:00 955

原创 系统卡死无法挂载gdb问题定位

1.CPU满导致?mpstat -P ALL 2(每隔2s打印所有CPU的运行情况)10:35:40 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle10:35:42 all 0.25 0.00 0.38 0.25 0.63 0.25 ...

2020-04-13 10:46:54 445

转载 Linux中awk工具的使用(转)

原文链接:https://blog.csdn.net/qq_36119192/article/details/82982732目录awkawk的用法awk中字符的含义print打印字符匹配格式化输出举例awkawk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件...

2020-04-09 11:27:22 231

原创 重写系统函数(内存统计工具,系统资源统计工具)

重写系统函数,可用作内存统计、fd统计等效果:例如malloc函数,实际调用的是__wrap_malloc,__wrap_malloc中调用真实的分配内存函数__real_malloc,如果调用成功就添加统计信息到数据结构中。1.编译选项CFLAGS_miniBP-y +=-funwind-tablesLDFLAGS_miniBP-y += -Wl,-wrap,malloc -Wl,...

2020-04-03 15:47:18 376

原创 linux常用命令(长期收集整理)

*修改IPifconfig eth0 206.6.222.3 netmask 255.255.0.0ifconfig eth0 206.4.8.54 netmask 255.255.255.0*抓包tcpdump -s 0 -v -w 123.pcap host 206.6.222.2 and port 554 -c 2000

2020-04-01 14:54:59 94

原创 SVN常用命令

checkout代码:svn co http://10.220.3.241/UWARE_CODE/trunk/UWARE ./UWARE查看修改状态:svn st添加删除:svn del aa.txtsvn add *代码上库:svn ci -m $'Bug ID: IVSD00000\nDescription: 起流问题解决'更新到某个版本号:svn up -r...

2020-04-01 11:15:53 72

原创 设备网络问题netstat简单排查

netstat -an可查看:1.TCP连接状态2.收发包堆积如果收包堆积,则处理速度小于网卡收流sudu速度,达到收包最大缓存,会丢包如果发包堆积,则是发流速度大于对端可处理速度,达到收包最大缓存,会丢包TCP收发流缓存cat /proc/sys/net/core/rmem_maxcat /proc/sys/net/core/wmem_max...

2020-04-01 11:00:48 440

原创 TCP连接三次握手对端无响应处理

最近遇到问题,设备作为客户端向服务端发起TCP连接三次握手,结果服务端端口不通,导致客户端发送的SYN报文无响应,此时会发生什么事情呢?首先根据上面这个图来看,客户端发送SYN报文无响应,会停在SYN-SENT状态,使用netstat -an命令就可以看到。接下来就是重传SYN报文,等待三次握手超时释放了。何时超时,超时机制是怎样的呢?超时时间由重传超时时间(默认1秒钟(1*HZ)...

2019-08-23 15:00:35 4104

原创 知识梳理

1.整体框架2.开发流程,改bug流程3.代码管理4.工具操作 代码管理、代码查看编辑、linux服务器连接、代码比较、截图、邮件、文本编辑、抓包、播放器等5.C语言6.linux相关7.网络相关8.业务相关9.review10.编译11.工具检查12.版本管理13.调试相关暂时想到这么多,后续想到了再补充...

2019-07-17 17:05:18 81

原创 linux 反汇编相关

当遇到内核oops之类的问题,有明确的调用堆栈信息时,可使用反汇编来确定第1种方法:gdb disassemble对某个函数进行反汇编gdb xxx.kodisassemble /m func第2种方法:objdump直接用如下指令:objdump -l -x -d gcc_objdump > gcc_objdump.dmp(可以加/m)直接导出文件中所有函数的汇...

2019-07-16 20:28:24 225

转载 字符串比较函数不区分大小写(转)

strcmp() 用来比较字符串(区分大小写),其原型为: 定义函数 int strcmp(const char *s1, const char *s2); 头文件:#include <string.h> 返回值:若参数s1 和s2 字符串相同则返回0。s1 若大于s2 则返回大于0 的值。s1 若小于s2 则返回小于0 的值,字符串大小的比较是以...

2019-07-05 16:45:28 8512

原创 linux下GDB调试

1.需要有gdb文件,根据设备芯片不同使用相应的gdb,例如arm-hisiv200-linux-gdb,gdb等2.拷贝符号表到设备,例如core.sym3.ps查看线程,pstree -p XXX查看子线程,找到需要调试的线程4.gdb挂载线程:gdb -p 12365.导入符号表:symbol-file core.sym6.下断点,再continue,或者直接c7.操...

2019-07-03 17:18:14 393 1

原创 linux 内存屏障相关

linux系统,编译器或处理器会对代码进行优化,会导致同一CPU/线程上运行的代码的执行先后顺序发生改变,会导致某些前后强依赖关系的代码执行时发生oops。解决办法:增加内存屏障。这个可以确保内存屏障前的代码先于内存屏障后的代码执行到(同一个CPU/线程上)。所以内核中对于需要确保时序的代码,要加内存屏障去确保。函数:函数名称 功能 smp_mb() 适用于多处理器的内...

2019-06-27 18:58:24 144

转载 PS流的格式和解析总结(转)

针对H264 做如下PS 封装:每个IDR NALU 前一般都会包含SPS、PPS 等NALU,因此将SPS、PPS、IDR 的NALU 封装为一个PS 包,包括ps 头,然后加上PS system header,PS system map,PES header+h264 raw data。所以一个IDR NALU PS 包由外到内顺序是:PSheader| PS system header | ...

2019-05-17 10:42:00 724

转载 linux内核锁机制

原文地址:https://blog.csdn.net/zixiao217/article/details/77063332#内核锁的讨论:##为什么需要内核锁?  多核处理器下,会存在多个进程处于内核态的情况,而在内核态下,进程是可以访问所有内核数据的,因此要对共享数据进行保护,即互斥处理##有哪些内核锁机制?###(1)原子操作  atomic_t数据类型,atomic_inc(...

2019-05-15 13:53:45 330

转载 linux内核日志打印:printk和dmesg的用法

转自:https://blog.csdn.net/qq_29350001/article/details/52232128用于检测和控制内核环缓冲。程序用来助用户了解系统的启动信息Linux命令dmesg用来显示开机信息,kernel会将开机信息存储在ring buffer中开机信息保存在/var/log目录中名称为dmesg的文件里dmesg [ -c ] [ -n 级别 ] ...

2019-05-10 16:01:40 10823

原创 驱动cdev设备 文件操作符处理

https://blog.csdn.net/zqixiao_09/article/details/50839042

2019-05-10 15:32:42 109

原创 Linux串口或者TELNET下,每隔一定时间,输出信息

作用:定位概现问题时,收集证据,对比问题发生时的信息与正常时的信息。while true; do XXX(具体做的事情); echo; sleep 1(间隔时间长短根据情况而定); done 举几个栗子:每隔1s,查看10166端口连接的状态while true; do date; netstat -an | grep 10166; echo; sleep 1; done每...

2018-07-28 09:46:11 625

原创 内核错误码 --很重要

调用内核函数时经常会遇到错误码,直接查找下面即可:#define EPERM 1 /* Operation not permitted */#define ENOENT 2 /* No such file or directory */#define ESRCH 3 /* No such process */#d...

2018-06-19 14:53:07 4928

原创 第一篇博客

很久以前就决定要开始写博客,一直无从下手,任何事情做总比不做要强,本着先做再改进的原则,战战兢兢开始搞~~第一篇主要说一说为什么要写博客,要写一些什么,怎么去写。为什么要写博客,曾经看到知乎上一个问题:人是怎么废掉的。其中最高票的回答是只输入而不输出。指的是每天自己需要的时候就查阅,浏览信息,自己从来不输出资源。不想废掉,督促自己学习总结,这是原因之一。其二,自己从事IT行业也将近六年,回想起来有...

2018-06-02 14:34:18 112

空空如也

空空如也

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

TA关注的人

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