- 博客(38)
- 资源 (1)
- 收藏
- 关注

原创 【嵌入式Bluetooth应用开发笔记】第一篇:DBUS概述与蓝牙开发小试牛刀
gdbus是Glib库提供的DBus API的实现,是基于DBus C API的一层封装。Glib是GNOME桌面环境的核心库,提供了许多常用的工具和组件,如事件循环、线程、内存管理、字符串处理、数据结构等。gdbus封装了DBus API,提供了一组更易用的API,比DBus C API更加简洁、直观、安全和高效。使用gdbus开发DBus应用程序,可以大大提高开发效率和代码质量。
2023-03-09 15:22:53
4381
原创 【嵌入式Bluetooth应用开发笔记】第四篇:初探蓝牙HOST及应用开发(持续更新ing)
蓝牙设备可能提供多种不同类型的服务和特性,这些服务和特性通常会以UUID(Universally Unique Identifier,通用唯一标识符)的形式标识。以下是一些常见的服务和特性:* GAP(Generic Access Profile,通用接入规范):提供设备连接和广告功能。* GATT(Generic Attribute Profile,通用属性规范):提供与设备交互的标准方式,包括读取和写入设备属性。
2023-03-28 15:13:44
1826
原创 【嵌入式Bluetooth应用开发笔记】第三篇:初探BLUE ALSA应用开发
BlueALSA(Bluetooth Audio ALSA)是一种将蓝牙音频设备连接到 ALSA 音频系统的桥接程序。它提供了一个蓝牙音频设备的 ALSA 插件,允许使用 ALSA API 直接从蓝牙音频设备读取和写入音频数据,从而使得蓝牙音频设备能够以与其他 ALSA 兼容设备相同的方式工作。通过使用 BlueALSA,用户可以在 Linux 系统上连接蓝牙音频设备,并将其作为标准的 ALSA 设备使用。
2023-03-09 16:47:06
2994
原创 【嵌入式Bluetooth应用开发笔记】第二篇:上手BLUEZ应用开发
BlueZ是一个开源的蓝牙协议栈,提供了丰富的API和工具,支持Linux系统中的蓝牙应用开发。BlueZ提供的API包括D-Bus API、HCI API、L2CAP API、RFCOMM API、SDP API、MGMT API等,开发者可以使用这些API实现自己的蓝牙应用程序。
2023-03-09 16:10:28
3778
原创 【Linux】块设备驱动
块设备驱动程序不同于字符设备驱动程序,它需要将每一次的“读/写”操作放入队列进行优化后在执行,这样做是为了提高读写的效率。比如:在硬件中里有两个磁盘A和B,软件需要读A的磁盘,再跳到磁盘B写,然后跳回A读,这里要两次跳转,当这个跳转次数多的时候将会十分耗时间。而块设备驱动程序将这次操作优化成:将读A磁盘的所有操作完成后在去磁盘B写,这样只需要跳转一次,有点类似与电梯算法(将同次需要下的人运输下去,然后再运输需要上的人)。 接下俩讲讲块设备的框架:当上层App操作文件(read/...
2020-07-01 22:34:49
199
原创 【Linux】输入子系统——分离分层概念
在输入子系统里input.c会向上提供给App一个接口,将底层相关的代码分层开来,而底层的代码有分离出硬件相关和软件相关的代码。 了解了概念,在分离分层概念的基础上产生了总线设备驱动模型(bus_dev_drv),在总线bus下有两个结构体device(硬件相关)和driver(驱动相关),分别将device和driver放入dev链表和drv链表。当硬件发生变化的时候,device_add和driver_register会分别取出各自的链表用.match函数进行比较,如果...
2020-07-01 22:25:53
303
原创 【Linux】USB驱动程序
我们把USB设备插入电脑的时候,比如安卓手机,电脑会弹出“发现XXX设备”并自动或者弹出对话框选择安装驱动程序,这一系列的操作都是USB总线驱动程序实现的,总的来说,USB总线驱动程序负责识别USB设别并为之找到对应的驱动设备。而USB总线驱动程序之所以能够是被USB设备的种类取决于PC与USB设备之间的规范:当USB插入的时候,USB总线驱动程序会发出命令,等待USB设备返回相关信息,USB设备收到命令后会根据规范返回自己的信息。 那么在USB总线驱动程序识别由USB设备插入...
2020-06-27 23:43:09
295
原创 【Linux】输入子系统通俗讲解
在字符设备驱动程序里,当我们要调用某个设备驱动的时候需要在应用层做open(“dev/buttons”,O_RDWR)类似的打开操作,这时候需要明确知道“dev/buttons”。但是在实际的开发过程中,应用层不会这么明确的写,比如Qt程序,那么应该如何处理?就要使用Linux现成的驱动:输入子系统 在字符设备里,我们需要自己指定major主设备号、file_operation结构体、在入口出口函数中注册和注销这个结构体。而在输入子系统中,这些都是现成的系统写好的。...
2020-06-27 15:10:43
263
原创 4.4【U-boot根文件系统】 挂载虚拟根文件系统
继续完善根文件系统 cd first_fs/ 创建proc目录:mkdirproc 挂载虚拟根文件系统 加一个配置文件:vi etc/inittab console::askfirst:-/bin/sh //之前...
2019-08-08 15:24:03
358
原创 4.3【根文件系统】构建根文件系统
一、创建文件 1、跳转到/work/nfs_root/first_fs查看:cd/work/nfs_root/first_fs 2、查看文件下的主设备号和次设备号:ls dev/console /dev/null -l 会查看到以下内容crw------- 1 root root 5,1 2010-11-26-07;47 /dev/co...
2019-08-07 17:56:19
227
原创 4.2【根文件系统】init进程分析
一、busybox:ls,cp等命令的组合 执行:ls"/sbin/init 会发现/sbin/init-->../bin/busybox 所以"/sbin/init"也是在busybox进程中,所以要分析这些,需要进入busybox中分析二、uboot启动内核,内核启动应用程序 内核----->../sbit/init/----->应用程序...
2019-08-07 17:55:26
283
原创 4.1【Linux】启动第一个程序
一、分析init_post 从内核启动流程可知,start_kernel最后会启动init_port来执行应用程序的代码(linux-2.6.22.6\init)static int noinline init_post(void){ ...省略...if (sys_open((const char __user *) "/dev/console", O_...
2019-08-07 17:51:18
441
原创 3.5【Linux】字符设备驱动程序
一、驱动框架搭建①写出led_open、led_read②怎么告诉内核 --->定义一个file_operations结构,填充它Linux下的file_operations结构体(linux-2.6.22.6\include\linux)struct file_operations {struct module *owner;lo...
2019-08-07 17:38:00
338
原创 3.3【U-boot分析】内核启动流程分析
内核的最终目的:运用应用程序一、内核编译 一)解压缩:tar xjf linux-linux-2.6.22.6.tar.bz2 一)打补丁: 用 patch 命令, -p 是指需要忽略的目录层数。如果打补丁,在源代码里有显示。 --- 是指源文件。 +++ 是指修改过的文件。 ...
2019-08-07 17:20:54
314
原创 3.2【U-boot分析】从零手写BootLoader
一、BootLoader的目标是启动内核 1)从Flash上把内核读入内存 a)能读取Flash b)初始化内存/时钟/其他 2)启动 a)设置参数 b)跳转执行二、最简单的BootLoader编写步骤 1...
2019-08-07 17:17:11
466
原创 3.1【U-boot分析】Bootloader概念及U-boo分析
一、了解BootLoader BootLoader(引导程序)是硬件上电之后运行的第一段程序,主要用来初始化硬件设备。BootLoader的实现依赖于硬件设备。所以在移植BootLoader的时候需要进行配置。uboot是BootLoader中最著名的一种,它支持的CPU架构比较多,所以被使用的范围也比较广。但是即使这样也不能拿来主义,需要更改相关配置后才能够移植到自己所使用的的板子上。...
2019-08-07 17:13:53
417
原创 Qt使用GRPC之grpc配置
第一步:新建文件夹,命名为:grpcSetting,进入grpcSetting,创建include和staticlib两个文件夹。打开staticlib文件夹,在其下面创建debug和release第二步:打开C:\Program Files (x86)\grpc文件夹,进入下面的include文件,复制其下面的所有文件,粘贴到grpcSetting文件夹下的include第三步:打开...
2019-07-05 10:02:14
6195
原创 Qt使用GRPC之grpc安装
第一步:安装grpc的工具 在此之前你需要已经安装好git、cmake、vs2015(或者其他版本)。后续相关软件的安装步骤我也会陆续写好。 1>打开https://github.com/grpc/grpc网址,点击CloneorDownload,复制网址https://github.com/grpc/grpc.git 2>新建一个文件,命名为grpc...
2019-07-03 17:48:23
4668
5
原创 如何在Windows下使用make等命令
一、下载安装MinGWMinGW下载网页:http://sourceforge.net/projects/mingw/files/latest/download?source=files二、设置环境变量右击计算机->属性->高级系统设置->环境变量,在系统变量中找到PATH,将MinGW安装目录里的bin文件夹的地址添加到PATH里面,(注意:PATH里两个目录之间以...
2019-06-13 15:55:00
12345
6
原创 Qt遇到的问题汇总(持续更新)
问题一:错误:......error: undefined reference to `vtable for xxxxx'解决方法:检查问题所在的类中方法是否加入了该类的类名,例如bool closesql()要加入类名sql得到bool sql::closesql(){如果检查出错误后还是不行,请试着执行下Qmake 然后重新构建问题二:如何把一个类的操作好的数据显示...
2019-04-30 18:28:21
2185
原创 2.3【裸机部分】掌握ARM芯片时钟体系
一、时钟体系结构 CPU-FCLK:400MHZ AHB总线-HCLK:136MHZ APB总线-PCLK:68MHZ 文档解释: 中文翻译:FCLK、HCLK和PCLK,FCLK由ARM920T使用。HCLK用于AHB总线,由ARM920T、内存控制器、中断控制器、LCD控制器、DMA和USB主机块。PCLK用于APB总线,用于WDT、...
2019-04-06 12:24:48
511
原创 I2C读写CAT24WCxx存储器
目录一、STM32模拟I2C通讯 1.1 I2C总线的数据传送二、CAT24WCxx存储器的工作原理 2.1总线时序 2.2 写周期时序 2.3 字节写 2.4 读字节一、STM32模拟I2C通讯 1.1 I2C总线的数据传送 1、 数据位的有效性规定 I2C总线进行数据传送时,时钟信号为高电平期间...
2019-04-04 16:39:00
1822
原创 2.1【裸机部分】点亮LED灯
目录一、所需知识点储备二、点亮LED功能实现四、三个LED循环点亮五、按键点亮LED一、所需知识点储备 常见二极管和三极管 二极管:当A点电流大于B点时,二极管从左往右导通 三极管:左图:当A点电流大于B点时,电流从上往下走,三极管导通; ...
2019-04-04 16:34:36
639
原创 1.0【熟悉开发板】步骤和常见问题
目录一、熟悉使用串口连接二、使用eop烧写裸板程序三、使用uboot烧写裸板程序一、熟悉使用串口连接 1、插入电源线和serial插口,连接电源和电脑 2、电脑会自动加载驱动程序,如果没有则使用PL2303_Prolific_DriverInstaller_v1.7.0.exe软件将加载驱动 3、使用MobaXterm_Personal_10.4...
2019-04-04 16:29:00
460
原创 MySQL的安装与搭建
目录一、安装MySQL 第一种安装方式(zip) 第二种安装方式(msi)常见问题二、安装Navicat一、安装MySQL 第一种安装方式(zip) 第一步:打开网址:https://www.mysql.com/downloads/ 第二步:选择DOWNLOADS 第三步:选择 MySQL Community Edit...
2019-04-04 16:26:20
285
原创 1.1【熟悉开发板】详解Linux命令
目录一、Linux命令所需要的单词二、常用Linux命令解释记忆三、常见命令分析四、vi编辑器五、linux进阶指令一、Linux命令所需要的单词单词 翻译======================directory 目录list ...
2019-02-11 20:47:29
352
原创 浅谈Spring+SpringMVC+Mybatis——Spring篇(一)
Spring篇目录Spring篇一、Spring入门 1.1 Spring的由来和体系结构二、Spring IoC 2.1 Spring IoC的基本概念: 2.2 Spring IoC容器: 2.3 依赖注入三、Spring Bean 3.1 Bean的实例化 3.2 Bean的生命周期 3.3 Bean...
2018-12-05 16:43:39
367
原创 安装Numpy+MKL和Scipy
1、务必!一定!肯定!必须!使用Chrome访问:https://www.lfd.uci.edu/~gohlke/pythonlibs,否则可能会出现下载页面4042、Win+R→CMD,输入python,查询下载的Python版本,例如我是Python 3.7.0,电脑64位,则需要下载cp37,amd64的numpy‑1.15.1+mkl‑cp37‑cp37m‑win_amd64.whl,...
2018-09-21 20:57:35
15448
5
原创 JDBC编程
名称解释: (1)JDBC:Java DataBase Connectivity Java数据库连接 (2)ODBC:Open DataBase Connectivity 开放数据库连接 (3)API: Application Programming Interface 应用程序编程接...
2018-08-15 17:02:06
164
原创 MySQL的总结
一、MySQL的连接 1、使用之前记得要在工程的build path中添加 MySQL-connector-Java 的 jar 包 2、使用DriverManager 连接数据库; 3、使用Class.forName"(com.mysql.jdbc.Driver")加载驱动; 4、登录连接数据库(三种方法) 5、向数据库发送SQL语句...
2018-08-15 16:58:54
150
转载 SPI简介
SPI工作原理总结硬件上为4根线。主机和从机都有一个串行移位寄存器,主机通过向它的SPI串行寄存器写入一个字节来发起一次传输。串行移位寄存器通过MOSI信号线将字节传送给从机,从机也将自己的串行移位寄存器中的内容通过MISO信号线返回给主机。这样,两个移位寄存器中的内容就被交换。外设的写操作和读操作是同步完成的。如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的一个字节,就必...
2018-07-06 10:25:54
1030
原创 解析JSON类型APP开发
一、以天气APP 为模型1、创建数据库和表 在app/build.gradle文件中,添加一下内容 dependencies{ compile 'org.litepal.android:core:1.4.1' compile 'com.squareup.okhttp3:okhttp:3.4.1' compile 'com.google.code.gson:g...
2018-07-02 19:23:00
1225
转载 KEIL编译错误信息表
错误代码及错误信息 错误释义 error 1: Out of memory 内存溢出 error 2: Identifier expected 缺标识符 error 3: Unknown identifier 未定义的标识符 error 4: Duplicate identifier 重复定义的标识符 error 5: Syntax error 语法错误 error 6: Error in rea...
2018-06-30 16:00:01
3342
1
原创 鸿蒙操作系统详解
鸿蒙是一个面向场景的智能操作系统。很多人刚开始把它与Linux相比,这是不对的,首先Linux只是一个内核,在Linux之上我们开发者还需要做很多的操作,比如驱动开发和应用开发才能让用户能够正常的操作。鸿蒙的LiteOS才是用来对标Linux的,值得注意的是LiteOS和Linux是一样的,都是宏内核而不是之前宣传的微内核,鸿蒙的微内核可能要到过段时间才会发布。那么鸿蒙对标的产品是什么呢?是安卓和Windows。这也让安卓特别的难受,因为与它正在开发的Funchsia系统在地位上有较大的吻合,都是
2018-06-29 23:27:23
16594
原创 LED原理与FSMC原理
一、STM32与触摸屏的连接方式LCD-CS:LCD片选信号;LCD-RST:LCD复位信号;nWE:写使能,连接LCD的RW脚;nOE:输出使能连接LCD的RD脚。RS:命令/数据标志(0,读写命令;1,读写数据);D[15:0]:16位双向数据线;LIGHT-PWM:LCD背光控制。 //FSMC管脚初始化 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_...
2018-06-29 23:26:03
2516
原创 SPI读写SST25VF016B
一、SPI特性基于三条线的全双工同步传输● 基于双线的单工同步传输,其中一条可作为双向数据线● 8 位或16 位传输帧格式选择● 主模式或从模式操作● 多主模式功能● 8 个主模式波特率预分频器(最大值为fPCLK/2)● 从模式频率(最大值为fPCLK/2)● 对于主模式和从模式都可实现更快的通信● 对于主模式和从模式都可通过硬件或软件进行NSS 管理:动态切换主/从操作● 可编程的时钟极性和相...
2018-06-26 21:01:06
19889
原创 外部中断及其中断优先级管理
一、外部中断的一般配置 ①初始化IO口为输入 GPIO_Init(); ②开启IO口复用时钟 RCC_APB2PeriphClockCmg(RCC_APB2Periph_AFIO,ENABLE) ③设置IO口与中断线的映射关系 void GPIO_EXTILineConfig(); ...
2018-06-26 20:10:41
13158
2
原创 端口复用和重映射
一、端口复用 端口复用就是把某个GPIO口用作其他功能:例如使用PA9,PA10引脚复用成串口1发送接收引脚. 1.1、端口复用配置过程GPIO端口时钟使能。复用外设时钟使能。端口模式配置。 GPIO_Init()函数。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); 比如你要将端口PA9,PA10复用为串口,所...
2018-06-26 20:07:37
4572
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人