<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[BERLIN23的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/BERLIN23</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; BERLIN23]]></copyright><item><title><![CDATA[2020-08-24]]></title><link>https://blog.youkuaiyun.com/BERLIN23/article/details/108201731</link><guid>https://blog.youkuaiyun.com/BERLIN23/article/details/108201731</guid><author>BERLIN23</author><pubDate>Mon, 24 Aug 2020 16:17:35 +0800</pubDate><description><![CDATA[转载[https://blog.youkuaiyun.com/guotianqing/article/details/80044087]
1. 概述
  在多数unix系统中，当多个进程/线程同时编辑一个文件时，该文件的最后状态取决于最后一个写该文件的进程。
  对于有些应用程序，如数据库，各个进程需要保证它正在单独地写一个文件。这时就要用到文件锁。
  文件锁（也叫记录锁）的作用是，当一个进程读写文件的某部分时，其他进程就无法修改同一文件区域。
  能够实现文件锁的函数主要有2个：flock和fcntl。
  早期的]]></description><category></category></item><item><title><![CDATA[c++异常机制--学习笔记]]></title><link>https://blog.youkuaiyun.com/BERLIN23/article/details/107832112</link><guid>https://blog.youkuaiyun.com/BERLIN23/article/details/107832112</guid><author>BERLIN23</author><pubDate>Thu, 06 Aug 2020 09:49:16 +0800</pubDate><description><![CDATA[[ 转载 ]：https://www.cnblogs.com/hdk1993/p/4357541.html

1. 概述
  异常处理是C++ 的一项语言机制，用于在程序中处理异常事件。异常事件在C++中表示为异常对象。异常事件发生时，程序使用throw关键字抛出异常表达式，抛出点称为异常出现点，由操作系统为程序设置当前异常对象，然后执行程序的当前异常处理代码块，在包含了异常出现点的最内层的try块，依次匹配catch语句中的异常对象（只进行类型匹配，catch参数有时在catch语句中并不会使用到）。若.]]></description><category></category></item><item><title><![CDATA[C++中虚函数的作用和虚函数的工作原理]]></title><link>https://blog.youkuaiyun.com/BERLIN23/article/details/107632903</link><guid>https://blog.youkuaiyun.com/BERLIN23/article/details/107632903</guid><author>BERLIN23</author><pubDate>Tue, 28 Jul 2020 11:50:16 +0800</pubDate><description><![CDATA[【转载】https://www.cnblogs.com/zkfopen/p/11061414.html
1. C++中虚函数的作用和多态
虚函数： 实现类的多态性
关键字：虚函数；虚函数的作用；多态性；多态公有继承；动态联编
  C++中的虚函数的作用主要是实现了多态的机制。基类定义虚函数，子类可以重写该函数；在派生类中对基类定义的虚函数进行重写时，需要在派生类中声明该方法为虚方法。
  当子类重新定义了父类的虚函数后，当父类的指针指向子类对象的地址时，[即B b; A a = &amp;b;] 父类指针根]]></description><category></category></item><item><title><![CDATA[live555学习笔记之-GroupSock(NetAddress&NetAddressList&AddressPortLookupTable)]]></title><link>https://blog.youkuaiyun.com/BERLIN23/article/details/107485681</link><guid>https://blog.youkuaiyun.com/BERLIN23/article/details/107485681</guid><author>BERLIN23</author><pubDate>Tue, 21 Jul 2020 11:55:08 +0800</pubDate><description><![CDATA[live/groupsock/include/NetAddress.hh
1.概述
  group是组/群的意思，socket是网络接口的代名词了。这个部分很庞大，主要是与网络相关的。而live555的网络模块很多都涉及到组播的概念。
  使用Socket进行的网络连接，网络地址一般由地址(IP)和端口(port)组成。
live555中定义了一些数据类型，表明了目前所支持的网络地址类型。
typedef u_int32_t netAddressBits;
typedef u_int16_t portNum]]></description><category></category></item><item><title><![CDATA[live555四大基础组件学习笔记-处理程序handler类]]></title><link>https://blog.youkuaiyun.com/BERLIN23/article/details/107485658</link><guid>https://blog.youkuaiyun.com/BERLIN23/article/details/107485658</guid><author>BERLIN23</author><pubDate>Tue, 21 Jul 2020 11:53:54 +0800</pubDate><description><![CDATA[1.介绍
  处理程序相关类一共有三个，其没有派生继承关系，但是其有友元关系和使用关系。处理程序相关类主要是用于对相关的处理函数的指针和数据的包装，方便在DelayQueue相关类中的使用等。
先来总的说以下三个类的关系。
  HandlerDescriptor是一个节点类，而HandlerSet是一个链表类，链表节点就是HandlerDescriptor对象。HandlerIterator是一个迭代器类，其绑定一个HandlerSet对象。
  处理程序相关的三个类都定义在live555sourcecon]]></description><category></category></item><item><title><![CDATA[AVI格式--学习笔记]]></title><link>https://blog.youkuaiyun.com/BERLIN23/article/details/107345917</link><guid>https://blog.youkuaiyun.com/BERLIN23/article/details/107345917</guid><author>BERLIN23</author><pubDate>Tue, 14 Jul 2020 19:44:02 +0800</pubDate><description><![CDATA[1. 介绍
  AVI是音频视频交错(Audio Video Interleaved)的英文缩写，它是Microsoft公司开发的一种符合RIFF文件规范的数字音频与视频文件格式，原先用于Microsoft Video for Windows (简称VFW)环境，现在已被Windows 95/98、OS/2等多数操作系统直接支持。AVI格式允许视频和音频交错在一起同步播放，支持256色和RLE压缩，但AVI文件并未限定压缩标准，因此，AVI文件格式只是作为控制界面上的标准，不具有兼容性，用不同压缩算法生成的]]></description><category></category></item><item><title><![CDATA[const的作用--学习笔记]]></title><link>https://blog.youkuaiyun.com/BERLIN23/article/details/107323510</link><guid>https://blog.youkuaiyun.com/BERLIN23/article/details/107323510</guid><author>BERLIN23</author><pubDate>Mon, 13 Jul 2020 19:31:14 +0800</pubDate><description><![CDATA[1. const关键字的作用


欲阻止一个变量被改变，可使用const，在定义该const变量时，需先初始化，以后就没有机会改变他了；


对指针而言，可以指定指针本身为const，也可以指定指针所指的数据为const，或二者同时指定为const；


在一个函数声明中，const可以修饰形参表明他是一个输入参数，在函数内部不可以改变其值；


对于类的成员函数，有时候必须指定其为const类型，表明其是一个常函数，不能修改类的成员变量；


对于类的成员函数，有时候必须指定其返回值为const类型，以使]]></description><category></category></item><item><title><![CDATA[堆--学习笔记]]></title><link>https://blog.youkuaiyun.com/BERLIN23/article/details/107302305</link><guid>https://blog.youkuaiyun.com/BERLIN23/article/details/107302305</guid><author>BERLIN23</author><pubDate>Sun, 12 Jul 2020 17:31:05 +0800</pubDate><description><![CDATA[[ 转载 ]https://www.jianshu.com/p/c5f4255b8148

1.概念
  堆，是一种十分基础的数据结构，也是优先队列实现的最好方法，其本身的实现也挺简单的。废话不多说，我们直接来看堆的一些描述和特性。
1.1拓展概念

二叉树

  首先，堆其实就是一颗完全二叉树，在描述一颗二叉树的时候，我们完全可以使用类似链表的方式，一个数据域来储存数据，两个指针来指向其左右节点。但这样储存会导致空间的浪费，所以可以采用数组来储存二叉树。
  堆正是一种特殊的二叉树，完全二叉树，这样子的.]]></description><category></category></item><item><title><![CDATA[线程-学习笔记]]></title><link>https://blog.youkuaiyun.com/BERLIN23/article/details/107287599</link><guid>https://blog.youkuaiyun.com/BERLIN23/article/details/107287599</guid><author>BERLIN23</author><pubDate>Sat, 11 Jul 2020 17:08:24 +0800</pubDate><description><![CDATA[1.背景
  在传统的Unix模型中，当一个进程需要由另一个实体执行某件事时，该进程派生（fork）一个子进程，让子进程去进行处理。Unix下的大多数网络服务器程序都是这么编写的，即父进程接受连接，派生子进程，子进程处理与客户的交互。
  虽然这种模型很多年来使用得很好，但是fork时有一些问题：

fork是昂贵的。内存映像要从父进程拷贝到子进程，所有描述字要在子进程中复制等等。目前有的Unix实现使用一种叫做写时拷贝（copy－on－write）的技术，可避免父进程数据空间向子进程的拷贝。尽管有这种优化]]></description><category></category></item><item><title><![CDATA[RTP打包发送H264之封包详解]]></title><link>https://blog.youkuaiyun.com/BERLIN23/article/details/107186184</link><guid>https://blog.youkuaiyun.com/BERLIN23/article/details/107186184</guid><author>BERLIN23</author><pubDate>Tue, 07 Jul 2020 17:30:32 +0800</pubDate><description><![CDATA[1.网络抽象层单元类型（NALU）
NALU 头由一个字节组成, 它的语法如下:
  +---------------+
  |0|1|2|3|4|5|6|7|
  +-+-+-+-+-+-+-+-+
  |F|NRI|  Type   |
  +---------------+

F: 1 个比特.
forbidden_zero_bit. 在 H.264 规范中规定了这一位必须为 0.
NRI: 2 个比特.
nal_ref_idc. 取 00 ~ 11, 似乎指示这个 NALU 的重要性, 如 00 的]]></description><category></category></item><item><title><![CDATA[alsa声卡驱动之三：ASoC框架中的platform]]></title><link>https://blog.youkuaiyun.com/BERLIN23/article/details/79010939</link><guid>https://blog.youkuaiyun.com/BERLIN23/article/details/79010939</guid><author>BERLIN23</author><pubDate>Tue, 09 Jan 2018 11:22:51 +0800</pubDate><description><![CDATA[第一篇章中说过ASoC分为：Machine、Codec、Platform三个部分，其中Machine主要起到匹配Codec跟Platform，Codec主要是音频解码芯片的初始化配置跟一些相对应的控制，比如第二章节说的tlv320aic3x.c文件的内容。]]></description><category></category></item><item><title><![CDATA[alsa声卡驱动二：ASoC框架中的Codec]]></title><link>https://blog.youkuaiyun.com/BERLIN23/article/details/78962236</link><guid>https://blog.youkuaiyun.com/BERLIN23/article/details/78962236</guid><author>BERLIN23</author><pubDate>Wed, 03 Jan 2018 16:00:42 +0800</pubDate><description><![CDATA[Codec简介在移动设备中，Codec的作用可以归结为4种，分别是： 
对PCM等信号进行D/A转换，把数字的音频信号转换为模拟信号 
对Mic、Linein或者其他输入源的模拟信号进行A/D转换，把模拟的声音信号转变CPU能够处理的数字信号]]></description><category></category></item><item><title><![CDATA[alsa声卡驱动一：声卡的创建]]></title><link>https://blog.youkuaiyun.com/BERLIN23/article/details/78954370</link><guid>https://blog.youkuaiyun.com/BERLIN23/article/details/78954370</guid><author>BERLIN23</author><pubDate>Tue, 02 Jan 2018 18:15:19 +0800</pubDate><description><![CDATA[Alsa的声卡创建流程，以及在ASOC的框架下的实现。]]></description><category></category></item><item><title><![CDATA[i2c子系统学习总结]]></title><link>https://blog.youkuaiyun.com/BERLIN23/article/details/78844295</link><guid>https://blog.youkuaiyun.com/BERLIN23/article/details/78844295</guid><author>BERLIN23</author><pubDate>Wed, 20 Dec 2017 11:25:10 +0800</pubDate><description><![CDATA[linux，i2c子系统学习总结]]></description><category></category></item><item><title><![CDATA[alsa-lib和alsa-util安装编译及开发板移植]]></title><link>https://blog.youkuaiyun.com/BERLIN23/article/details/78818476</link><guid>https://blog.youkuaiyun.com/BERLIN23/article/details/78818476</guid><author>BERLIN23</author><pubDate>Sat, 16 Dec 2017 10:23:57 +0800</pubDate><description><![CDATA[最近想在自己的开发板上移植一个音频驱动，所以涉及到了音频测试方面，alsaproject提供了alsa-driver、alsa-lib以及alsa-utils。现在的内核基本都有 了alsa-driver，所以关于他的安装没有进行操作。一下主要总结一下alsa-lib和alsa-utils的安装移植。
先准备alsa-lib跟alsa-utils的安装包，我用的是alsa-lib-1.1.5跟als]]></description><category></category></item><item><title><![CDATA[自旋锁学习总结]]></title><link>https://blog.youkuaiyun.com/BERLIN23/article/details/53174051</link><guid>https://blog.youkuaiyun.com/BERLIN23/article/details/53174051</guid><author>BERLIN23</author><pubDate>Tue, 15 Nov 2016 17:53:42 +0800</pubDate><description><![CDATA[--为了获得一个自旋锁， 在某
CPU 上运行的代码需先执行一个原子操作，该操作测试并设置（
test-and-set） 某个内存变量，由于它是原子操作，所以在该操作完成之前其他执行单元不可能访问这个内存变量。如果测试结果表明锁已经空闲，则程序获得这个自旋锁并继续执行；如果测试结果表明锁仍被占用，程序将在一个小的循环内重复这个“ 测试并设置” 操作，即进行所谓的“ 自旋”，通俗地说就是“在原地]]></description><category></category></item><item><title><![CDATA[linux的原子操作学习总结]]></title><link>https://blog.youkuaiyun.com/BERLIN23/article/details/53173588</link><guid>https://blog.youkuaiyun.com/BERLIN23/article/details/53173588</guid><author>BERLIN23</author><pubDate>Tue, 15 Nov 2016 17:35:48 +0800</pubDate><description><![CDATA[原子操作学习总结]]></description><category></category></item><item><title><![CDATA[字符设备驱动学习总结]]></title><link>https://blog.youkuaiyun.com/BERLIN23/article/details/52954177</link><guid>https://blog.youkuaiyun.com/BERLIN23/article/details/52954177</guid><author>BERLIN23</author><pubDate>Fri, 28 Oct 2016 10:43:13 +0800</pubDate><description><![CDATA[从module_exit(l138_led_exit);中的函数l138_led_exit(void)来看字符设备驱动建立的过程


static int l138_led_exit(void)
{
unregister_chrdev_region(led_dev,count);
//删除主从设备号
cdev_del(&led_cdev);
//cdev设备删除
device_d]]></description><category></category></item><item><title><![CDATA[继电器电路设计]]></title><link>https://blog.youkuaiyun.com/BERLIN23/article/details/52859566</link><guid>https://blog.youkuaiyun.com/BERLIN23/article/details/52859566</guid><author>BERLIN23</author><pubDate>Wed, 19 Oct 2016 15:05:23 +0800</pubDate><description><![CDATA[继电器左边的电路：
1、三级管作为开关电路，b极高电平时，三极管导通，端点2接地。
注意：电平输入会有一个波动，或者上升的时间，在e极跟b极之间并联一个RC并联电路。（RC并联是减少高频阻抗，RC串联是滤去高频），不管RC串联还是并联，电容的作用都是一样的，电容的作用就是防止电压突变，吸收尖峰状态的过电压，串联的电阻起阻尼作用，电阻消耗过电压的能量，从而抑制电路的振荡。并联的电阻吸收电容的电能]]></description><category></category></item><item><title><![CDATA[光耦合器原理及作用]]></title><link>https://blog.youkuaiyun.com/BERLIN23/article/details/52858810</link><guid>https://blog.youkuaiyun.com/BERLIN23/article/details/52858810</guid><author>BERLIN23</author><pubDate>Wed, 19 Oct 2016 13:56:32 +0800</pubDate><description><![CDATA[光耦合器（optical coupler，英文缩写为OC）亦称光电隔离器，简称光耦。光耦合器以光为媒介传输电信号。它对输入、输出电信号有良好的隔离作用，所以，它在各种电路中得到广泛的应用。]]></description><category></category></item></channel></rss>