自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Android NDK制作so库

序言:该篇文章记录Android studio怎么使用NDK制作so库过程1. 配置NDK环境(1)点击1处进行NDK下载,勾选3处可以查看NDK的具体版本号(2)NDK下载后的位置SDK位置在:D:\AS\SDKNDK位置在:D:\AS\SDK\ndk,我这里下载了三个版本的(3)配置环境变量a. 打开电脑控制面板---->系统和安全---->系统---->高级系统设置---->环境变量b.在系统变量里点击新建,创建一个NDK的环境变量变量名就自己定义了,我

2021-10-10 20:44:46 500 1

原创 Android平台上的蓝牙回连问题

序言:最近在MTK方案上移植蓝牙驱动(RTL8723DU驱动)后,出现一个问题,蓝牙音箱断开后可以回连,但是蓝牙语音遥控只有第一次配对可以连上,断开后没法自己回连。蓝牙音箱和蓝牙语音遥控区别蓝牙有两种类型:经典蓝牙和低功耗蓝牙,而这里我们的蓝牙音箱属于经典蓝牙,蓝牙语音遥控属于低功耗蓝牙(BLE设备) 经典蓝牙:蓝牙最初的设计意图,是打电话放音乐。3.0版本以下的蓝牙,都称为“经典蓝牙”。功耗高、传输数据量大、传输距离只有10米。 低功耗蓝牙:就是BLE,通常说的蓝牙4.0(及以上版本)。低功耗,数

2021-09-23 16:53:20 2553

原创 C++指向类成员的指针

序言:在C++中,可以定义一个指针,使其指向类成员函数或或成员函数,然后通过指针来访问类的成员,这包括指向属性成员的指针和指向成员函数的指针。一.指向普通变量和函数的指针指向普通变量的指针int a=100;int *p = &a;指向函数的指针(即函数指针)int(*p)(int, int);这条语句的理解:定义了一个指向函数的指针变量p,首先它是一个指针变量(*p),其次前面的int表示指针变量可以指向返回类型为int型的函数,后面括号中的两个int表示这个指针变量可以指向两个

2021-09-15 22:35:54 252

原创 C++中的static关键字

static关键字的作用在C语言中:  修饰全局变量时:外延性(用static修饰后,全局变量就没有外延性,仅作用于本文件)  修饰局部变量时:局部变量使用static限定了变量的生命周期和存储位置,没有static修饰的局部变量存储在栈上,是auto类型(随时用随时开辟空间,用完销毁空间),static修饰的局部变量存储在data段的rw段(或bss段,看有没有初始化),static修饰的局部变量生命周期和main函数生命周期一样。在C++中  static 在类内部的表现,用来实现簇类对象间的

2021-09-15 21:45:04 110

原创 C++构造器、析构器、拷贝构造器和赋值运算符重载

序言:本篇文章用于记录C++学习的构造器、拷贝构造器、析构器、赋值运算符重载的记录,该文章以自己实现stringl类型为实例进行练习。 1.mystring.h文件(函数声明)class mystring{ public: mystring(const char*p = NULL); //构造器 mystring(const mystring & another); //拷贝构造器 mystring& operator=(const mystring..

2021-09-10 19:42:09 218

原创 C++的封装

序言此篇文章用于记录学习C++的封装,包括如下只是:对比C语言的封装,以队列为实例使用C++的封装。C语言的封装C语言可以通过结构体将多个类型的数据打包成一体,形成新的类型,然后将数据通过指针传给行为,这就是C语言的封装。#include <stdio.h>typedef struct Date{ int year; int month; int day;}date;void init(date* d) //形参为结构体指针{ d->year = 2012;

2021-08-31 21:49:58 525

原创 2021-08-25

Makefile示例序言:工作中移植蓝牙模块,然后研究了一下编译蓝牙时用到的makefil,该文记录makefile里用到的知识主要涉及点:makefile的subst函数,strip命令,obj-m,obj-y,make -C Minclude $(LINUX_ROOT)/linux_core/driver/ko/target/target.mak说明:将$(LINUX_ROOT)/linux_core/driver/ko/target/target.mak文件包含在当前的makefile

2021-08-25 19:47:11 95

原创 2021-08-21

Ubuntu安装GitLab并创建项目序言:最近在看Linux内核设计与实现这本书,根据第二章里面推荐,下载Linux内核源码,使用gitlab来管理代码,因此这篇文章记录自己Ubuntu是怎么搭建gitlab,如何配置,建立仓库并将Linux 内核代码提交到仓库。1.安装gitlab(1)进入Ubuntu系统,确保Ubuntu能够上网(2)输入如下命令(直接复制即可):第一条命令:wget --content-disposition https://packages.gitlab.com/gi

2021-08-21 21:55:39 113

转载 想要知道项目编译规则,Makefile你一定要知道

1.Makefile前奏知识在了解Makefile知识之前,有必要知道什么是编译和链接。一个完整的项目源代码到最终生成可烧写的程序,需要经过编译和链接的过程。编译是指将源文件生成中间目标文件(比如.c文件生成.o文件,每个源文件对应一个中间目标文件),链接是指将中间文件合成可执行文件。编译时需要的是语法的正确,函数与变量声明的正确;链接时,主要是链接函数和全局变量。所以我们可以使用中间目标文件来链接我们的应用程序,但是由于源文件太多,编译生成的中间目标文件也很多,而在链接时需要明显的指出中间目标文件名,这

2020-07-15 10:42:03 293

原创 Android之runnable实现每隔一段时间发送一次指令

实现息屏状态下呼吸灯闪烁要求:在息屏状态下,指示灯绿色状态下维持3秒,然后红色状态下维持1秒,接着重复前面的状态,直到退出息屏状态,且退出息屏状态时指示灯为绿色。代码实现:private static Handler handler=new Handler(); //定义handler变量private static Runnable runnable; //定义runnable变量runable = new Runable(){ public void run(){

2020-07-08 13:40:41 1025

原创 Android之TextView(文本框)和EditText(输入框)详解

<TextView android:id="@+id/txtOne" android:layout_width="200dp" android:layout_height="200dp" android:gravity="center" //控件中内容的对齐方式 android:text="TextView(显示框)" //文本框显示的内容 android:textColor="#EA5246" .

2020-06-02 18:43:53 1696

原创 Android之布局

1.LinearLayout(线性布局)常用属性(1)orientation:布局组件的排列方式,有水平排列方式和垂直排列方式。(2)gravity:控制组件所包含的子元素的对齐方式(3)layout_gravity:控制该组件在父元素里的对齐方式(4)layout_weight:权重2.RelativeLayout(相对布局)3.TableLayout(表格布局)三个常用属性:(1)android:collapseColumns :设置需要被隐藏的列的序号(2)android:sh

2020-05-30 18:17:44 163

原创 Java重载与重写

什么是重载?重载的是一个方法,即在同一个类里面,方法名字必须相同,参数必须不同(可以是参数类型不同,也可以是参数个数不同),返回类型可以相同也可以不同。重载用的最多的地方就是构造器的重载。重载的规则1.重载的这个方法必须参数列表不一样;2.重载的这个方法名必须一样;3.重载的这个方法可以改变返回类型;4.重载的这个方法可以改变访问修饰符;5.重载的这个方法的检查异常可以更广也可以声明为新的异常;6.可以在同一个类中被重载或者被子类重载;重载的事例public class overlo

2020-05-25 10:17:18 108

原创 Linux之安装交叉编译工具链

什么是交叉编译?简单来说就是在A类机器上编译源代码,得到可执行程序,需要运行到B类机器上。需要交叉编译才能使A机器上编译得到的可执行程序运行到B机器上,交叉编译则需要用到交叉编译工具。动手安装交叉编译工具链1.选择安装的位置:打开虚拟机,切换到root用户。输入命令cd /usr/local 进入local目录输入命令mkdir arm-toolchain 创建 arm-toolchain文件夹,工具链安装在此文件夹下面2.准备好交叉编译工具,可以自己网上下载,这里提供了一个。交

2020-05-24 22:58:35 586

原创 Android之SharedPreferences存储

什么是SharedPreferences存储? SharedPreferences是使用键值对的方式来存储数据的,即保存一条数据的时候,要给这个数据提供一个对应的键,同样的,取数据的时候也根据这个键值来取数据。SharedPreferences支持多种数据不同类型的存储,如果存储的是整型数据,则取出来的数据也为整型的。SharedPreferences方式如何存储 要使用SharedPreferences方式来存储数据,首先需要获取SharedPreferences对象,...

2020-05-17 22:30:37 197 1

原创 Java之输入输出流

流是用来干什么的?使用流的主要目的是保持数据的永久性。根据数据的流向分为输入流和输出流;根据处理数据的类型分为字符流和字节流。JDK所提供的所有流都位于Java.IO包中,IO部分所涉及的流有:标准的输入输出流、文件的操作流、网络数据流、字符串流、对象流等等。所有的输入流都是抽象类InputStream(字节输入流)或者抽象类reader(字符输入流)的子类;而所有的输出流都是抽象类OutputStream(字节输出流)或者抽象类write(字符输出流)的子类。对输入输出流的可以理解为:

2020-05-16 20:34:55 157

原创 C语言

头文件包含#include<>和#include“ ”的区别(1)#include<>是用来包含系统提供的头文件,是系统自带的,使用#include<>的话编译器就只会到系统指定目录去寻找这个头文件(比如usr/include目录下),如果找不到就会提示头文件不存在。(2)#include“ ”包含的头文件,编译器默认会先在当前目录下寻找相应的头文件,如果没有找到则会到指定的目录中寻找,还没找到的话就会提示文件不存在。总结使用规则:如果是系统指定的则用#inclu

2020-05-11 22:13:38 128

空空如也

空空如也

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

TA关注的人

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