<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[luren2015的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/luren2015</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; luren2015]]></copyright><item><title><![CDATA[Zigbee ZLL简介]]></title><link>https://blog.youkuaiyun.com/luren2015/article/details/128997706</link><guid>https://blog.youkuaiyun.com/luren2015/article/details/128997706</guid><author>luren2015</author><pubDate>Sun, 12 Feb 2023 18:15:32 +0800</pubDate><description><![CDATA[从Zigbee 3.0开始, ZLL已经不再局限于照明领域，而是逐渐演变成一种网络和配网方式。]]></description><category></category></item><item><title><![CDATA[Zigbee IAS zone]]></title><link>https://blog.youkuaiyun.com/luren2015/article/details/128997504</link><guid>https://blog.youkuaiyun.com/luren2015/article/details/128997504</guid><author>luren2015</author><pubDate>Sun, 12 Feb 2023 17:53:17 +0800</pubDate><description><![CDATA[Zigbee IAS zone注册流程]]></description><category></category></item><item><title><![CDATA[__attribute__ ((packed)) 的作用]]></title><link>https://blog.youkuaiyun.com/luren2015/article/details/107863775</link><guid>https://blog.youkuaiyun.com/luren2015/article/details/107863775</guid><author>luren2015</author><pubDate>Fri, 07 Aug 2020 15:44:27 +0800</pubDate><description><![CDATA[__attribute__ ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐，是GCC特有的语法。这个功能是跟操作系统没关系，跟编译器有关，gcc编译器不是紧凑模式的，我在windows下，用vc的编译器也不是紧凑的，用tc的编译器就是紧凑的。例如：

在TC下：

struct my

{

  char ch;

  int a;

}

sizeof(int)=2;

sizeof(my)=3;（紧凑模式）

在GCC下：

struct m...]]></description><category></category></item><item><title><![CDATA[C语言中长度为0的数组]]></title><link>https://blog.youkuaiyun.com/luren2015/article/details/107862978</link><guid>https://blog.youkuaiyun.com/luren2015/article/details/107862978</guid><author>luren2015</author><pubDate>Fri, 07 Aug 2020 15:23:11 +0800</pubDate><description><![CDATA[长度为0的数组在标准c和c++中是不允许的，如果使用长度为0的数组，编译时会产生错误，提示数组长度不能为0。但在GNUc中，这种用法却是合法的。它的最典型的用法就是位于数组中的最后一项，如上面所示，这样做主要是为了方便内存缓冲区的管理。如果你将上面的长度为的数组换为指针，那么在分配内存时，需采用两步：首先，需为结构体分配一块内存空间；其次再为结构体中的成员变量分配内存空间。这样两次分配的内存是不连续的，需要分别对其进行管理。当使用长度为的数组时，则是采用一次分配的原则，一次性...]]></description><category></category></item><item><title><![CDATA[牢记大端小端的含义]]></title><link>https://blog.youkuaiyun.com/luren2015/article/details/107810092</link><guid>https://blog.youkuaiyun.com/luren2015/article/details/107810092</guid><author>luren2015</author><pubDate>Wed, 05 Aug 2020 11:01:57 +0800</pubDate><description><![CDATA[转载自：https://www.cnblogs.com/wuyuegb2312/archive/2013/06/08/3126510.html

仅摘录关键部分内容，详细看原文。

   稍有些英语常识的人都会知道，如果单靠字面意思来理解俚语，那是很难猜到它的正确含义的。在计算机里，对于地址的描述，很少用“大”和“小”来形容；对应地，用的更多的是“高”和“低”；很不幸地，这对术语直接按字面翻译过来就成了“大端”和“小端”，让人产生迷惑也不是很奇怪的事了。

　　不过给我启发的是，在裘宗燕翻译的《程序...]]></description><category></category></item><item><title><![CDATA[I2C、UART、SPI详解及区别]]></title><link>https://blog.youkuaiyun.com/luren2015/article/details/107771943</link><guid>https://blog.youkuaiyun.com/luren2015/article/details/107771943</guid><author>luren2015</author><pubDate>Mon, 03 Aug 2020 20:31:18 +0800</pubDate><description><![CDATA[一、通讯

1. 通讯的概念

  我们把计算机与外界的信息交换称之为通信。

2. 通讯方式分类

  基本的通信方式有两种：并行通讯和串行通讯。

  并行通信：所传送数据的各个位是同时发送或接收。速度快，占用引脚资源多

  串行通信：所传送数据的各位按顺序一位一位地发送或接收。占用引脚资源少，速度相 对较慢

3. 串行通讯种类

  串行通讯的种类有：异步通讯和同步通讯

1） 异步通讯：不带时钟同步信号，不是使用同一个时钟源。如UART、单总线

2） 异步通讯数据...]]></description><category></category></item><item><title><![CDATA[多进程通信(IPC)]]></title><link>https://blog.youkuaiyun.com/luren2015/article/details/107752877</link><guid>https://blog.youkuaiyun.com/luren2015/article/details/107752877</guid><author>luren2015</author><pubDate>Sun, 02 Aug 2020 22:36:36 +0800</pubDate><description><![CDATA[IPC：Inter Process Communication

一、管道PIPE

1、特点

只能在亲缘关系进程间通信（父子或兄弟）
	半双工（固定的读端和固定的写端）
	它是特殊的文件，可以用 read、write 等，只能在内存中
2、主要API

1）创建管道

原型：int pipe(int pipefd[2]);

参数：pipefd 做输出参数使用，存放是管道的读，写文件描述符。pipefd[0] 存放读，pipefd[1]存放写

2）读写

把将管道当作文件，使用read、wri...]]></description><category></category></item><item><title><![CDATA[网络编程：TCP与UDP]]></title><link>https://blog.youkuaiyun.com/luren2015/article/details/107748744</link><guid>https://blog.youkuaiyun.com/luren2015/article/details/107748744</guid><author>luren2015</author><pubDate>Sun, 02 Aug 2020 18:50:00 +0800</pubDate><description><![CDATA[一、TCP：面向连接的、可靠的、字节流服务

服务器端一般步骤是：

1、socket()：创建一个socket，设置协议、TCP\UDP

2、setsockopt()：可选，设置socket属性，必须在bind之前

3、bind()：绑定IP地址、端口等信息到socket上

4、listen()：开启监听

5、accept()：接收客户端上来的连接，连接上后，生成新套接字用于与客户端通信，旧的套接字仍用于监听

6、send()、recv()：收发数据

7、close()：关闭网络连接

客..]]></description><category></category></item><item><title><![CDATA[网络通信：TCP与UDP的区别]]></title><link>https://blog.youkuaiyun.com/luren2015/article/details/107743011</link><guid>https://blog.youkuaiyun.com/luren2015/article/details/107743011</guid><author>luren2015</author><pubDate>Sun, 02 Aug 2020 17:38:44 +0800</pubDate><description><![CDATA[一、TCP（Transmission Control Protocol，传输控制协议）：

   面向连接的、可靠的、字节流服务。

1、面向连接：

   在收发数据前，必须和对方建立可靠的连接，一个TCP接连需要经“三次握手”建立，而断开需要经“四次挥手”，大大提高了数据通信的可靠性，

2、可靠传输：

   依靠TCP的序号和确认号。序号可保证有序传输，接收端接收成功需要返回一个确认（ACK），否则超时未返回ACK，对应数据将被重传。

3、面向字节流：

   TCP不像...]]></description><category></category></item><item><title><![CDATA[System V信号量 与 Posix 信号量]]></title><link>https://blog.youkuaiyun.com/luren2015/article/details/107739149</link><guid>https://blog.youkuaiyun.com/luren2015/article/details/107739149</guid><author>luren2015</author><pubDate>Sun, 02 Aug 2020 00:39:45 +0800</pubDate><description><![CDATA[转载自：https://www.cnblogs.com/Zoran-/p/5819256.html

一、函数上的区别

    信号量有两种实现：传统的System V信号量和新的Posix信号量。它们所提供的函数很容易被区分：对于所有System V信号量函数，在它们的名字里面没有下划线。例如，应该是semget() 而不是sem_get()。然而，所有的的Posix信号量函数都有一个下划线。下面列出了它们提供的所有函数清单：

Systm V
			POSIX
			
		有名信号量
	...]]></description><category></category></item><item><title><![CDATA[线程互斥与同步、互斥锁与信号量]]></title><link>https://blog.youkuaiyun.com/luren2015/article/details/107738689</link><guid>https://blog.youkuaiyun.com/luren2015/article/details/107738689</guid><author>luren2015</author><pubDate>Sun, 02 Aug 2020 00:06:31 +0800</pubDate><description><![CDATA[转载自：

https://www.cnblogs.com/baizhanshi/p/6844356.html

https://www.cnblogs.com/alinh/p/6905221.html

一、互斥与同步

互斥是指某一资源同时只允许一个访问者对其进行访问，具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序，即访问是无序的。
	同步是指在互斥的基础上（大多数情况），通过其它机制实现访问者对资源的有序访问。
	同步其实已经实现了互斥，所以同步是一种更为复杂的互斥。
	互斥是一种特殊的同步]]></description><category></category></item><item><title><![CDATA[TCP连接的“四次挥手”（Four-Way Wavehand）]]></title><link>https://blog.youkuaiyun.com/luren2015/article/details/107642280</link><guid>https://blog.youkuaiyun.com/luren2015/article/details/107642280</guid><author>luren2015</author><pubDate>Tue, 28 Jul 2020 22:27:30 +0800</pubDate><description><![CDATA[转载自：https://www.cnblogs.com/AhuntSun-blog/p/12037852.html

一、“四次挥手”的详解

所谓的四次挥手即TCP连接的释放(解除)。连接的释放必须是一方主动释放，另一方被动释放。以下为客户端主动发起释放连接的图解：




挥手之前主动释放连接的客户端结束ESTABLISHED阶段。随后开始“四次挥手”：


（1）首先客户端想要释放连接，向服务器端发送一段TCP报文，其中：

标记位为 FIN，表示“请求释放连接“；
	序号为 Seq = U；
	随后]]></description><category></category></item><item><title><![CDATA[TCP连接的“三次握手”（Three-Way Handshake）]]></title><link>https://blog.youkuaiyun.com/luren2015/article/details/107641930</link><guid>https://blog.youkuaiyun.com/luren2015/article/details/107641930</guid><author>luren2015</author><pubDate>Tue, 28 Jul 2020 22:25:46 +0800</pubDate><description><![CDATA[转载自：https://www.cnblogs.com/AhuntSun-blog/p/12028636.html



一、TCP报文格式



其中比较重要的字段有：

（1）序号（sequence number）：Seq序号，占32位，用来标识从TCP源端向目的端发送的字节流，发起方发送数据时对此进行标记。

（2）确认号（acknowledgement number）：Ack序号，占32位，只有ACK标志位为1时，确认序号字段才有效，Ack=Seq+1。

（3）标志位（Flags）：共6个，即..]]></description><category></category></item><item><title><![CDATA[zigbee 休眠与唤醒]]></title><link>https://blog.youkuaiyun.com/luren2015/article/details/107452659</link><guid>https://blog.youkuaiyun.com/luren2015/article/details/107452659</guid><author>luren2015</author><pubDate>Sun, 19 Jul 2020 22:23:12 +0800</pubDate><description><![CDATA[转载自： https://www.cnblogs.com/killer-xc/p/4827754.html

环境：TI CC2530

一、概念

CC2530有五种工作模式。分别为Active mode、Idle mode、PM1、PM2、PM3，

其中，PM2模式比较省功耗而且可以被定时唤醒；PM3模式最省电但是只能被外部中断唤醒。

开启睡眠功能很简单:

1、首先确认f8wConfig.cfg文件中DRFD_RCVC_ALWAYS_ON定义为FALSE；

2、然后在IAR的Options-..]]></description><category></category></item><item><title><![CDATA[zigbee 信道切换过程解析]]></title><link>https://blog.youkuaiyun.com/luren2015/article/details/107451304</link><guid>https://blog.youkuaiyun.com/luren2015/article/details/107451304</guid><author>luren2015</author><pubDate>Sun, 19 Jul 2020 21:56:44 +0800</pubDate><description><![CDATA[环境：TI CC2530

关键命令：

Mgmt_NWK_Update_notify ： 路由器通知协调器考虑切换信道（不一定会切换）

Mgmt_NWK_Update_req   ：协调器通知所有路由器进行信道切换



一、发送 Mgmt_NWK_Update_notify

   所有路由器和协调器会时刻计算传输数据总数和传输失败数量，当传输总数超过 ZDNWKMGR_MIN_TRANSMISSIONS 并且失败率超过 ZDNWKMGR_CI_TX_FAILURE，则认为当前信...]]></description><category></category></item><item><title><![CDATA[Zigbee入网流程]]></title><link>https://blog.youkuaiyun.com/luren2015/article/details/107304462</link><guid>https://blog.youkuaiyun.com/luren2015/article/details/107304462</guid><author>luren2015</author><pubDate>Mon, 13 Jul 2020 13:41:23 +0800</pubDate><description><![CDATA[本示例采用关联方式（Associate）入网，总体流程如下：



一、入网前准备

1、coordinater 发出Permit Joining Request广播，允许设备入网，时长一般为180s



2、待入网设备启动扫网操作后，将在预置信道发出Beacon Request广播，zigbee信道为11~26，一般考虑效率和与WiFi信道干扰问题，会选择几条优先信道进行扫网。



二、Beacon

在收到Beacon Request后，同一信道的不同PAN的协调器会发出Beacon回应，待入网设备]]></description><category></category></item><item><title><![CDATA[Zigbee3.0 协议特性]]></title><link>https://blog.youkuaiyun.com/luren2015/article/details/107302541</link><guid>https://blog.youkuaiyun.com/luren2015/article/details/107302541</guid><author>luren2015</author><pubDate>Mon, 13 Jul 2020 11:48:23 +0800</pubDate><description><![CDATA[转载自：https://www.cnblogs.com/bitconn/p/9389426.html



ZigBee协议有如下特性:

支持多种网络拓扑，比如点对点，点对多点，自组网；
	低工作占空比能力，提供长电池供电的可能；
	低延迟；
	采用DSSS扩频技术；
	每个网络最高可支持65,000节点
	128-bit AES 加密
	碰撞避免，重试和应答确认
ZigBee 3.0软件栈集成了一个“基础设备”，它为配置节点加入到网络提供一致的行为。它提供了一套通用的配置方法，包括Touchlink，.]]></description><category></category></item><item><title><![CDATA[栈与队列之间的互相转换]]></title><link>https://blog.youkuaiyun.com/luren2015/article/details/107074295</link><guid>https://blog.youkuaiyun.com/luren2015/article/details/107074295</guid><author>luren2015</author><pubDate>Thu, 02 Jul 2020 09:18:44 +0800</pubDate><description><![CDATA[一、基本概念

1、栈stack：先进后出 FILO



2、队列queue：先进先出 FIFO



二、两个栈实现一个队列



1、入队：push到栈1

2、出队：

（1）若栈2为空，push到栈2，再从栈2 依次pop

（2）若栈2非空，先将栈2 数据依次pop，直到为空，再执行步骤（1）

三、两个队列实现一个栈



1、入栈：push数据 “abc” 到一个不为空的队列，若全为空，即均可

2、 出栈：

（1） 将队1数据（除了最后一个）“ab” push到队2（空）中，将队1中..]]></description><category></category></item><item><title><![CDATA[算法的时间复杂度和空间复杂度]]></title><link>https://blog.youkuaiyun.com/luren2015/article/details/107030188</link><guid>https://blog.youkuaiyun.com/luren2015/article/details/107030188</guid><author>luren2015</author><pubDate>Mon, 29 Jun 2020 23:15:18 +0800</pubDate><description><![CDATA[转载于：

https://www.jianshu.com/p/1ac6ad4069f8

https://www.jianshu.com/p/88a1c8ed6254

一、时间复杂度（Time complexity）

一个算法语句总的执行次数是关于问题规模N的某个函数，记为f(N)，N称为问题的规模。语句总的执行次数记为T(N)，当N不断变化时，T(N)也在变化，算法执行次数的增长速率和f(N)的增长速率相同。

1、常数阶O(1)，不存在循环结构，如以下代码段


int sum = 0, n =.]]></description><category></category></item><item><title><![CDATA[链表反转（迭代方式、递归方式）]]></title><link>https://blog.youkuaiyun.com/luren2015/article/details/107006222</link><guid>https://blog.youkuaiyun.com/luren2015/article/details/107006222</guid><author>luren2015</author><pubDate>Sun, 28 Jun 2020 22:29:51 +0800</pubDate><description><![CDATA[关于链表（单向）的反转，常用的就是迭代方式和递归方式，网上有很多相关的讲解，但是我还是花了些时间才弄懂，为了加深理解记忆，特意写了博客。这是第一次写博客，全为个人见解，有任何不妥地方，请各位多多包涵、指正。

一、迭代方式

这是个人认为比较容易理解的，迭代是从表头开始处理，依次将每个节点变成新的表头，并将其地址域指向上一个节点（即旧的表头，若为第一个节点，则地址域指向NULL），以下面链表作为例子：



（1）指针P指向表头，开始处理



（2）节点1作为新表头，其地址域指向NULL，实际上就是新表.]]></description><category></category></item></channel></rss>