自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 BLE Mesh

蓝牙mesh包括一些规则,用于限制设备重新中继最近看到的消息,并防止消息通过多跳中继。

2022-06-04 15:11:32 245

原创 BLE Profile

BLE

2022-06-03 20:30:46 465

原创 BLE PHY

BLE PHY

2022-06-03 13:45:50 295

原创 BLE连接 --Link layer

BLE协议栈--Link Layer

2022-06-02 18:59:32 653

转载 蓝牙基础技术(二)

一、蓝牙的技术指标1.蓝牙BT射频概述蓝牙射频测试配置包括一台测试仪和被测设备(EUT, Equipment Under Test),其中测试仪作为主单元,EUT作为从单元。两者之间可以通过射频电缆相连也可以通过天线经空中传输相连。测试仪发送LMP指令,激活EUT进入测试模式,并对测试仪与EUT之间的蓝牙链路的一些参数进行配置。如测试方式是环回还是发送方式,是否需要进行跳频,分组是单时隙分组还是多时隙分组,分组的净菏是PN9,还是00001111、01010101。测试模式是一个特殊的状态,出于安全的考

2022-05-30 17:11:41 2075

转载 蓝牙基础技术(一)

1、蓝牙简介蓝牙特点:蓝牙是一种短距无线通信的技术规范。蓝牙的特点可归纳为以下几点:(1)全球范围使用:蓝牙工作在2.4GHz的ISM频段全球大多数国家ISM频段的范围是2.4-2.4835GHz,使用该频段无需向各国申请许可。(2)同时可传输语音和数据:蓝牙采用电路交换和分组交换技术,支持异步数据信道、三路语音信道以及异步数据与同步语音同时传输的信道。每个语音信道数据速率为64kbit/s,语音信道编码采用脉冲编码调制(PCM)或连续可变斜率增量调制(CVSD)方法。当采用非对称信道传输数据时,速率

2022-05-19 21:55:04 4435

转载 链表的反转

链表反转定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL题解题目要反转链表,可以通过迭代(双指针)和递归来做,这里的双指针不是用于判断链表是否有环的快慢指针,而是普通的双指针。方法一:迭代(双指针)具体操作分别定义两个均指向空的指针 (pre/next);next用于记录当前节点的下一个节点(当前节点与当前

2021-09-09 10:52:07 397

原创 SPI、UART、RS232、RS485、IIC 5种嵌入式经典通信总线协议

1、UARTUART、通用异步收发传输器。是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。并行接口是指数据的各位同时进行传送;而串行接口是指数据一位位地顺序传送。并行接口的传输速度快,不适用于远距离通信;而串行接口特别适用于远距离通信,但传送速度较慢。异步通信和同步通信的主要区别:异步通信在发送字符时,所发送的字符之间的时间间隔可以是任意的;同步通信的通信双方必须先建立同步。单工:简单的说就是一方只能发信息,另一方则只能收信息,通信是单向的。半双工:比单工先进一点,

2021-09-05 21:54:37 4275 1

转载 不调用库函数实现strcpy

题目:  已知strcpy函数的原型是:  char * strcpy(char * strDest,const char * strSrc);  1.不调用 库函数 ,实现strcpy函数。  2.解释为什么要返回char *。1.strcpy的实现代码char * strcpy(char * strDest,const char * strSrc){  char * strDestCopy=strDest; //[3]  if ((strDest==NULL)||(strSrc=

2021-08-15 20:47:28 2696

原创 HTTP协议和编程实现

1、HTTP协议http协议是建立在TCP/IP协议之上应用层协议,默认端口为80或者8080http协议的的特点是无状态,无连接。在访问数据的时候才进行连接,不是长连接。http协议的报文传输的是ASCII码,在TCP/IP协议之上,主要主要分为三部分请求行、请求头、请求体请求行第一行,包含三个信息:请求方式,url,http协议版本(在www上,每一信息资源都有统一的且在网上唯一的地址,该地址就叫URL)GET 请求:请求方式:GET url:/books/?sex=man&na

2021-08-09 13:44:11 1664

原创 socket、tcp/ip、http三者之间的区别和原理

网络七层模型OSI 模型(Open System Interconnection model)是计算机和网络在世界范围内实现互联的标准框架。它将计算机网络体系结构划分为七层,每层都可以提供抽象良好的接口。1、物理层:例如线路、无线电、光纤、信鸽物理层负责最后将信息编码成电流脉冲或其它信号用于网上传输;eg:RJ45等将数据转化成0和1;2、数据链路层:例如以太网、令牌环、HDLC、帧中继、ISDN、ATM、IEEE 802.11、FDDI、PPP数据链路层通过物理网络链路提供数据传输。不同的数

2021-08-07 14:24:09 2645

原创 数据结构和算法

1、栈和队列栈:后进先出的线性表,

2021-08-04 21:25:56 215 2

原创 2021-07-30嵌入式学习---智能家居项目

1、智能家居功能拆分2、设计模式智能家居代码架构—简单工厂模式设计模式:代码设计经验的总结,稳定、拓展性更强,是一系列编程思想。有23种,代码更容易被他人理解、保证代码可靠性、程序的重用性。设计模式通常描述了一组相互紧密作用的类与对象。算法不是设计模式,因为算法致力于解决问题而非设计问题。类和对象:类是一种用户定义的引用数据类型,也称类类型。结构体对象:类的一种具象工厂模式:这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴

2021-07-30 13:51:11 2549 3

原创 2021-07-28嵌入式学习---驱动

一个字符设备或者块设备都有一个主设备号和次设备号。主设备号和次设备号统称为设备号。主设备号用来表示一个特定的驱动程序。次设备号用来表示使用该驱动程序的各设备。主设备号用来区分不同种类的设备(华为),而次设备号用来区分同一类型的多个设备(华为mate40)。从用户态空间贯穿到底层驱动Linux系统中对于文件的所有操作离不开三个通用的API函数:open、read、wirte,例如使用函数open打开一个引脚4文件 pin4 到与底层硬件交互时,一共会经过以下三步:在用户态空间调用函数 OPEN

2021-07-28 15:31:18 348

转载 2021-07-23嵌入式学习---Linux内核

1、Linux内核结构

2021-07-28 09:45:24 140

原创 2021-07-23嵌入式学习---文件系统

1、文件系统文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统。文件系统由三部分组成:文件系统的接口,对对象操纵和管理的软件集合,对象及属性。2、文件系统的种类FAT、VFAT、NTFS、EXT1/2/3/4 、HFS…FAT是文件配置表,FAT文件系统限制使用8.3格式的文件命名规范,这就是说,在一个文件名中,句点之前部分的最大长度为8个

2021-07-23 10:59:13 364

原创 新鲜的展讯笔试2021-07-20

1、线性结构是一个有序数据元素的集合。常用的线性结构有:线性表,栈,队列,双队列,数组,串。非线性结构,数学用语,其逻辑特征是一个结点元素可能有多个直接前趋和多个直接后继。常见的非线性结构有:二维数组,多维数组,广义表,树(二叉树等)。2、ARM程序的组成此处所说的“ARM程序”是指在ARM系统中正在执行的程序,而非保存在ROM中的bin映像(image)文件,这一点清注意区别。一个ARM程序包含3部分:RO,RW和ZIRO是程序中的指令和常量RW是程序中的已初始化变量ZI是程序中的未初始化的

2021-07-22 20:17:58 358 1

转载 2021-07-17嵌入式笔试

嵌入式启动方式:1、有片内ROM启动2、片外flash启动(又分为并口/SPI等不同的接口形式)3、片外EEPROM启动甚至是RAM启动如AT91RM9200就有片内ROM启动和片外并口flash启动TI F2812就有并口flash启动和IIC EEPROM启动TI C6416只有RAM启动,需要主控CPU将程序下载到RAM中,再触发复位TI C6488启动方式更是多达五六种 每种都有不同的适用场合 可见多么强大PPC440启动方式更是多达8种通常都是通过硬件管脚控制的 可以设置跳线选择

2021-07-20 09:17:16 245

转载 笔试LeetCode

1、在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。解法1:排序先对数组排序,再遍历一遍即可解法2:哈希对数组进行哈希映射,找到第二次出现的元素即可1.排序int cmp(const void* a, const void* b) { return *(int*)a - *(int*)b;}int findRepeatNumber(int* num

2021-07-19 11:13:59 142

原创 2021-07-15嵌入式学习----树莓派Linux内核

1、Linux内核源代码目录树结构。arch:包含和硬件体系结构相关的代码,每种平台占一个相应的目录。和32位PC相关的代码存放在i386目录下,其中比较重要的包括kernel(内核核心部分)、mm(内存管理)、math-emu(浮点单元仿真)、lib(硬件相关工具函数)、boot(引导程序)、pci(PCI总线)和power(CPU相关状态)。block:部分块设备驱动程序,内存,flash。crypto:常用加密和散列算法(如AES、SHA等),还有一些压缩和CRC校验算法。Documentat

2021-07-15 21:41:46 218

原创 2021-07-12嵌入式学习---交叉编译

1、交叉编译交叉编译是在一个平台上生成另一个平台上的可执行代码。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。举例:我们在Ubuntu上面编写树莓派的代码,并编译成可执行代码,如a.out,是在树莓派上面运行的,不是在Ubuntu Linux上面运行。2、为什么要交叉编译1.有时是因为目的平台(C51)上不允许或不能够安装我们所需要的编译器,而我们又需要这个编译器的某些特征;2.有时是因为目的平台上的资源贫乏,无法运行我们所需要编译器;3.有时又是因为目的

2021-07-15 20:01:15 402

原创 2021-07-09嵌入式学习---树莓派wiringPi库(与语音模块通信)

1、树莓派wiringPi库wiringPi是一个很棒的树莓派IO控制库,使用C语言开发,提供了丰富的接口:GPIO控制,中断,多线程,等等1.安装进入 wiringPi的github (https://git.drogon.net/?p=wiringPi;a=summary) 下载安装包。点击页面的第一个链接的右边的snapshot,下载安装压缩包。然后进入安装包所在的目录执行以下命令:>tar xfz wiringPi-98bcb20.tar.gz //98bcb20为版本标号,可

2021-07-10 16:44:52 361 1

原创 2021-07-09嵌入式学习---Linux库概念及相关编程

1、分文件编程一个项目需要实现很多模块功能,如果把这些模块代码都塞进main函数里,会显得程序臃肿,不美观。针对这一现象,可引入分文件编程。例子:简单算法//创建.c文件,编写函数代码,suanfa.c#include <stdio.h>int jiafa(int a, int b){ return a+b;}int jianfa(int a, int b){ return a-b;}int chengfa(int a, int b)

2021-07-09 16:00:35 96

原创 2021-07-08嵌入式学习---网络编程

1、TCP/UDP对比1.TCP面向连接(如打电话要先拨号建立连接),UDP是无连接的,即发送数据之前不需要建立连接2.TCP提供可靠的服务。通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达,UDP尽最大努力交付,即不保证可靠交付。3.TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流,UDP是面向报文的,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,视频会议)4.每一条TCP连接只能是点到点的,UDP支持一对一,一对多,多对一

2021-07-08 21:11:20 245 1

原创 2021-07-02嵌入式学习---线程

1、线程与进程  典型的UNIX/Linux进程可以看成只有一个控制线程:一个进程在同一时刻只做一件事情。有了多个控制线程后,在程序设计时可以把进程设计成在同一时刻做不止一件事,每个线程各自处理独立的任务。    进程是程序执行时的一个实例,是担当分配系统资源(CPU时间、内存等)的基本单位。在面向线程设计的系统中,进程本身不是基本运行单位,而是线程的容器。程序本身只是指令、数据及其组织形式的描述,进程才是程序(那些指令和数据)的真正运行实例。  线程是操作系统能够进行运算调度的最小单位。它被包含在进

2021-07-02 10:52:09 348

原创 2021-06-30嵌入式学习---进程间通信

进程间通信 (IPC)进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。一、管道管道,通常指无名管道,是 UNIX 系统IPC最古老的形式。1、特点:它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端。它只能用于具有亲缘关系的进程之间的通信(也是父子

2021-06-30 21:38:11 327 2

原创 2021-06-29嵌入式学习---popen函数

popen函数popen通过创建管道的方式来启动一个进程,并调用 shell. 因为管道是被定义成单向的, 所以 type 参数只能定义成只读或者只写, 不能是两者同时, 结果流也相应的是只读或者只写#include <stdio.h>FILE *popen(const char *command, const char *type);int pclose(FILE *stream);command :参数是一个字符串指针, 指向的是一个以 null 结尾的字符串, 这个字符串包含

2021-06-29 16:01:16 139

原创 2021-06-29嵌入式学习---exec函数和system函数

system函数#include <stdlib.h>int system(const char *command);返回值:成功,则返回进程的状态值,当sh不能执行时,返回127失败返回-1linux版system函数的源码:int system(const char * cmdstring){ pid_t pid; int status; if(cmdstring == NULL){ return (1); } if((p

2021-06-29 11:32:22 201

原创 2021-06-29嵌入式学习---exec族函数

exec族函数函数的作用:我们用fork函数创建新进程后,经常会在新进程中调用exec函数去执行另外一个程序。当进程调用exec函数时,该进程被完全替换为新程序。因为调用exec函数并不创建新进程。(简单说就是,在执行一个主程序跑到一半的时候,可以调用另一个程序执行,原程序就不执行了)exec族函数功能:  在调用进程内部执行一个可执行文件。可执行文件既可以是二进制文件,也可以是任何Linux下可执行的脚本文件。函数族:  exec函数族分别是:execl, execlp, execle,

2021-06-29 10:55:22 186

原创 2021-06-27嵌入式学习----创建进程函数fork原理

使用fork函数创建一个进程#include <sys/types.h>#include <unistd.h>pid_t fork(void);fork函数调用成功,返回两次返回值为0, 代表当前进程是子进程;返回值非负数,代表当前进程为父进程。调用失败,返回-1#include <stdio.h>#include <sys/types.h>#include <unistd.h>int main(){ pid_

2021-06-27 14:14:13 294

原创 2021-06-27嵌入式学习---进程概念

1、什么是程序,什么是进程,有什么区别?程序是静态的概念,gcc xxx.c -o pro 磁盘中生成的pro文件,叫做程序;进程是程序的一次运行活动,通俗点意思是程序跑起来了,系统中就多了一个进程;2、如何查看系统中有哪些进程?a.使用ps -aux指令查看实际工作中,配合grep来查找程序中是否存在某一个进程,b.使用top指令查看cpu占用率等,类似windows任务管理器3、什么是进程标识符?每个进程都有一个非负整数表示的唯一ID,叫做pid,类似身份证。pid = 0;称为交换进

2021-06-27 10:47:03 121

原创 2021-06-26嵌入式学习---open和fopen区别

1、来源不同open是unix系统调用函数(包括Linux),返回的是文件描述符,它是文件描述符表里的索引。fopen是ANSIC标准中的C语言库函数,在不同的系统中应该调不同的内核api,返回的是一个指向文件结构的指针。2、移植性从来源看,fopen是C标准函数,因此拥有良好的移植性,而open是unix系统调用,移植性有限,如windows下相似的功能使用api函数CreatFile。3、使用范围open返回文件描述符,而文件描述符是unnix系统下的重要概念,unix下的一切设备都是文件的

2021-06-26 14:17:01 222

原创 2021-06-25嵌入式学习--文件编程小应用

#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <stdio.h>#include <unistd.h>#include <string.h>#include <stdlib.h>int main(int argc, char **argv){ int fdSrc;//源文件fd int fdDes;//复制目标

2021-06-25 10:38:17 55

原创 2021-06-25嵌入式学习---Linux文件操作原理

文件描述符1、对于内核而言,所有打开文件都由文件描述符引用。文件描述符是一个非负整数。当打开一个现存文件或者创建一个新文件时,内核向进程返回一个文件描述符。当读写一个文件时,用open和creat返回的文件描述符标识该文件,将其作为参数传递给read和write。按照惯例,Unix shell使用文件描述符:0与进程的标准输入相结合;1与进程的标准输出相结合;2与进程的标准错误输出相结合。int main(){ char readBuf[128]; int n_

2021-06-25 10:09:10 92

原创 2021-06-23嵌入式学习杂记---Linux文件编程

1、文件打开/创建编程#include <sys/types.h>//需要包含的头文件#include <sys/stat.h>#include <fcntl.h>//编程格式int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);Pathname: 要打开的文件名(含路径,缺省为当前路径)Flags: O_RDO

2021-06-23 13:50:21 113

原创 项目二、wifi避障小车

1、硬件平台介绍WeMos D1特性:1.基于ESP-8266EX2.Arduino兼容,使用Arduino IDE来编程3.11个I/O引脚4.1个ADC引脚(输入范围0-3.3V)5.板载5V 1A开关电源(高输入电压24V)2、软件平台开发环境介绍Arduino开发环境,和keil对比优点:集成很多开发库如串口、网络、SG90等各种硬件开发接口,迅捷开发自带串口调试工具缺点:程序编译速度慢3、Wemos接入WiFi板载网卡,支持AP(路由),STA(上网设备)模式//作

2021-06-22 15:18:38 726 1

原创 项目一、基于WeMos的感应开盖式垃圾桶

1、硬件平台介绍WeMos D1特性:1.基于ESP-8266EX2.Arduino兼容,使用Arduino IDE来编程3.11个I/O引脚4.1个ADC引脚(输入范围0-3.3V)5.板载5V 1A开关电源(高输入电压24V)2、软件平台开发环境介绍Arduino开发环境,和keil对比优点:集成很多开发库如串口、网络、SG90等各种硬件开发接口,迅捷开发自带串口调试工具缺点:程序编译速度慢3、Wemos的I/O口研究–驱动蜂鸣器VCC–Wemos 3.3VGND–W

2021-06-21 14:11:52 217 1

原创 2021-06-20嵌入式学习杂记---链表

1、链表概念链表–数据结构–>数据存放的思想链表是一种上一个元素的引用指向下一个元素的存储结构,链表通过指针来连接元素与元素,链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。struct Test{ int data; //数据域 struct T

2021-06-20 19:01:20 354 2

原创 2021-06-19嵌入式学习杂记---Linux学习

1、linux发行版ubuntuFedoracetOSArchLinux红旗Linux红帽LinuxLokiMint2、linux创始人 林纳斯.托瓦兹3、Linux简单命令pwd 查看当前文件路径ls 列出当前文件夹有哪些文件mkdir 新建文件夹cd 文件名 进入某文件cd 什么都不加 回到工作目录cd … 退回上层文件夹vi a.c 编辑a程序文件gcc a.c -o a.out 编译a.c文件,并生成a.out编译文件./a.out 运行程

2021-06-19 11:15:43 98

原创 2021-06-17嵌入式学习杂记 ---结构体

1、结构体定义 struct + 关键字struct Student{ int score; char name[128];}; //新手忘带上右大括号后的;结构体使用:struct Student stu1 = {98, "康先森"};访问结构体:printf("结构体:score = %d\n", stu1.score);2、注意野指针char *p;p = (char *) malloc (128); //开辟空间memset(p, '\0', 128); //初始化

2021-06-17 15:07:09 197

空空如也

空空如也

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

TA关注的人

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