摘要: 前面讲解了递归的基本概念,今天我们利用递归的基本思想来了解一下分治算法,分治算法递归的实现方式在大多数算法书籍上都有伪代码,而且网络上也有各种语言的实现版本。本文的主要目的是带大家理解为什么可以使用递归,为什么想到使用递归的方式来解决排序问题。 详情点击该处链接或关注公众号查看。 阅读全文
posted @ 2020-08-24 21:38 Crystal_Guang 阅读(348) 评论(0) 推荐(0) 编辑
摘要: 在环形缓冲区中,我们还使用到了柔性数组。那么什么是柔性数组呢? 点击查看公众号文章详情: 阅读全文
posted @ 2020-06-01 17:56 Crystal_Guang 阅读(382) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2020-05-23 21:17 Crystal_Guang 阅读(0) 评论(0) 推荐(0) 编辑
摘要: 环形缓冲区是一个常用的数据结构,熟练使用环形缓冲区可以加快日常工作中的项目进度。本文会实现一种可用于嵌入式单片机,也可以用于嵌入式Linux和PC软件端的环形缓冲区数据结构,看懂本文,无论你是写PC软件,还是嵌入式软件,即使是单片机,也可以将其应用在你的项目上。 ———这篇文章,可能是我见过和我所能 阅读全文
posted @ 2020-05-19 23:02 Crystal_Guang 阅读(1072) 评论(0) 推荐(0) 编辑
摘要: 本周一练,查看链接,请点击: Crystal 软件学堂:每周一练 阅读全文
posted @ 2020-05-12 12:10 Crystal_Guang 阅读(323) 评论(0) 推荐(1) 编辑
摘要: 由于新申请的公众号已经没有留言功能了,所以如果有疑问,可以在公众号私聊我,也可以在博客园留言还可以加入QQ交流群。 今天的题目很有意思,值得一看哦,查看链接,请点击: Crystal 软件学堂:每周一练 阅读全文
posted @ 2020-04-30 10:04 Crystal_Guang 阅读(324) 评论(0) 推荐(0) 编辑
摘要: AIR INTERFACE PACKETS (空中接口包) 在前面的学习中,我们知道了LL的状态和角色是如何定义的,那么,在某一状态下,和其它设备实体对应状态之间的数据交换机制是什么呢?如何根据上层实体的指令,以及当前的实际情况,完成状态之间的切换?在BLE协议中,这些工作由空中接口协议(Air I 阅读全文
posted @ 2020-04-29 14:22 Crystal_Guang 阅读(1207) 评论(3) 推荐(0) 编辑
摘要: 链路层位于物理层之上,链路层和物理层一样,都属于BLE协议栈的controller(控制器)部分。 在我查看的文章和书籍上,都是一来就介绍链路层的五种状态,这对于笔者这样理解能力不够又喜欢刨根问底的人来说,无疑是一种折磨,那五种状态和链路层有什么关系,为什么网上各种文章还有书籍都是一来就介绍各种状态 阅读全文
posted @ 2020-04-20 16:25 Crystal_Guang 阅读(1336) 评论(2) 推荐(0) 编辑
摘要: BLE的协议可分为Bluetooth Application和Bluetooth Core两大部分,而Bluetooth Core又包含BLE Controller和BLE Host两部分: 为什么BLE协议栈要分层呢? 这个和TCP/IP分层的原因基本一致。以流水线工厂为例,如果一个产品需要经过五 阅读全文
posted @ 2020-04-15 11:22 Crystal_Guang 阅读(2572) 评论(0) 推荐(0) 编辑
摘要: “Bluetooth”一词是斯堪的纳维亚语言词汇Blåtand/Blåtann的英语化。这个词的来源是10世纪丹麦和挪威国王蓝牙哈拉尔(丹麦语:Harald Blåtand Gormsen),借国王的绰号“Blåtand”当名称,直接翻译成中文为“蓝牙”(blå=蓝,tand=牙)。哈拉尔国王因嗜食 阅读全文
posted @ 2020-04-10 17:44 Crystal_Guang 阅读(671) 评论(1) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2020-02-15 16:24 Crystal_Guang 阅读(0) 评论(1) 推荐(0) 编辑
摘要: 有了前面Linux内核复用实现栈的基础,使用相同的思想实现队列,也是非常简单的。普通单链表复用实现队列,总会在出队或入队的时候有一个O(n)复杂度的操作,大多数采用增加两个变量,一个head,一个tail来将O(n)降成O(1)。但是在内核链表中,天然的双向循环链表,复用实现队列,无论出队还是入队, 阅读全文
posted @ 2019-11-10 22:19 Crystal_Guang 阅读(738) 评论(0) 推荐(0) 编辑
摘要: 我们当然可以根据栈的特性,向实现链表一样实现栈。但是,如果能够复用已经经过实践证明的可靠数据结构来实现栈,不是可以更加高效吗? so,今天我们就复用Linux内核链表,实现栈这样的数据结构。 要实现的功能很简单,如下(项目中如需更多功能,可自行添加): 我们先来说,栈的创建: 非常简单,和内核链表一 阅读全文
posted @ 2019-10-20 22:29 Crystal_Guang 阅读(540) 评论(0) 推荐(1) 编辑
摘要: 本文从最基本的内核链表出发,引出初始化INIT_LIST_HEAD函数,然后介绍list_add,通过改变链表位置的问题引出list_for_each函数,然后为了获取容器结构地址,引出offsetof和container_of宏,并对内核链表设计原因作出了解释,一步步引导到list_for_eac 阅读全文
posted @ 2019-10-13 18:40 Crystal_Guang 阅读(15547) 评论(16) 推荐(5) 编辑
摘要: 以前学生时代,只是完成功能就行,进入公司之后,由于产品的特殊性,需要非常考虑效率,发现有以下几个策略(该文不定时更新): hash%length==hash&(length-1)的前提是length是2的n次方 当 B满足是2的n次方时,有 A%B == A & (B-1) 使用后者的效率比求余操作 阅读全文
posted @ 2019-09-30 19:40 Crystal_Guang 阅读(348) 评论(0) 推荐(1) 编辑