自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 嵌入式Android音频系统(三)Android音频系统涉及的文件

本专栏将对Android音频系统进行更细致的阐述,同时这些也是我的学习笔记,如有错误欢迎大家在评论区批评指正,谢谢大家。本专栏的学习资料来源:本专栏的学习资料主要来自韦东山老师的Android音频系统,需要完整资料的同学,可前往韦东山老师课程观看,支持正版。一、涉及系统服务的文件:1.1 添加系统服务文件:main_mediaserver.cpp(frameworks/av/media/mediaserver/main_mediaserver.cpp)main_mediaserver.cpp

2021-07-11 15:55:29 752 3

原创 嵌入式Android音频系统(二)Android音频系统的专用名词解释

对于Android音频系统学习时可能会出现许多名词,这些词光看字面意思可能无法直接理解,为了更好的对Android系统进行学习,特开一章对Android音频系统会出现的名词进行解释,欢迎大家补充。本专栏将对Android音频系统进行更细致的阐述,同时这些也是我的学习笔记,如有错误欢迎大家在评论区批评指正,谢谢大家。本专栏的学习资料来源:本专栏的学习资料主要来自韦东山老师的Android音频系统,需要完整资料的同学,可前往韦东山老师课程观看,支持正版。一、名词解释stream typeapp要播放

2021-07-11 10:55:39 1039 3

原创 嵌入式Android音频系统(一)Android音频系统专栏开篇

对于安卓音频系统,在前面我们已经讲了大致框架,嵌入式Android底层开发(六)Android音频系统_总体框架本专栏将对Android音频系统进行更细致的阐述,同时这些也是我的学习笔记,如有错误欢迎大家在评论区批评指正,谢谢大家。本专栏的学习资料来源:本专栏的学习资料主要来自韦东山老师的Android音频系统,需要完整资料的同学,可前往韦东山老师课程观看。...

2021-07-10 22:59:24 543 1

原创 C++入门知识(二)——构造函数、析构函数、静态成员、友员函数

一、构造函数/析构函数1、构造函数构造函数 ,是一种特殊的方法,类提供的构造函数可自动完成对象的初始化任务。用途:在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。其他:1、一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们即构造函数的重载。2、对象有默认的构造函数,一旦实现了自己的构造函数就必须自己实现默认构造函数。3、构造顺序,对于类中:类中含有对象成员时,先调用对象成员的默认构造函数,再调用类的构造函数。对于多个对

2021-06-26 14:59:54 885

原创 嵌入式Android底层开发(六)Android音频系统_总体框架

一、声音的采集与播放声音的采集与播放大体上分为两种:数字和模拟。但因为模拟信号存储的声音信号不易存储与传播,故在声音系统中大致采用数字信号。使用的元器件——声敏电阻声敏电阻是一种可以根据周围声音响度大小而改变电阻阻值的元件。声音会使声敏电阻内的石墨震动。有声音的时候,石墨压紧,导通电流就大;声音小的时候石墨片空隙就大,导通电流就小。采集的流程人——》声敏电阻——》测量电压——》将采集间隔趋于0(求极限)当∆足够小的时候,就可将t3至t1时刻的声音接近于原声。播放的流程采集得到的电压值—

2021-06-22 18:52:16 626 1

原创 嵌入式Android底层开发(五)Android灯光系统_总体框架

回顾一下各子系统的共性一、Android灯光系统的框架二、Android灯光系统各层的实现2.1 APP层提出需求,实现与用户的交互2.2 JNI层程序需要包含的部分:1、获得一个hw_module_t2、根据不同的name,调用不同的module->methods->open,返回不同的light_device_t结构体其中name有许多种,如背光、电池灯、通知灯2.3 HAL层根据APP实现的功能进行编写,把硬件LED再次划分为不同的逻辑灯1、电池灯:电量的多少,显

2021-06-21 14:22:04 464

原创 嵌入式Android底层开发(三)硬件访问服务框架

一、简单的Android应用程序调用硬件流程图(通过JNI接口直接访问)但这样存在一个很大的问题:访问仅限与单一程序进行访问,如果多个APP同时访问一个硬件资源(多个APP都需要在LCD进行显示、多个APP想要播放音乐)如何解决?添加一层SystemServer,SystemServer作为APP的选择器,提供仲裁二、Android的硬件访问服务框架上面提出了SystemServer,而在Android中SystemServer是使用JAVA编写,这就意味着SystemServer执行完成后依然

2021-06-15 17:08:27 728 3

原创 嵌入式Android底层开发(二)Android消息处理机制

一、提前预备的知识1、线程一个应用程序运行时它的主体被称为进程2、如何判断是否发生了某些事件2.1查询方式(while(…))非常消耗资源2.2休眠——唤醒谁来唤醒?其他线程、内核来唤醒如果是其他线程来唤醒。那么就会引出线程间的通信如何通信?使用内核的epoll来实现如何实现?内核创建管道pipe,子线程读管道里的数据,主线程向管道里写数据。当主线程检测到按键被按下,将会对管道里写信息,子线程读到,获取按键按下的信息。下面以按键程序为例:3、Android下message对于

2021-06-14 14:25:39 694 10

原创 Linux驱动编程篇(五)——驱动设计的思想(面向对象)(分层)(分离)

Liunx驱动 = 驱动框架 + 硬件操作===》Liunx驱动 = 驱动框架 + 单片机

2021-06-12 20:46:14 877 5

原创 C++入门知识(一)——类的引入、访问控制、this指针、重载、指针和引用

一、类的引入、类与对象C++中结构体与类的区别class Person_kind2 { char *name; int age; char *work;};int main(int argc,char**argv){ int i; //int是类型,i是变量 Person_kind2 lisi; //Person_kind2是类,lisi是对象}二、访问控制C++中对于结构体、类内的数据有三种访问权限设置:1、private 2、protected 3、publicp

2021-06-12 12:32:56 238 2

原创 嵌入式Android底层开发(一)——安卓开发的整体框架与简述

一、Android简介Android是一种基于Linux内核(不包含GUN组件)的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发。主要参数表:参数上线时间2008年9月23日系统家族类Unix、Linux内核类型宏内核(Linux内核)二、Android系统的组成大体为三部分组成:1、BootLoader 2、Linux内核 3、根文件系统三、Android系统的分层可以分为四层

2021-06-11 15:08:24 7221 4

原创 Liunx QT开发篇——全网最全的使用QT开发安卓环境搭建教程(Qt on Android)(QT5.13.0)

一、安装开发环境 qt creator二、安装JDK三、安装SDK,并记录安装目录四、下载NDK,从下面网址,找到旧版入口五、QT配置及工程创建六、运行及调试

2021-06-09 09:05:49 917 3

原创 Linux驱动编程篇(四)——LED驱动(二)LED驱动框架

为应对多种芯片或开发板适配的LED驱动程序,同时减少开发流程,故需要在APP、驱动程序、硬件三个部分中添加一个部分,用于放置各单板LED驱动程序的公共部分。一、LED驱动程序框架的流程图二、对于公共部分的解决方案方案一:选择开发板A时,编译时选择编译的文件为:leddrv.c、Board_A.c;选择开发板B时,编译时选择编译的文件为:leddrv.c、Board_B.c;方案二:面向对象的思想抽象一个结构体led_operationsstruct led_operations {

2021-06-06 13:57:58 514

原创 Linux驱动编程篇(三)——LED驱动(一)简单LED驱动

一、LED驱动程序的实现目标1、打开LED2、关闭LED二、LED驱动程序的实现部分1、内核层LED驱动程序2、应用层LED测试程序三、内核层LED驱动程序的编程步骤1、添加头文件2、确定主设备号,也可以让内核分配3、定义自己的 file_operations 结构体4、实现对应的 drv_open/drv_read/drv_write 等函数,填入 file_operations 结构体5、实现入口函数:安装驱动程序时,就会去调用这个入口函数,执行工作:(1)把 file_oper

2021-05-26 10:35:40 3232

原创 手写一个操作系统篇(一)——内核结构与设计

本专栏源于极客时间《操作系统实战45讲》个人的学习笔记一、计算机中资源大致可以分为两类资源,一种是硬件资源,一种是软件资源,而内核是硬件资源和软件资源的管理者。硬件资源:1.总线,负责连接各种其它设备,是其它设备工作的基础。2.CPU,即中央处理器,负责执行程序和处理数据运算。3. 内存,负责储存运行时的代码和数据。4. 硬盘,负责长久储存用户文件数据。5. 网卡,负责计算机与计算机之间的通信。6. 显卡,负责显示工作。7. 各种 I/O 设备,如显示器,打印机,键盘,鼠标等。软件资源:

2021-05-20 20:08:32 773

原创 Linux驱动编程篇(二)——硬件基础(1)存储器

存储器大致分为两种:非易失性存储器(NVM)、掉电丢失存储器(RAM)一、非易失性存储器(NVM)1. ROM1.1. ROM()不可编程ROM1.2. PROM(不)可编程ROM1.3. EPROM可擦除可编程ROM1.4. EEPROM电可擦除可编程ROM,可以完全使用软件擦除2. FlashFlash市场上两种主要技术是或非、与非闪存技术。2.1. NOR Flash或非闪存技术。1988年,IntelNOR Flash与CPU的接口属于典型的类SRAM接口,不需要增加

2021-05-16 20:55:54 207

原创 Linux驱动编程篇(一)—Hello驱动(字符驱动程序)(不涉及硬件)

一、在应用层的APP上调用glibc,Linux系统会做哪些事?如果访问的是普通文件,则会经系统调用后访问。如果是驱动程序则会通过调用驱动程序对应的代码进行访问(提供drv_open),如下图。二、编写驱动程序的几个步骤① 确定主设备号,也可以让内核分配② 定义自己的 file_operations 结构体③ 实现对应的 drv_open/drv_read/drv_write 等函数,填入 file_operations 结构体④ 把 file_operations 结构体告诉内核:reg

2021-05-07 11:33:48 968

原创 小米面经(2021春招)

3月31日投的,本来是想投嵌入式工程师的,看了一下发现没有了,后来得知C/C++有一部分也是嵌入式的,赶紧投递,4月21日接到一面邀请,4月26日接到二面邀请,4月28日接到HR电话。面试官也很专业。效率非常高。一面(60分钟)1、简单介绍一下自己ARM、单片机部分2、讲一下ARM里面LR寄存器是什么?是做什么用的?ARM的硬件结构有哪些组成?这题没答出来,忘记了。好尴尬 简历上还写的熟悉ARM 惭愧。3、讲一下你们比赛用的哪些芯片?芯片都有哪些模块(这里应该指IIC、SPI这些)?

2021-05-01 11:08:41 3104 8

原创 Linux系统编程篇—开源压缩包的使用流程(libcurl库为例)

一、libcurl库简介libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies,和用户认证。二、下载库下载https://github.com/curl/curl/releases/tag/curl-7_71_1三、解压tar xvf curl-7.71.

2021-04-30 13:37:13 495

原创 Linux系统编程篇—系统调用(ARM嵌入式)

一、系统调用的实现框图二、系统调用的实现细节

2021-04-20 14:34:21 344

原创 Linux系统编程篇—文件IO(文件来源、文件访问)

一、文件的来源1、磁盘、Flash、SD卡、U盘这些来源是真实存在的文件,以FAT32,EXT4,…等格式保存在某个设备上(如/dev/sda1),要使用mount指令挂载才能使用。df -T//文件系统类型在Type列输出。只可以查看已经挂载的分区和文件系统类型。2、Linux内核提供的虚拟文件系统,使用时也需要mount指令挂载才能使用。3、特殊文件:/dev/下的文件,这些文件是一些设备结点,我们通过open、write操作它们时,通过驱动操作的是硬件。主设备号用来确定哪一个驱动程

2021-04-19 20:39:28 904

转载 Linux系统编程篇—Makefile的使用

一、Makefile的功能高效地编译程序在我们使用KEIL、Visual Studio编译程序时,会发现修改源文件或头文件,只需要重新编译牵涉到的文件,就可以重新生成可执行程序。Makefile就是一个可以帮你自动进行高效编译的脚本。一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操

2021-04-18 14:58:37 553 1

原创 物联网实战项目(一)基于“端、边、云”架构的智能家居系统(1)——框架设计

一、功能、框架简图二、各个部分说明项目主体分为四个部分:设备、网关、网络、云服务器(1)设备部分对于设备部分又分为直连设备和不可直连设备**直连设备:**可以直接连接移动互联网的设备。如手机、ipad等。**不可直连设备:**不可以直接连接移动互联网的设备。如智能电灯、各式各样的智能传感器、智能插座等。不可直连设备在未来的物联网中占据大部分比重,举一个简单的例子,一个家庭拥有的手机+电脑一般不会超过10台,而未来家中的智能电器、传感器可能有几十个甚至上百个。如果这些传感器都直接接入服务器,那

2021-04-13 17:03:52 2576 3

转载 浅谈Java SE、Java EE、Java ME三者的区别、一些基础概念

浅谈Java SE、Java EE、Java ME三者的区别http://developer.51cto.com 2009-06-18 15:27 中国IT实验室本文把JAVA SE、JAVA EE、JAVA ME拿来做下区别,同时也分享一下作者的一些成果。目前的Java平台根据软件开发人员、服务提供商和设备生产商可以针对特定的市场可以分为三个版本JAVA SE、JAVA EE、JAVA ME。现在一个个来分析Java SE(Java Platform,Standard Edition)

2021-03-30 16:00:50 219

原创 常用通信协议——IIC协议实战项目(二)(STM32+MPU6050+AT24C02)

前面讲了IIC协议的介绍和IIC协议的编程实现,接下来我们来做一个关于IIC的小项目。一、项目的实现功能:1、使用STM32单片机用IIC协议对AT24C02进行数据写入。2、使用STM32单片机用IIC协议对MPU6050、AT24C02进行数据的循环读取。我们将分三章对本项目进行详细阐述。本章主要是实现功能:1、使用STM32单片机用IIC协议对MPU6050进行数据写入。二、本章使用模块简介:1、MPU6050模块简介本章实验使用的是正点原子家的ATK-MPU6050六轴传感器模块。实

2021-03-25 12:30:21 1699 3

原创 常用通信协议——IIC协议实战项目(一)(STM32+MPU6050+AT24C02)

前面讲了IIC协议的介绍和IIC协议的编程实现,接下来我们来做一个关于IIC的小项目。一、项目的实现功能:1、使用STM32单片机用IIC协议对AT24C02进行数据写入。2、使用STM32单片机用IIC协议对MPU6050、AT24C02进行数据的循环读取。我们将分三章对本项目进行详细阐述。本章主要是实现功能1:1、使用STM32单片机用IIC协议对AT24C02进行数据写入。二、本章使用模块简介:1、AT24C02AT24C02是一个2K位串行CMOS E2PROM, 内部含有256个8位

2021-03-22 11:40:10 1699 2

原创 常用通信协议——IIC协议编程实现

示意图

2021-03-20 16:47:44 4693 5

原创 常用通信协议——IIC详解(全网最全)

一、IIC 简介I2C(Inter-Integrated Circuit) 是内部整合电路的称呼, 是一种串行通讯总线, 使用多主从架构, 由飞利浦公司在1980年为了让主板、 嵌入式系统或手机用以连接低速周边装置而发展。 I2C的正确读法为"I-squared-C" , 而"I-two-C"则是另一种错误但被广泛使用的读法, 在中国则多以"I方C"称之。 I2C 总线支持任何IC 生产过程(NMOS CMOS、 双极性) 。 两线――串行数据(SDA) 和串行时钟 (SCL) 线在连接到总线的器件间传递

2021-03-18 21:23:48 47531 6

转载 嵌入式笔试——常考知识点(二)C语言关键字

一、static 关键字的作用答:作用域方面:1.限制变量的作用域(static全局变量);2.设置变量的存储域(static局部变量)。static 最主要功能是隐藏,其次因为 static 变量存放在静态存储区,具备持久性和默认值为 0①隐藏作用,可以在不同的文件中定义同名变量和同名函数。②对于变量来说,保持变量持久,静态数据区的变量会在程序刚刚运行时就完成初始化,也是唯一一次初始化;储存在静态数据区,静态存储区只有两种变量(全局变量和 static 静态变量)。③默认初始化为 0x00

2021-03-14 13:00:10 301

转载 嵌入式笔试——常考知识点(三)宏定义函数

宏函数编写一、用宏定义写出swap(x,y),即交换两数 #define swap(x, y) (x)=(x)+(y);(y)=(x)–(y);(x)=(x)–(y); 二、写一个“标准”宏,这个宏输入两个参数并返回较小的一个。#define Min(X, Y) ((X)>(Y)?(Y):(X))//结尾没有;用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL

2021-03-14 12:59:25 397

转载 嵌入式笔试——常考知识点(四)循环相关

一、说出下列两个循环的优缺点,并说明原因。答:左侧程序优点:程序简洁缺点:多执行了N-1次逻辑判断,并且打断了循环“循环流水线”作业,使得编译器不能对循环进行优化处理,降低了效率。右侧程序优点:循环的效率高缺点:程序不简洁二、语句for( ;1 ;)有什么问题?它是什么意思?答:死循环,和while(1)相同。三、do……while和while……do有什么区别?答:前一个循环一遍再判断,后一个判断以后再循环。四、嵌入式系统中经常要用到无限循环,你怎么用C编写死循环。while(1

2021-03-14 12:57:58 259

转载 C++核心编程——(二)引用

作用: 给变量起别名语法: 数据类型 &别名 = 原名 int &b = a示例:int main() { int a = 10; int &b = a; cout << "a = " << a << endl; cout << "b = " << b << endl; b = 100; cout << "a = " << a << endl; co

2021-03-09 11:34:42 242 1

原创 嵌入式笔试——常考知识点(一)liunx文件的权限

一、liunx下查看文件权限ls -l如果是想查看单个文件权限:ls -l xxx.xxx (xxx.xxx是文件名)查看的是xxx文件之中的文件权限一共有十位数,其中:最前面那个 - 代表的是类型( - 代表的是文件,d 代表的是文件夹)除去最前面的类型符,后面3位一组第一组三个 rwx 代表的是所有者(user)拥有的权限第二组三个 rw- 代表的是组群(group)拥有的权限第三组三个 rw- 代表的是其他人(other)拥有的权限rwx分别代表:r 表示文件可以被读(rea

2021-03-09 11:24:25 392

转载 C++核心编程——(一)内存分区模型、new操作符

1 内存分区模型C++程序在执行时,将内存大方向划分为4个区域代码区:存放函数体的二进制代码,由操作系统进行管理的全局区:存放全局变量和静态变量以及常量栈区:由编译器自动分配释放, 存放函数的参数值,局部变量等堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收内存四区意义:不同区域存放的数据,赋予不同的生命周期, 给我们更大的灵活编程。其中程序运行前:代码区、全局区;程序运行后:栈区、堆区1.1 程序运行前在程序编译后,生成了exe可执行程序,未执行该程序前分为两个区

2021-03-08 16:34:10 83

原创 LiunxQT开发篇—QT网络编程TCP实现(三)客户端代码

需要包含三个头文件#include <QTcpServer>#include <QTcpSocket>#include <QString>需要添加一个模块QT += core gui network使用到了一个类(QTcpSocket)QTcpSocket Class声明一个对象QTcpSocket *tcpSocket;涉及到的信号:tcpSocket:connected()(This signal is emitted a

2021-03-07 15:54:38 768

原创 LiunxQT开发篇—QT网络编程TCP实现(二)服务端代码

需要包含三个头文件#include <QTcpServer>#include <QTcpSocket>#include <QString>需要添加一个模块QT += core gui network使用到了两个类(QTcpServer、QTcpSocket)QTcpServer ClassQTcpSocket Class声明两个对象QTcpServer *tcpServer;QTcpSocket *tcpSocket;涉及到的

2021-03-07 12:44:04 465

原创 LiunxQT开发篇—QT网络编程TCP实现(一)TCP简介、项目框架

TCP简介下面我们通过一个项目来感受一、实现功能服务器功能:1、输入端口号2、打开/关闭服务器3、向客户端发送数据客户端功能:1、输入服务器IP地址、端口号2、连接/断开服务器3、向服务器发送数据二、最终实现的效果1、服务器最终效果2、客户端最终效果3、互发数据实现(写的比较仓促、后序继续完善)...

2021-03-06 23:19:17 263

原创 LiunxQT开发篇——小技巧(一)QT如何修改窗口标题

方法一:ui界面修改1、选中Widget。2、在Widget属性里修改windowTitle的值方法二:通过程序修改1、打开main.cpp文件2、main函数内,w.show()之前加入w.setWindowTitle("服务器"); w.setWindowTitle("服务器");

2021-03-06 22:53:27 786

原创 C++基础(二)—C++一些概念上的补充

1、类函数的重载特性类函数的重载特性就是说我们可以在类里面定义同名的函数,但是参数不同的函数。重载函数在调用的时候,会根据参数的类型,然后去匹配相应的函数进行调用。如下方的两个text()class student{public: char name[64]; int age; void test(); void test(int a);private: int haha;};2、构造函数和析构函数**构造函数:*

2021-03-05 10:24:30 93 1

原创 C++基础(三)—QT工程代码详解(一)

#include <iostream>using namespace std;int main(){ cout << "Hello World!" << endl; return 0;}(1)#include iostream是指iostream库。是C++标准库,类似C里面的stdio.h。 iostream的意思是输入输出流,直接点说就是in(输入) out(输出) stream(流),取in、out的首字母与stream合成。(2

2021-03-05 10:23:09 446 1

空空如也

空空如也

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

TA关注的人

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