- 博客(268)
- 资源 (4)
- 问答 (1)
- 收藏
- 关注
原创 Matter (CHIP) 从入门到入土 (一)
Matter(Project Connected Home over IP,简称为CHIP项目)是一个智能家居开源标准项目,由亚马逊、苹果、谷歌、ZigBee联盟联合发起,旨在开发、推广一项免除专利费的新连接协议,以简化智能家居设备商开发成本,提高产品之间兼容性。2021年5月11日,CHIP更名为Matter,ZigBee联盟也更名为连接标准联盟(Connectivity Standards Alliance)。CHIP 让不同的智能家居设备间,使用 IP 地址作为身份证,互相通讯。最终目的是让那些功
2022-02-08 15:42:25
15680
原创 Bluetooth 蓝牙介绍(七):逻辑链路控制和适配协议规范(L2cap 协议)
文章目录前言L2CAP 特性前提术语常规操作通道标识符操作模式数据包格式蓝牙逻辑链路控制和适配协议 (L2CAP) 支持更高级别的协议复用、数据包分段和重组以及服务质量信息的传送。规范的本部分描述了协议状态机、数据包格式和组成 。前言蓝牙规范的这一部分定义了逻辑链路控制和适配层协议,简称 L2CAP。L2CAP 为具有协议复用能力和分段和重组操作的上层协议提供面向连接和无连接的数据服务。L2CAP 允许更高级别的协议和应用程序传输和接收长达 64 KB 的上层数据包(L2CAP 服务数据
2021-11-30 20:18:20
3221
原创 计算机网络笔记(五):传输层
文章目录前言多路复用和多路分用前言理解传输层服务的基本理论和基本机制多路复用/分用可靠数据传输机制流量控制机制拥塞控制机制传输层协议为运行在不同Host上的进程提供了一种逻辑通信机制。端系统运行传输层协议发送方:将应用递交的消息分成一个或多个的Segment,并向下传给网络层。接受方:将接收到的Segment组装成消息,并向上交给应用层。传输层与网络层网络层:提供主机之间的逻辑通信机制传输层:提供应用进程之间的逻辑通信机制可靠的、按序的交付服务(TCP)拥塞控制
2021-11-24 20:42:46
406
原创 计算机网络笔记(四):Socket编程
前言几种典型的应用编程接口Berkeley UNIX操作系统定义了一种API,称为套接字接口(socket interface),简称套接字Socket微软公司在其操作系统中采用了套接字API,形成了一个稍有不同的API,并称之为Windows Socket Interface,WinSockAT&T为其UNIX系统V定义了一种API,简写为TLI(Transport Layer Interface)Socket API最初设计:面向BSD Unix-Berkeley,面向TC
2021-11-13 17:42:07
516
原创 Bluetooth 蓝牙介绍(四):低功耗蓝牙BLE Mesh网络Ⅲ —— 广播 PDU
文章目录前言Mesh MessageAdvertising bearerNetwork PDUMesh beaconsUnprovisioned Device beaconSecure Network beaconPB - ADVProvisioningProvisioning bearer layerPB-ADV PDU前言蓝牙Mesh网络一共有3种广播包,如下图所示,我们接下来按照PDF章节顺序依次介绍。当多个八位字节值被定义为以“大端”(也称为“网络字节顺序”)发送时,数据增长方向与内存增长
2021-11-04 17:39:20
1538
原创 Bluetooth 蓝牙介绍(四):低功耗蓝牙BLE Mesh网络Ⅱ —— Mesh网络
文章目录Mesh networkingFeaturesBearersAdvertising bearerGATT bearerNetwork layerAddressesMesh networking对于接入层和基础模型,所有多八位字节数值应为小端,如第 3.1.1.2 节所述。大端模式:例如,字段 0 为 4 位宽,值为 0x6,字段 1 为 12 位宽,值为 0x987,字段 2 为 16 位宽,值为 0x1234。二进制数的值为 0x69871234,应按 0x69、0x87、0x12、0
2021-11-04 14:40:43
796
原创 计算机网络笔记(三):应用层
网络应用的体系结构客户机/服务器结构(Client-Server,C/S):例子 - Web点对点结构(Peer-to-peer,P2P):例子 - BT优点:高度可伸缩缺点:难于管理混合结构(Hybrid):例子 - Napster-文件传输使用P2P结构文件的搜索使用C/S结构——集中式:1. 每个节点向中央服务器登记自己的内容。2. 每个节点向中央服务器提交查询请求,查找感兴趣的内容。...
2021-10-21 20:53:34
225
原创 计算机网络笔记(二)
计算机网络体系结构OSI参考模型数据封装:增加控制信息,构造协议数据单元(PDU)。控制信息主要包括:地址(Address):标识发送端 / 接收端。差错检测编码(Error-detecting code):用于差错检测或纠正。协议控制(Protocol control):实现协议功能的附加信息,如优先级、服务质量(Qos)、安全控制等。物理层:解决单一bit传输问题接口特性:机械特性、电气特性、功能特性、规程特性比特编码、数据率、比特同步(时钟同步)传输模式:单工(Simple
2021-10-19 20:58:57
194
原创 计算机网络笔记(一)
什么是计算机网络什么是计算机网络? 计算机网络就是互连(互联互通)的、自治(无主从关系)的计算机集合。那么,距离远、数据大如何保证互连?通过交换网络互连主机。什么 是 Internet ?组成:计算机设备、通信链路、分组交换(数据包转发分组)。服务:提供通信服务的通信基础设施、提供应用编程接口(API)。问题:仅有硬件(主机、链路、路由器…)连接,Internet能否顺畅运行?能保证应用数据有序交付吗? NO!还需要网络协议。计算机网络中的数据交换必须遵守实现约定好的规则。什么是网
2021-10-11 20:28:29
178
原创 Bluetooth 蓝牙介绍(六):低功耗蓝牙信息交互
前言蓝牙协议栈跟蓝牙芯片都是使用统一的数据来交互的,由SIG规定(备注:部分芯片有HCI vendor命令),一般交互的有以下几种类型(注意:如果没有特别声明,所有的数据)Command:host to controller 下发命令Event:controller to host 上报事件ACL:基于L2CAP连接的交互数据。无连接的异步连接 (主要用于分组数据传输)SCO: 面向连接的同步连接 (主要用于话音传输)ISO:BLE Audio数据(Core 5.2 Vol 4 Part
2021-10-09 15:13:27
3461
2
翻译 Bluetooth 蓝牙介绍(七):低功耗蓝牙HCI规范
HOST CONTROLLER INTERFACE(HCI) 功能规范如果Controller支持 <Table 3.2: Legacy and extended advertising commands and events> 表中列出的任何传统广播命令或事件,并且还支持 LE 功能(扩展广播),则它应支持表中同一行中相应的扩展广播命令或事件。如果自上次上电或复位以来,Host 曾经发出过传统广播命令然后发出扩展广播命令,或者曾经发出过扩展广播命令然后发出传统广播命令,则控制器应返回错误
2021-09-28 11:40:19
1077
原创 Bluetooth 蓝牙介绍(五):低功耗蓝牙BLE Security
任何系统最常见的一些安全问题包括:Authentication / 身份验证:身份验证证明对方就是他们声称的身份。因此,如果您要连接到 BLE 设备,您需要确保实际连接的是感兴趣的设备——而不是其他一些伪装成该设备的恶意设备。Integerity / 完整性:完整性确保我们收到的数据不会被未经授权的设备损坏和篡改。Confidentiality / 机密性:机密性涉及确保数据不会被未经授权的用户或设备读取。Privacy / 隐私:隐私与通信的私密性有关,以及第三方是否能够跟踪我们的
2021-09-16 11:27:37
5855
3
原创 Bluetooth 蓝牙介绍(四):低功耗蓝牙BLE Mesh网络 Ⅰ—— 基础概念
文章目录背景术语Managed FloodingModelsScenes架构Node Features中继节点代理节点友元节点和低功耗节点示例The Provisioning ProcessStep 1: BeaconingStep 2: InvitationStep 3: Public Key ExchangeStep 4: AuthenticationStep 5: Provision Data DistributionSecurity in Bluetooth mesh节点移除隐私重放攻击参考文献背
2021-09-13 20:59:07
5041
原创 关于typedef的用法总结
typedef的应用typedef是C 语言中用于为现有数据类型指定替代名称的关键字。它主要用于用户定义的数据类型,当数据类型的名称在程序中使用变得稍微复杂时。以下是使用的一般语法typedef <existing_name> <alias_name>应用一:结构体别名typedef也可用于为用户定义的数据类型命名。让我们看看它对结构体的使用。// ======== oldstruct type_name{ type member1; type me
2021-08-22 17:30:01
611
原创 Bluetooth 蓝牙介绍(三):低功耗蓝牙BLE空口协议Ⅱ
文章目录前言4.5 CONNECTION STATE4.5.1 Connection events4.5.2 Supervision timeout4.5.3 Connection event transmit window4.5.4 Connection setup – Master Role4.5.5 Connection setup – Slave Role4.5.6 Closing connection events参考文章前言上篇文章介绍了非连接态下空口的各种状态的表现,现在让我们一起看下在连
2021-07-27 01:11:01
1544
原创 低功耗蓝牙如何实现低功耗
经典蓝牙面临的挑战是电池消耗快和连接频繁丢失,需要频繁配对和重新配对。能够成功解决这些问题是 BLE 快速增长的原因之一。低功耗蓝牙是蓝牙无线技术的智能、省电版本。它已经在将智能小工具转变为更智能的小工具方面发挥着重要作用,使它们变得紧凑、负担得起且不那么复杂。那么BLE是如何实现低功耗的呢,它又有什么技术特点呢?根据SIG官方发布会的资料,它和经典BT的技术相比,主要的改变集中体现在待机功耗的减少、高速连接的实现和峰值功耗的降低3个方面。数据传输: BLE 支持以 1 Mbps 传输的非常短的数据
2021-07-25 21:21:25
2020
原创 Bluetooth 蓝牙介绍(三):低功耗蓝牙BLE空口协议Ⅰ
空口协议包括 multiple access scheme, devicediscovery 和 Link Layer connection methods 三大部分。帧空间同一信道索引上的两个连续数据包之间的时间间隔(time interval)被称为帧间空间。它被定义为从前一个数据包的最后一位结束到后续数据包的第一位开始的时间。 帧间空间指定为“T_IFS”并且应为 150 μs。包含 AuxPtr 的数据包与其指示的辅助数据包(auxiliary packet)之间的最小时间间隔称为最小 AU
2021-07-07 23:38:56
4873
1
原创 Bluetooth 蓝牙介绍(二):低功耗蓝牙BLE协议栈
蓝牙低功耗(Bluetooth Low Energy,或称Bluetooth LE、BLE,旧商标Bluetooth Smart)也称蓝牙低能耗、低功耗蓝牙,是蓝牙技术联盟设计和销售的一种个人局域网技术,旨在用于医疗保健、运动健身、信标、安防、家庭娱乐等领域的新兴应用。其适配经典蓝牙功能,但相较经典蓝牙,低功耗蓝牙旨在保持同等通信范围的同时显著降低功耗和成本。Physical LAYER“蓝牙低功耗”技术采用与“经典蓝牙”技术相同的工作频率(2.400 GHz-2.4835 GHz - ISM频带),
2021-06-20 21:40:08
5245
1
原创 Bluetooth 蓝牙介绍(一) :基础知识
蓝牙背景从1994年由电信商爱立信提出“希望创建一个RS-232数据线的无线通信替代版本,它能够链接多个设备,克服同步的问题”以来,蓝牙经过了20余个岁月的发展,蓝牙技术也经历了五次重要的迭代,目前由SIG(蓝牙技术联盟)来负责维护其技术标准。第一代:产品处于开发初期,各个厂商版本因为实现不同出现不兼容,地址无法匿名化,通信间无法自适应跳频,速度慢,无错误自恢复等问题也亟须改良。第二代:蓝牙2.0+EDR版加入了“非跳跃窄频通道”(Non-hopping narrowband channel)。因为
2021-06-05 16:02:23
14161
2
原创 笔记总结备份
目录文章目录目录前言版本控制操作系统系统架构图Linux线程 / 进程用户态内核态线程shell 脚本编程语言编译与调试通信算法专业名词前言文章源于工作内网原因只能记录在笔记本,最近打算换个工作环境,整理下资料,简单分个类,也顺便回顾下之前的内容,也相当于做个备份。回头看看,有些问题现在看有点简单了,但是有些问题好久没有处理也快忘了。有些地方因为是流程图,就不再用绘图软件在画了,直接拍张图片凑合看看吧。因为基本都是之前不懂的问题,肯定文章有些错误,如有人发现也希望能够指正。版本控制持续集成服务
2021-04-11 22:53:32
1074
原创 设计模式:创建型模式之工厂模式(c++)
前言工厂方法模式(英语:Factory method pattern) 又称为 虚拟构造函数、Virtual Constructor、Factory Method,是一种创建型设计模式, 其在父类中提供一个创建对象的方法, 允许子类决定实例化对象的类型,工厂方法让类的实例化推迟到子类中进行。简单工厂模式简单工厂模式我们将其分为以下几类:工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。抽象产品角色:它一般是具体产品继承的父类或者实现的接口。具体产品角色:工厂类所创建的对象就是此角色的
2021-04-07 23:59:33
168
原创 我们是否需要 do...while(0)
1. 前言在许多C / C ++宏中,可以看到许多看起来毫无意义的do while循环中的宏代码。Like:#define FOO(X) do { f(X); g(X); } while (0)#define FOO(X) if (1) { f(X); g(X); } else它的意义是什么,又有哪些意想不到的好处?2. 引入2.1 条件语句引起的逻辑错误上面例子若使用上诉规则,而直接表达:#define FOO(X) f(X); g(X)现在,如果 FOO(X) 在 if ...
2021-01-30 17:53:21
153
原创 博客同时部署Github和Coding page
吐槽下,coding page更新界面真的官方文档不更新吗?真的吐了!!!前期注册账号不讲了,现在都是以团队注册。 注册完后,记得到团队设置里面,找到实名认证。(在初次使用静态网站服务前,需要团队拥有者完成实名认证)然后需要在个人设置里绑定邮箱和设置密码,顺便把公钥添加下。创建一个项目,然后点进这个项目中,部署静态网站在项目设置里吧持续部署开关打开。(这里参考官方文档找了好久找不到,TND官方文档真的Fucx)官方笑话:CODING 静态网站服务...
2020-10-25 10:40:01
151
原创 c++ 面试笔记(长期更新)
1.map的底层是怎么实现的?map与hashmap的区别?什么时候应该使用map什么时候应该使用hashmap?map底层是使用红黑树RB-tree(非严格平衡二叉搜索树)实现的。hashmap在STL中称为unordered_map,使用哈希表hash实现的。unordered_map(等价于hash_map)和map类似,都是存储的key-value的值,可以通过key快速索引到value。不同的是红黑树具有自动排序的功能,因此map内部的所有元素都是有序的。而基于哈希表,数据插入和查找的时
2020-09-13 19:11:13
125
原创 动态规划 Dynamic programming
文章目录一、前言二、优点三、引申1. [coin-change](https://leetcode.com/problems/coin-change/solution/) 换零钱问题2. [Minimum Path Sum](https://leetcode.com/problems/minimum-path-sum/) 最小路径问题3. [Partition Equal Subset Sum](https://leetcode.com/problems/partition-equal-subset-sum
2020-09-13 15:17:13
1462
原创 计算机组成原理笔记
一、计算机的基本组成完成一条指令分为了三个阶段:取指令-分析指令-执行指令。下面我们分析上图的取数指令。(取数指令 ≠ 取指令 , 取数指令需要实施取指令、分析指令)取指令要执行的指令的地址我们是保存在PC当中的,取数指令这条指令的地址是保存在存储体当中的。所以,取指令的第一个操作,就是PC(PC给出了取数指令这条指令它所在的内存单元地址)要把指令的地址送给MAR,再由MAR送给存储体。在控制器的控制下,存储体把指定存储体中保存那条取数指令取出送到MDR中。取出的指令送到IR(IR的功能就是
2020-07-05 15:51:29
9212
翻译 Curiously recurring template pattern ( 奇怪的重复模板模式,CRTP)
CRTP是 C++中的一种技术,其中Derived类从类模板Base派生。关键是Base已派生作为模板参数。template<class T>class Base{...};class Derived : public Base<Derived>{...};CRTP是仅在需要时才实例化类模板的方法,使用静态多态方式。静态多态与动态多态非常相似。但是与使用虚拟方法的动态多态性相反,方法调用的调度将在编译时进行。// crtp.cpp#include <
2020-05-16 19:36:52
416
翻译 Deduction Guides (since C++17)
History在C++98中,使用类模板时,即使从使用中可以明显看出它们的类型,也总是必须提供模板参数:std::pair<int, std::string> p(1729, "taxicab");随着C ++ 11中auto的引入,情况发生了一些变化。可以使用(预先存在的)辅助函数make_pair创建变量,从而避免重复类型:#include <iostream>#include <type_traits>#include <utility>
2020-05-10 23:45:58
558
翻译 Class template argument deduction (CTAD) (since C++17)
history在C++98中,使用类模板时,即使从使用中可以明显看出它们的类型,也总是必须提供模板参数:std::pair<int, std::string> p(1729, "taxicab");随着C ++ 11中auto的引入,情况发生了一些变化。可以使用(预先存在的)辅助函数make_pair创建变量,从而避免重复类型:#include <iostream>#include <type_traits>#include <utility>
2020-05-10 23:25:26
1240
翻译 The overload Pattern
最近研究有关C ++ 17的书和博客文章时,偶然发现了这种访问模式std::variant:#include <iostream>#include <string>using namespace std;template<class... Ts> struct overloaded : Ts... { using Ts::operator()...;...
2020-04-30 00:12:16
329
转载 C++17 type-safe 的 union:variant
转载自:https://kheresy.wordpress.com/2017/10/16/cpp17-variant/前言std::variant 是 C++17 中,一個新加入標準函式庫的 template 容器;他的概念基本上是和 union(參考)一樣,是一個可以用來儲存多種型別資料的容器。比如說:std::variant<int, double> v;就代表 v ...
2020-04-28 23:12:09
506
原创 Flexible Array - 柔性数组
灵活数组成员是一种特殊的数组类型,其中具有多个命名成员的结构的最后一个元素具有不完整的数组类型;也就是说,数组的大小未在结构中明确指定。这种“struct hack”在实践中得到了广泛使用,并得到了各种编译器的支持。因此,已经使用了各种不同的语法来声明灵活的数组成员。对于符合标准的C实现,请使用C标准保证有效的语法。the C Standard, 6.7.2.1, paragraph 18中定...
2020-04-27 22:19:58
836
1
原创 pimple idiom
我们知道,当对头文件进行更改时,包括它的所有源都需要重新编译。在大型项目和库中,由于即使对实现进行了很小的更改,每个人都必须等待一段时间才能编译代码,这可能会导致构建时间问题。解决此问题的一种方法是使用PImpl Idiom,它将实现隐藏在hearer中,并包括一个可立即编译的接口文件。The PImpl Idiom (Pointer to IMPLementation) 是一种用于将实现与接...
2020-04-23 23:17:58
322
翻译 Liskov substitution principle (里氏替換原則)
文章目录背景Tom's Penguin Problem背景可替代性是面向对象程序设计中的一项原则,其指出在计算机程序中,如果S是T的子类型,则类型T的对象可以用类型S的对象替换 (即类型T的对象可以用子类型S的任何对象替换 (i.e.向上转型))而不更改程序的任何期望属性(正确性,任务执行等)。更正式地讲,Liskov替换原理(LSP)是子类型关系的特定定义,称为(强)行为子类型化,最初是由...
2020-04-23 20:03:25
347
原创 Object slicing(对象切片)
关于对象切片Thinking in C++中有这么一段话:If you upcast to an object instead of a pointer or reference, something will happen that may surprise you: the object is “sliced” until all that remains is the subobject...
2020-04-21 22:50:54
873
翻译 Most vexing parse (最烦人的解析)
Most vexing parse 在 Scott Meyers 在 Effective STL(2001)中 首次使用 。它在 C++ language standard 的 8.2节中正式定义。Example with classesAn example is:#include <iostream>class Timer {public: Timer(){};};...
2020-04-21 21:01:22
254
翻译 Monads in C++ (函数编程)
C ++中的Monad?帖子的名字真奇怪。但这并不奇怪。使用std :: optional C ++ 17可获得monad。Eric Niebler的范围库和扩展的期货也是monads。对于这两者,我们都可以期望在C ++ 20中实现。Bjarne Stroustrup在2016年C ++会议上的“秘密闪电演讲”中介绍了Concepts Lite的一些概念,这些概念我们很可能会在C ++ 20中...
2020-04-12 23:16:41
838
翻译 monadic optional expressions(使用可选monad进行多重错误处理)
错误处理是编程中一个广泛的主题,尤其是在C ++中。我今天想向您介绍的方面是如何处理多个错误。让我们考虑以下4个功能:int f1(int a);int f2(int b, int c);int f3(int d);int f4(int e);f4( f4( f3( f2( f1(42), f1(55) ) ) ) )应该依次调用这些函数:将f1的结果(两次调用)传递给f2,然后...
2020-04-12 15:29:25
186
翻译 Event Handling and Condition Variables
本文中我们将讨论多线程中事件处理的需求以及使用条件变量实现功能。Event Handling有时,线程需要等待事件发生,例如条件变为真或任务由另一个线程完成。例如,假设我们正在构建一个基于网络的应用程序。该应用程序执行以下任务,与服务器进行一些握手从XML文件加载数据。对从XML加载的数据进行处理。正如我们看到的,任务1不依赖于任何其他任务,而任务3依赖于任务2。因此,这意味着任务...
2020-04-05 00:16:49
129
原创 std::mem_fn 成员指针包装器
std::mem_fn类成员函数指针(member function pointer),是C++语言的一类指针数据类型,用于存储一个指定类具有给定的形参列表与返回值类型的成员函数的访问信息。基本上要注意的有两点:函数指针赋值要使用 & 。( 与静态成员函数或自由函数不同,非静态成员函数不会隐式转换为成员函数指针(this)。)使用 .*(实例对象)或者 ->*(实例对...
2020-04-04 19:22:11
1063
Google C++ International Standard.pdf
2018-12-27
C++ 整型数组连续输入
2018-09-21
TA创建的收藏夹 TA关注的收藏夹
TA关注的人