自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

原创 为什么要学习汇编代码一(更加深刻理解芯片的启动流程)

更加深刻理解芯片的启动流程背景介绍问题引入问题分析进阶的问题探讨结论背景介绍本文章探讨的是cortex M 系列的芯片的启动过程,其它的相关的芯片可以进行借鉴。本文所引述的代码位cortex M0相关连的代码,参考的文章是arm官方的原版的文档。问题引入> 笔者是芯片原厂的软件开发的组长,由于长时间和一些运用我们芯片做方案的方案商的开发人员接触,发现做方案的开发人员对汇编代码和芯片本身的理解比较欠缺。由于这些欠缺,可以很明显的看出在解决一些隐晦的bug和代码编写的性能方面显得非常吃力。问

2020-07-22 14:30:51 1704 2

原创 Bluetooth sig mesh 杂谈一(为什么会采用model的概念)

为什么会采用model的概念背景介绍为什么会采用model 这个概念哲学方面1、万物都能抽象成模型软件方面进阶思考背景介绍本文主要参考mesh profile 和 mesh model specification,本文的内容也仅仅是一个思维的探讨。若转载请标明出处:为什么会采用model 这个概念本文主要从背后的哲学和软件实现方面进行探讨。哲学方面我们都知道现在很多软件框架的设计都是有一套背后的哲学逻辑。比如Python 程序语言设计之前也是有一套哲学思想支持着,下面设摘自网友的说法。————

2020-07-23 21:35:38 1676

原创 为什么要学习汇编代码二(函数的参数的工作原理)

优雅编写高质量的代码背景问题引入函数参数的选择避免函数参数超出4个参数,如果每个参数是一个字或者更小的情况下如果的确需要超过4个参数,请保证这个函数完成了一个比较高效的内容,来抵消因为栈的额外消耗的缺点。请把把相关的参数放在一个结构体,然后用指针的方式进行调用。减少long 的参数应用,其实不只是long,大于一个字的参数都需要更多的寄存器来表示。软件的浮点数,少用double 参数避免使用可变参数的函数,因为函数需要把所有的参数都要放到栈上。进阶问题总结背景本文章代码运行的对象是cortex M0的处

2020-07-22 16:25:23 406

原创 如何确定嵌入式软件所需最小的栈空间大小

为什么嵌入式软件系统很难评估出所需栈的实际大小?栈的原理为什么嵌入式软件系统很难评估出所需栈的实际大小1. 难找到最大深度的函数2.可抢占的中断让这个问题变得更加复杂如何设置栈的大小没有中断驱动的情况,且很容易找到最大深度的函数有中断驱动的情况,且很难找到最大深度的函数一有中断驱动的情况,且很难找到最大深度的函数二栈的原理如上图:栈是一块内存区域主要有如下功能,增长方向是向下生长1.保存局部变量2.保存返回地址(函数调用深度越大,栈的开销越大)3.函数参数,一般情况下函数的参数是R0-R3(co

2020-07-17 18:39:01 1518

原创 没有人能比快递员更懂通信协议(sig mesh协议栈之网络架构)

SIG BLE MESH 视频 教程https://edu.csdn.net/course/detail/27321前言:本文的内容都是博主自己猜测和联想的,存在一些漏洞和偏差再所难免。我不是标题党,大家细细品下面的内容。1、BLE SIG MESH 网络框架图上图是SIG MESH官方文章的一个截图,是不是看上起很蒙,这和OSI模型或者TCP/IP模型一样啊,我大学的时...

2020-01-07 21:12:05 2011

原创 Ble Sig Mesh 协议从零到深入

BLE Sig MESH视频教程https://edu.csdn.net/course/detail/27321大家好,上面的链接是我在csdn视频教程板块分享的视频教程。第一章时长20分钟免费观看。【课程介绍】本课程主要深度剖析蓝牙技术联盟关于蓝牙组网(mesh)的技术,相比于Zigbee,Wifi等技术,使用蓝牙组网是近几年非常火的一个新技术方案,阿里的天猫精灵、小米的小爱...

2020-01-02 21:31:41 4152 9

原创 蓝牙 GAP 最细致的分析上

SIG BLE MESH 视频 教程https://edu.csdn.net/course/detail/27321一、前言:GAP全名generic access profile,GAP主要做了什么呢?1、首先它是一个最基础的profile,相信大家也听说过蓝牙有很多profile。GAP是最基本的profile,其他的profile都是间接或者直接的引用了这个profile。2...

2018-07-01 12:47:58 12742 1

原创 ble协议栈从零开始八(security manager 最细致分析上)

SIG BLE MESH 视频 教程https://edu.csdn.net/course/detail/27321​​​​​​​一、前言ble协议栈最难的一章来了,我尽自己的努力把这一章写好。安全管理就是使用秘钥的分配方法来识别和加密链路,简单的说SM提供了一个配对的方法,让MASTER和SLAVE(配对是在建立连接过后的动作)拥有一对key,以后的数据链路的交互可以用这个key加密和解...

2018-06-24 22:16:55 4656 3

原创 ble协议栈从零开始七(linklayer 之 privacy)

SIG BLE MESH 视频 教程https://edu.csdn.net/course/detail/27321​​​​​​​一、前言:前面已经写了linklayer层的4篇文章了,感觉是自己给自己挖了坑了,至少还需要3篇才能写的完。自己挖的坑自己填吧,之前有一章说了白名单的策略,这一章我们来说privacy的策略。白名单策略说实话只能防君子,别人耿直的不把自己的地址伪装成你的whit...

2018-06-21 23:36:53 2140

原创 ble协议栈从零开始六(linklayer 之 连接)

SIG BLE MESH 视频 教程https://edu.csdn.net/course/detail/27321​​​​​​​一、前言:前面已经陆续写了linklayer的上中下三篇文章,本来以为再加一片完结篇就能写完,后面发现内容还是很多。本章主要写和连接状态相关的内容。这一章很重要!!!思前想后,决定从3个维度来描述linklayer 的连接相关的内容。1)连接开始创建的过程...

2018-06-21 15:32:37 2277

原创 ble协议栈从零开始五(linklayer细致分析下)

SIG BLE MESH 视频 教程https://edu.csdn.net/course/detail/27321​​​​​​​1、前言:本章主要详细的展开linklayer的如下的内容1)什么是白名单?,以及白名单的策略2)详细的说明advertising state ,scanning state ,connection state下的流程,以及时序的要求。2、白名单...

2018-06-21 00:35:46 2854

原创 ble协议栈从零开始四(linklayer 细致分析中)

SIG BLE MESH 视频 教程https://edu.csdn.net/course/detail/27321​​​​​​​1、前言:本章节主要从linklayer层的设备地址,空中报文格式,以及数据流的接收和发送2、SPEC的参考章节在SPEC core_4.2表红圈的地方介绍了本章节的内容。3、ble设备地址少废话先看东西从这张图我们可以看到出,...

2018-06-18 23:57:05 2836 1

原创 ble协议栈从零开始三(linklayer 细致分析上)

SIG BLE MESH 视频 教程https://edu.csdn.net/course/detail/27321​​​​​​​1、引言:ble的协议栈中linklayer层到底干了什么呢?linklayer层就是发送和接受数据和控制信息。虽说只是发送和控制数据和控制信息,于此衍生出来很多问题,就数据本身需要定义广播报文和数据报文的格式,如果接受数据发生错误需要校验,如果发送数据失败...

2018-06-18 00:24:22 3675 1

原创 ble协议栈从零开始二(physical layer 详细探讨)

SIG BLE MESH 视频 教程https://edu.csdn.net/course/detail/27321​​​​​​​1.引言本章节主要探讨蓝牙的物理层,物理层的协议栈的分析,以及实际芯片设计时候的原理。物理层作为协议栈的最底层,它的作业至关重要。2.spec章节参考上图表红圈是core_4.2关于物理层的介绍的地方,我们现在只看le的部分,不去看BR\EDR...

2018-06-17 00:37:35 5091 3

原创 ble协议栈从零开始一(学习方法和基本概念)

SIG BLE MESH 视频 教程https://edu.csdn.net/course/detail/27321​​​​​​​前言:目前市面上的低功耗的芯片非常多,比较出名的有nordic,ti,dialog等,国产的有bluex,丰加等。个人觉得不管是学习还是开发,nordic的芯片都是最好的。nordic的编码风格对用户非常友好,上层的API函数的抽象封装非常易懂。如果你是初学者建...

2018-06-09 01:41:06 14532

转载 Linux下STM32开发环境的搭建

Linux下STM32开发环境的搭建目录一、概述  1.目的  2、开发环境描述  3、Eclipse构建的STM32集成开发环境结构  4、GDB / GDB Server 调试模型二、搭建步骤 三、详细的搭建过程  1、安装eclipse IDE for C/C++ developers  2、安装交叉编译链arm-none-eabi-gcc   3、安装JLink驱动  4、安装GNU AR...

2018-03-26 21:50:58 1094

原创 Linux下的几种桌面主题比较

Linux由于其开源的特性,桌面环境出了好几种。不像Windows一样有一个相对统一的桌面环境,Linux的桌面显得比较乱,如果不了解一下这些桌面环境,那人们会对Linux的桌面选择比较迷茫。1、gnome gnome可能是现在用得最多的桌面环境了,各个linux发行版都不约而同采用它作为默认版本的桌面环境,界面很漂亮。目前大多gnome3,而很多人还是喜欢gnome2的设计。于是gnome2在确

2017-04-27 10:17:37 5107

原创 return、exit、_Exit、_exit区别(unix系统)

return终止一个函数并给该出函数的返回值,如果函数是main函数则终止一个进程并给出进程的返回值。 exit终止一个进程。 **注意:exit函数总是执行一个标准的I/O库的清理和关闭的操作例如对于打开的流调用fclose函数等。 _exit和_Exit终止一个进程立即进入内核。**#include <stdio.h>#include <stdlib.h>#include <unist

2017-04-25 12:09:49 834 1

转载 unicode 的geek解释

很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们看到8个开关状态是好的,于是他们把这称为”字节“。再后来,他们又做了一些可以处理这些字节的机器,机器开动了,可以用字节来组合出很多状态,状态开始变来变去。他们看到这样是好的,于是它们就这机器称为”计算机“。开始计算机只在美国用。八位的字节一共可以组合出256(2的8次方)种不同的状态。 他们把其中的编号

2017-04-17 21:06:58 272

转载 程序断点(program breakpoint)和数据断点(data breakpoint)

如果你做嵌入式开发,那你一定得对程序断点(program breakpoint)和数据断点(data breakpoint)有所了解。程序断点你可能还听说过,但数据断点就有可能不是很了解了,更有可能不知道如何去用了!现在,就让我们去了解所有类型的“断点”吧!程序断点就是指处理器指令断点,通俗的说就是:当程序运行到某个地方时,我们希望程序停下来,即程序“断”了!停下来的目的,就是给我们检查当前程序运行

2017-04-14 14:12:37 1860

原创 C语言gets的bug(丢弃掉gets)

本函数可以无限读取,不会判断上限,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。如果溢出,多出来的字符将被写入到堆栈中,这就覆盖了堆栈原先的内容,破坏一个或多个不相关变量的值。这个事实导致gets函数只适用于玩具程序,为了避免这种情况,我们可以用fgets(stdin) (fgets实际上可以读取标准输入(即大多数情况下的键盘输入),具体参阅fgets词条)来替换gets

2017-04-14 12:08:33 4112

转载 struct和typedef struct

分三块来讲述:  1 首先://注意在C和C++里不同    在C中定义一个结构体类型要用typedef:typedef struct Student    {    int a;    }Stu;    于是在声明变量的时候就可:Stu stu1;(如果没有typedef就必须用struct Student stu1;来声明)    这里的Stu实际上就是stru

2017-04-13 12:27:47 280

转载 C指针与const的那些事

C语言功能强大而丰富,还表现在const与指针的结合使用上,对不同的问题,它提供不同的保护,特别有用的是指向常量的指针本文地址:http://www.cnblogs.com/archimedes/p/c-const-point.html,转载请注明源地址。指向常量的指针可以将指针指向常量,这就意味着不能通过指针修改它所引用的值int num = 5;const

2017-04-13 10:11:25 437

原创 Unix文件 I/O(不带缓冲区的)上

简介Unix系统大多数文件i/o只需要:open、read、write、lseek、close这几个函数。但是某些时候我们也需要fcntl、ioctl、sync等函数配合使用。这些函数都是不带缓冲区的I/0(unbuffered I/O),术语不带缓冲的指的是每个read和write都是内核中的一个系统调用。这些函数都是POSIX和single UNIX Specification的组成部分。

2017-04-07 09:49:23 609

转载 Linux开源项目2017最期待发行的版本

如果你经常光顾 Distrowatch 网站,你会发现每一年的 Linux 系统流行度排行榜几乎都没啥变化。排在前十名的一直都是那几个发行版,而其它一些发行版也许现在还在排行榜中,到下一年年底就有可能不在了。关于 Distrowatch 的一个大家很不了解的功能叫做候选列表,它包括以下类型的发行版:还未进行评审组件缺失或有缺陷相关的英文资料不够丰富该项目好像都没人进行维护一些非常

2017-04-07 09:49:13 431

原创 UNIX标准

背景人们在UNIX编程环境和C 程序设计语言的标准化方面已经做了很多工作。虽然UNIX应用程序在不同的UNIX操作系统版本之间进行移植相当容易,但是2 0 世 纪 80年代UNIX版本种类的剧增以及它们之间差别的扩大,导致很多大用户( 如美国政府)呼吁对其进行标准化。对于我们程序员来说,了解基本的标准和背景是有必要,本文主要对ISO C    POSIX    Sigle UNIX Spec

2017-04-07 09:49:08 501

原创 Unix环境编程基础下

Unix出错处理当UNIX系统的函数出错时,通常会返回一个负值。我们判断函数的返回值小于0表示出错了,注意我们并不知道为什么出错。例如我们open一个文件,返回值-1表示打开失败,但是为什么打开失败呢?原来UNIX维护一个全局变量errno,error通常被设定成具有特定信息的值。回到之前如果文件打开失败,此时读取errno的值为EACCES,表示产生了权限问题。ok此时我们只要检查文件的权限

2017-04-07 09:49:02 378

原创 UNIX编程基础上

时光飞逝,转眼已经毕业快2年了,觉得自己学的东西多却不精。对此深深的思考一下,觉得有必要连载unix环境编程文章,以此激励自己学习。在此立贴为证,2天一篇博客从零开始阐述unix的环境编程。参考书籍UNIX环境高级编程第三版下一篇UNIX编程基础下:http://www.cnblogs.com/smartxuchao/p/6658060.html如上图1.1描述的是一个UNIX的体系结构。

2017-04-07 09:48:55 474

原创 insmod: can't insert 'led.ko': invalid module format详细解释

insmod: can't insert 'led.ko': invalid module format之前在Imx257学习版固件编写的驱动想直接移植imx257核心板的开发板上。以为2个板子的源码的引脚定义一样就没什么问题了。殊不知问题很多。我们输入dmesg |tail 在log中我们看到2个版本不匹配。在这儿我们需要明白一个原理,我们编译驱动程序的M

2016-12-14 17:30:50 10369

原创 cat: can't open '/lib/modules/2.6.35.3-571-gcca29a0/modules.dep': No such file or directory

在使用modprobe 或者modinfo  cat: can't open '/lib/modules/2.6.35.3-571-gcca29a0/modules.dep': No such file or directory我们进入这个提示的目录发现有modules.dep,哈哈当然啦2.6.35.3-571-gcca29a0这个目录没有,那么是不是我们新建一个这个目录

2016-09-14 21:32:03 1567

转载 Linux环境下的IDE,极大提升编程效率

"一个真正的程序员是不用IDE(译者注:集成开发环境)的,他们都是用带着某某插件的文本编辑器来写代码。"我们总能在某些地方听到此类观点。然 而,尽管越来越多的人同意这样的观点,但是一个IDE仍然非常有用,它设置简单,使用起来也很方便,因此不能比这样更合适编写一个项目了。所以鉴于这点, 在这里我想给大家列一份在Linux平台上比较好的C/C++ IDE清单。为什么特地说C/C++呢?因为C语言是我最

2016-08-01 15:19:29 10326

原创 So Easy-Ntp嵌入式软件移植

一、导语和准备工作Ntp是一种对时的软件,对客户端来说我们只要输入ntpdate IP,如ntpdate 192.168.1.254(192.168.1.254是ntp服务器,window电脑激活自带ntp服务器即可,Linux输入apt-get install ntp安装ntp服务器软件)。1、我们需要一个宿主机,一般是Linux的虚拟机也可以是真正的Linux机器。我们

2016-07-01 11:30:20 798

原创 inux的进程-进程的概念和fork创建进程

一、  什么是进程?初学者,可能认为程序或者一段代码就是一个进程。其实这样说是很不全面的,进程简单的说就是一个正在运行的程序,正在运行的程序需要满足一下的2个条件。1、需要一个代码2、需要运行这个代码环境和资源从下面的一段代码,我们来分析这段代码运行时产生的进程所需要的环境资源Hello.c3、 #include4、 char *p="hello"

2016-06-05 16:37:09 597

原创 Linux线程的创建

一、线程与进程的区别1、线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。2、进程是资源分配的基本单位。所有与该进程有关的资源,都被记录在进程控制块中。以表示该进程拥有这些资源或正在使用它们。3、进程也是抢占处理机的调度单位,它拥有一个完整的虚拟地址空间。当进程发生调度时,不同的进程拥有不同的虚拟地址空间,而同一进程内的

2016-06-05 15:33:18 1010

原创 STM32GPIO口8种模式细致分析(类比51单片机)

关于STM32GPIO口的8种工作模式,我们先引出一些问题?STM32GPIO口如果既要输入又要输出怎么办?1、浮空输入模式  上图红色的表示便是浮空输入的过程,外部输入时0读出的就是0,外部输入时1读出的就是1,外部没有输入IO处于阻塞读不出电平状态。用处:感觉在信号处理方面用的比较好,比如在读取一段一段的波形,可以清晰的知道什么时候是0信号,什么

2016-05-05 18:08:30 8696 8

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除