<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[技术无捷径，一步一脚印]]></title><description><![CDATA[所转载的文章仅用于学习，谢谢。]]></description><link>https://blog.youkuaiyun.com/tangcong29</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; tangcong29]]></copyright><item><title><![CDATA[2019 诸事大吉]]></title><link>https://blog.youkuaiyun.com/tangcong29/article/details/87260807</link><guid>https://blog.youkuaiyun.com/tangcong29/article/details/87260807</guid><author>tangcong29</author><pubDate>Thu, 14 Feb 2019 11:39:31 +0800</pubDate><description><![CDATA[2019关键词：高质量]]></description><category></category></item><item><title><![CDATA[Opensource License]]></title><link>https://blog.youkuaiyun.com/tangcong29/article/details/52087246</link><guid>https://blog.youkuaiyun.com/tangcong29/article/details/52087246</guid><author>tangcong29</author><pubDate>Mon, 01 Aug 2016 17:03:27 +0800</pubDate><description><![CDATA[开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别


以下是上述协议的简单介绍：
BSD开源协议
BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以”为所欲为”,可以自由的使用，修改源代码，也可以将修改后的代码作为开源或者专有软件再发布。

但”为所欲为”的前提当你发布使用了BSD协议的代码，或则以BSD协议代码为基础做二次开发自己的产品时，]]></description><category></category></item><item><title><![CDATA[alsa调用]]></title><link>https://blog.youkuaiyun.com/tangcong29/article/details/51296190</link><guid>https://blog.youkuaiyun.com/tangcong29/article/details/51296190</guid><author>tangcong29</author><pubDate>Mon, 02 May 2016 13:58:25 +0800</pubDate><description><![CDATA[ALSA打开数据流程 
    soc_pcm_open => cpu_dai->driver->ops->startup => platform->driver->ops->open => codec_dai->driver->ops->startup \
    => rtd->dai_link->ops->startup  
 
    ALSA的HW_param流程 
    s]]></description><category></category></item><item><title><![CDATA[堆排序]]></title><link>https://blog.youkuaiyun.com/tangcong29/article/details/51122575</link><guid>https://blog.youkuaiyun.com/tangcong29/article/details/51122575</guid><author>tangcong29</author><pubDate>Mon, 11 Apr 2016 16:08:50 +0800</pubDate><description><![CDATA[堆排序与快速排序，归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前，先讲解下什么是数据结构中的二叉堆。
二叉堆的定义
二叉堆是完全二叉树或者是近似完全二叉树。
二叉堆满足二个特性：
1．父结点的键值总是大于或等于（小于或等于）任何一个子节点的键值。
2．每个结点的左子树和右子树都是一个二叉堆（都是最大堆或最小堆）。
当父结点的键值总是大于或等于任何一个子节]]></description><category></category></item><item><title><![CDATA[数据结构中常见的树（BST二叉搜索树、AVL平衡二叉树、RBT红黑树、B-树、B+树、B*树）]]></title><link>https://blog.youkuaiyun.com/tangcong29/article/details/51120112</link><guid>https://blog.youkuaiyun.com/tangcong29/article/details/51120112</guid><author>tangcong29</author><pubDate>Mon, 11 Apr 2016 11:13:56 +0800</pubDate><description><![CDATA[ST树

       即二叉搜索树：

       1.所有非叶子结点至多拥有两个儿子（Left和Right）；

       2.所有结点存储一个关键字；

       3.非叶子结点的左指针指向小于其关键字的子树，右指针指向大于其关键字的子树；

       如：

       



       
BST树的搜索，从根结点开始，如果查询的关键字]]></description><category></category></item><item><title><![CDATA[linux awk命令详解]]></title><link>https://blog.youkuaiyun.com/tangcong29/article/details/51075467</link><guid>https://blog.youkuaiyun.com/tangcong29/article/details/51075467</guid><author>tangcong29</author><pubDate>Wed, 06 Apr 2016 15:43:38 +0800</pubDate><description><![CDATA[简介
awk是一个强大的文本分析工具，相对于grep的查找，sed的编辑，awk在其对数据分析并生成报告时，显得尤为强大。简单来说awk就是把文件逐行的读入，以空格为默认分隔符将每行切片，切开的部分再进行各种分析处理。
awk有3个不同版本: awk、nawk和gawk，未作特别说明，一般指gawk，gawk 是 AWK 的 GNU 版本。
awk其名称得自于它的创始人 Alfred Aho]]></description><category></category></item><item><title><![CDATA[Linux ALSA框架之八:ASoC架构中的Platform]]></title><link>https://blog.youkuaiyun.com/tangcong29/article/details/51063696</link><guid>https://blog.youkuaiyun.com/tangcong29/article/details/51063696</guid><author>tangcong29</author><pubDate>Tue, 05 Apr 2016 12:02:38 +0800</pubDate><description><![CDATA[1. Platform驱动在ASoC中的作用
前面几章内容已经说过,ASoC被分为Machine,Platform和Codec三大部件,Platform驱动的主要作用是完成音频数据的管理,最终通过CPU的数字音频接口(DAI)把音频数据传送给Codec进行处理,最终由Codec输出驱动耳机或者是喇叭的音信信号.在具体实现上,ASoC有把Platform驱动分为两个部分:snd_soc_platf]]></description><category></category></item><item><title><![CDATA[Linux ALSA框架之七:ASoC架构中的Codec]]></title><link>https://blog.youkuaiyun.com/tangcong29/article/details/51063694</link><guid>https://blog.youkuaiyun.com/tangcong29/article/details/51063694</guid><author>tangcong29</author><pubDate>Tue, 05 Apr 2016 12:02:10 +0800</pubDate><description><![CDATA[1. Codec简介
在移动设备中,Codec的作用可以归结为4种,分别是: 

对PCM等信号进行D/A转换,把数字的音频信号转换为模拟信号对Mic、Linein或者其他输入源的模拟信号进行A/D转换,把模拟的声音信号转变CPU能够处理的数字信号对音频通路进行控制,比如播放音乐,收听调频收音机,又或者接听电话时,音频信号在codec内的流通路线是不一样的对音频信号做出相应的处理,例如音量控]]></description><category></category></item><item><title><![CDATA[Linux ALSA框架之六:ASoC架构中的Machine]]></title><link>https://blog.youkuaiyun.com/tangcong29/article/details/51063692</link><guid>https://blog.youkuaiyun.com/tangcong29/article/details/51063692</guid><author>tangcong29</author><pubDate>Tue, 05 Apr 2016 12:01:47 +0800</pubDate><description><![CDATA[前面一节的内容我们提到,ASoC被分为Machine、Platform和Codec三大部分,其中的Machine驱动负责Platform和Codec之间的耦合以及部分和设备或板子特定的代码,再次引用上一节的内容:Machine驱动负责处理机器特有的一些控件和音频事件(例如,当播放音频时,需要先行打开一个放大器)；单独的Platform和Codec驱动是不能工作的,它必须由Machine驱动把它们结]]></description><category></category></item><item><title><![CDATA[Linux ALSA框架之五:移动设备中的ALSA(ASoC)]]></title><link>https://blog.youkuaiyun.com/tangcong29/article/details/51063690</link><guid>https://blog.youkuaiyun.com/tangcong29/article/details/51063690</guid><author>tangcong29</author><pubDate>Tue, 05 Apr 2016 12:01:22 +0800</pubDate><description><![CDATA[1. ASoC的由来
ASoC--ALSA System on Chip ,是建立在标准ALSA驱动层上,为了更好地支持嵌入式处理器和移动设备中的音频Codec的一套软件体系.在ASoc出现之前,内核对于SoC中的音频已经有部分的支持,不过会有一些局限性:

Codec驱动与SoC CPU的底层耦合过于紧密,这种不理想会导致代码的重复,例如,仅是wm8731的驱动,当时Linux中有分别针对]]></description><category></category></item><item><title><![CDATA[Linux ALSA框架之四:Control设备的创建]]></title><link>https://blog.youkuaiyun.com/tangcong29/article/details/51063688</link><guid>https://blog.youkuaiyun.com/tangcong29/article/details/51063688</guid><author>tangcong29</author><pubDate>Tue, 05 Apr 2016 12:01:01 +0800</pubDate><description><![CDATA[Control接口

Control接口主要让用户空间的应用程序(alsa-lib)可以访问和控制音频codec芯片中的多路开关,滑动控件等.对于Mixer(混音)来说,Control接口显得尤为重要,从ALSA 0.9.x版本开始,所有的mixer工作都是通过control接口的API来实现的.
ALSA已经为AC97定义了完整的控制接口模型,如果你的Codec芯片只支持AC97接口,你可]]></description><category></category></item><item><title><![CDATA[Linux ALSA框架之三:PCM设备的创建]]></title><link>https://blog.youkuaiyun.com/tangcong29/article/details/51063686</link><guid>https://blog.youkuaiyun.com/tangcong29/article/details/51063686</guid><author>tangcong29</author><pubDate>Tue, 05 Apr 2016 12:00:32 +0800</pubDate><description><![CDATA[1. PCM是什么

PCM是英文Pulse-code modulation的缩写,中文译名是脉冲编码调制.我们知道在现实生活中,人耳听到的声音是模拟信号,PCM就是要把声音从模拟转换成数字信号的一种技术,他的原理简单地说就是利用一个固定的频率对模拟信号进行采样,采样后的信号在波形上看就像一串连续的幅值不一的脉冲,把这些脉冲的幅值按一定的精度进行量化,这些量化后的数值被连续地输出、传输、处理或]]></description><category></category></item><item><title><![CDATA[Linux ALSA框架之二:声卡的创建]]></title><link>https://blog.youkuaiyun.com/tangcong29/article/details/51063684</link><guid>https://blog.youkuaiyun.com/tangcong29/article/details/51063684</guid><author>tangcong29</author><pubDate>Tue, 05 Apr 2016 11:59:55 +0800</pubDate><description><![CDATA[1. struct snd_card
1.1 snd_card是什么
snd_card可以说是整个ALSA音频驱动最顶层的一个结构,整个声卡的软件逻辑结构开始于该结构,几乎所有与声音相关的逻辑设备都是在snd_card的管理之下,声卡驱动的第一个动作通常就是创建一个snd_card结构体.正因为如此,本节中,我们也从 struct cnd_card开始吧.
1.2 snd_card的定义
]]></description><category></category></item><item><title><![CDATA[Linux ALSA框架之一:ALSA架构简介]]></title><link>https://blog.youkuaiyun.com/tangcong29/article/details/51063679</link><guid>https://blog.youkuaiyun.com/tangcong29/article/details/51063679</guid><author>tangcong29</author><pubDate>Tue, 05 Apr 2016 11:58:38 +0800</pubDate><description><![CDATA[.  概述
ALSA是Advanced Linux Sound Architecture 的缩写,目前已经成为了linux的主流音频体系结构,想了解更多的关于ALSA的这一开源项目的信息和知识,请查看以下网址:http://www.alsa-project.org/.
在内核设备驱动层,ALSA提供了alsa-driver,同时在应用层,ALSA为我们提供了alsa-lib,应用程序只要调用a]]></description><category></category></item><item><title><![CDATA[LOG_NDEBUG作用]]></title><link>https://blog.youkuaiyun.com/tangcong29/article/details/50623141</link><guid>https://blog.youkuaiyun.com/tangcong29/article/details/50623141</guid><author>tangcong29</author><pubDate>Tue, 02 Feb 2016 12:06:48 +0800</pubDate><description><![CDATA[log.h文件：
/*
 * Normally we strip ALOGV (VERBOSE messages) from release builds.
 * You can modify this (for example with "#define LOG_NDEBUG 0"
 * at the top of your source file) to change that beh]]></description><category></category></item><item><title><![CDATA[Linux IDR机制]]></title><link>https://blog.youkuaiyun.com/tangcong29/article/details/49640433</link><guid>https://blog.youkuaiyun.com/tangcong29/article/details/49640433</guid><author>tangcong29</author><pubDate>Wed, 04 Nov 2015 17:05:45 +0800</pubDate><description><![CDATA[IDR机制在Linux内核中指的是整数ID管理机制。
实质上来讲，这就是一种将一个整数ID号和一个指针关联在一起的机制。
这个机制最早在03年2月加入内核，当时作为POSIX定时器的一个补丁。现在，内核中很多地方都可以找到它的身影。
 
IDR机制原理：
IDR机制适用在那些需要把某个整数和特定指针关联在一起的地方。例如，在IIC总线中，每个设备都有自己的地址，要想在总线上找到特定的设备]]></description><category></category></item><item><title><![CDATA[linux内核部件分析（三）——记录生命周期的kref]]></title><link>https://blog.youkuaiyun.com/tangcong29/article/details/49638669</link><guid>https://blog.youkuaiyun.com/tangcong29/article/details/49638669</guid><author>tangcong29</author><pubDate>Wed, 04 Nov 2015 15:28:05 +0800</pubDate><description><![CDATA[kref是一个引用计数器，它被嵌套进其它的结构中，记录所嵌套结构的引用计数，并在计数清零时调用相应的清理函数。kref的原理和实现都非常简单，但要想用好却不容易，或者说kref被创建就是为了跟踪复杂情况下地结构引用销毁情况。所以这里先介绍kref的实现，再介绍其使用规则。
       kref的头文件在include/linux/kref.h，实现在lib/kref.c。闲话少说，上代码。
]]></description><category></category></item><item><title><![CDATA[Printk打印优先级设定]]></title><link>https://blog.youkuaiyun.com/tangcong29/article/details/48765293</link><guid>https://blog.youkuaiyun.com/tangcong29/article/details/48765293</guid><author>tangcong29</author><pubDate>Sun, 27 Sep 2015 10:16:51 +0800</pubDate><description><![CDATA[# cat /proc/sys/kernel/printk
7       4       1      7
上面显示的4个数据分别对应：
控制台日志级别：优先级高于该值的消息将被打印至控制台，数值越小，优先级越高。优先级定义见后。
默认的消息日志级别：将用该优先级来打印没有优先级的消息，直接调用printk,未显示标注优先级的打印，如printk("xxxxxxxx");
最低的控制台]]></description><category></category></item><item><title><![CDATA[Android.mk基础知识]]></title><link>https://blog.youkuaiyun.com/tangcong29/article/details/48765117</link><guid>https://blog.youkuaiyun.com/tangcong29/article/details/48765117</guid><author>tangcong29</author><pubDate>Sun, 27 Sep 2015 09:32:16 +0800</pubDate><description><![CDATA[一个Android.mk file用来向编译系统描述你的源代码。具体来说：该文件是GNU Makefile的一小部分，会被编译系统解析一次或多次。你可以在每一个Android.mk file中定义一个或多个模块，你也可以在几个模块中使用同一个源代码文件。每个模块属下列类型之一：
  1）APK程序，一般的Android程序，编译打包生成apk文件
  2）JAVA库，java类库，编译打包生成]]></description><category></category></item><item><title><![CDATA[JTAG调试原理]]></title><link>https://blog.youkuaiyun.com/tangcong29/article/details/48527137</link><guid>https://blog.youkuaiyun.com/tangcong29/article/details/48527137</guid><author>tangcong29</author><pubDate>Thu, 17 Sep 2015 20:00:22 +0800</pubDate><description><![CDATA[JTAG（Joint Test Action Group，联合测试行动小组）是一种国际标准测试协议，主要用于芯片内部测试。现在多数的高级器件都支持JTAG协议，如ARM、DSP、FPGA器件等。标准的JTAG接口是4线：TMS、 TCK、TDI、TDO，分别为模式选择、时钟、数据输入和数据输出线。
JTAG最初是用来对芯片进行测试的，基本原理是在器件内部定义一个TAP（Test Access P]]></description><category></category></item></channel></rss>