- 博客(458)
- 资源 (23)
- 收藏
- 关注
原创 [Android 四大组件] --- BroadcastReceiver
BroadcastReceiver(广播接收器)即广播,是一个全局的监听器。Android 广播分为两个角色:广播发送者、广播接受者。
2023-08-29 16:17:54
623
原创 [Android 四大组件] --- Service
Service是Android系统中的四大组件之一,它是一种长生命周期的,没有可视化界面,运行于后台的一种服务程序。
2023-08-29 16:17:31
532
原创 [Android 四大组件] --- Activity
Activity是一个Android的应用组件,它提供屏幕进行交互。每个Activity都会获得一个用于绘制其用户界面的窗口,窗口可以充满哦屏幕也可以小于屏幕并浮动在其他窗口之上。一个应用通常是由多个彼此松散联系的Activity组成,一般会指定应用中的某个Activity为主活动,也就是说首次启动应用时给用户呈现的Activity。。
2023-08-29 16:17:10
375
原创 [Android AIDL] --- AIDL工程搭建
AIDL(Android Interface Definition Language)是一种 IDL 语言,用于生成可以在 Android 设备上两个进程之间进行进程间通信(IPC)的代码。通过 AIDL,可以在一个进程中获取另一个进程的数据和调用其暴露出来的方法,从而满足进程间通信的需求。通常,暴露方法给其他应用进行调用的应用称为服务端,调用其他应用的方法的应用称为客户端,客户端通过绑定服务端的 Service 来进行交互。
2023-08-29 16:16:48
634
原创 [Android AIDL] --- AIDL原理简析
上一篇文章已经讲述了如何在Android studio中搭建基于aidl的cs模型框架,只是用起来了,这次对aidl及cs端如何调用的原理进行简单分析。
2023-08-29 16:16:14
420
原创 [Android JNI] --- 静态注册和动态注册实现java和native相互调用
C/C++中访问Java方法C/C++中访问Java父类的方法C/C++中访问/修改Java变量Java中访问C/C++方法Java中访问/修改C/C++变量给出实现代码如下:// StaticReg.javaStaticReg.cpp2 动态注册的方式实现c/c++调用java的方法/变量C/C++中访问Java方法C/C++中访问Java父类的方法C/C++中访问/修改Java变量Java中访问C/C++方法Java中访问/修改C/C++变量// DynamicReg.java//
2023-07-06 18:47:00
295
原创 [Android JNI] --- JNI基础
JNI 全称 Java Native Interface,Java 本地化接口,可以通过 JNI 调用系统提供的 API。操作系统,无论是 Linux,Windows 还是 Mac OS,或者一些汇编语言写的底层硬件驱动都是 C/C++ 写的。
2023-07-06 18:40:17
115
原创 [Android JNI] --- Java和Android简介
概念明晰项目下面有两个分类:一个是app(代表app模块);另一个是Gradle Scripts。其中,app下面又有3个子目录,其功能说明如下:(1)manifests子目录,下面只有一个XML文件,即AndroidManifest.xml,它是App的运行配置文件。(2)java子目录,下面有3个com.example.myapp包,其中第一个包存放当前模块的Java源代码,后面两个包存放测试用的Java代码。(3)res子目录,存放当前模块的资源文件。
2023-07-06 18:39:46
207
原创 [Android JNI] --- JNIEnv和JavaVM
JavaVM申明在jni.h文件里面,因为我们在JNI开发中,必定要引入#include 头文件。//C语言定义 # endif /*defined//C语言定义 # endif /*//C语言定义 # endif /*# endif /*defined# endif /*# endif /*defined。
2023-07-06 18:38:18
153
原创 git --- git merge用法
在Git中,合并是一个连接分叉历史的过程。它将两个或多个开发历史连接在一起。git merge命令可以帮助你把git分支创建的数据整合到一个分支中。git merge会将一系列的提交关联到一个统一的历史。在上图中,有两个分支 master 和 feature。我们可以看到,我们在功能和主干分支都做了一些提交,并将它们合并。它就像一个指针。它将在各分支之间找到一个共同的基础提交。一旦 Git 找到一个共同的基础提交,它就会创建一个新的 “合并提交”。它结合了每个排队的合并提交序列的变化。
2023-06-01 21:06:43
5426
原创 [googletest] --- 简易使用教程
如果需要生成.so库,生成官方sample的二进制文件,需要对源码最外层的CMakeLists.txt进行修改将L20修改为ON之后,可以在build目录下看到googletest自带的sample都编译为了可执行文件。
2023-05-12 19:59:36
753
2
原创 ubuntu源码安装flex和bison
源码安装perf过程中会提示缺少flex和bison。解压,得到文件夹flex-2.6.4,进入该文件夹。bison源码下载链接。flex源码下载链接。
2023-04-17 13:45:33
449
原创 [设计模式] --- 模板方法模式
模板方法模式适用于需要在多个类中实现类似算法或流程的场景,但每个类具体实现细节可能不同的情况下。模板方法模式通过将算法或流程的主要骨架定义在一个抽象类中,以及定义一些可变的方法,让具体实现交由子类完成。
2023-04-17 13:44:11
129
原创 [设计模式] --- 适配器模式
适配器模式是一种常用的设计模式,用于将一个类的接口转换成客户端所期望的另一种接口。适配器模式通常用于解决以下问题:将现有类与新的代码进行集成。当我们需要在现有代码中使用新的类或库时,适配器模式可以帮助我们将现有代码与新的接口进行集成,从而避免大量的代码重写。将不兼容的接口进行转换。当我们需要将一个不兼容的接口转换成客户端所期望的另一种接口时,适配器模式可以帮助我们实现这个目标。例如,当我们需要在不同的数据库之间进行数据传输时,可以使用适配器模式将不同数据库的接口进行转换。与第三方库进行交互。
2023-04-17 13:43:35
400
原创 [设计模式] --- 策略模式
策略模式是一种行为型设计模式,它可以根据不同的情况选择不同的算法实现。它通常适用于以下场景:当需要在运行时根据某些条件选择不同的算法时,可以使用策略模式。这种情况下,策略模式可以避免使用大量的 if-else 语句。当需要封装一组算法,并且可以相互替换时,可以使用策略模式。这样可以使得算法的变化独立于使用算法的客户端。当类中包含大量条件语句时,可以使用策略模式将条件语句封装在具体的策略类中,以增加代码的可维护性。当需要动态地切换算法时,可以使用策略模式。
2023-04-17 13:42:59
140
原创 [设计模式] --- 观察者模式
观察者模式适用于当一个对象的状态发生变化时,需要通知其他多个对象做出相应的响应和处理的场景。这种情况通常发生在多个对象之间存在依赖关系的情况下,通过观察者模式可以实现对象之间的解耦和灵活性,让对象之间的通信更加有效和方便。
2023-04-17 13:42:28
47
原创 git --- git tag用法
tag是git版本库的一个标记,指向某个commit的指针。tag主要用于发布版本的管理,一个版本发布之后,我们可以为git打上 v.1.0.1 v.1.0.2 …这样的标签。tag感觉跟branch有点相似,但是本质上和分工上是不同的:tag 对应某次commit, 是一个点,是不可移动的。branch 对应一系列commit,是很多点连成的一根线,有一个HEAD 指针,是可以依靠 HEAD 指针移动的。
2023-04-17 13:40:30
550
原创 [c++11] --- tuple
在 C++ 中,std::tuple 是一个模板类,用于将多个值组合为一个单独的对象。它是一个固定大小的集合,其中每个元素可以具有不同的类型。尽管 std::tuple 可以容纳多个值,但它不被视为容器类,因为它不提供常见的容器操作(如迭代器和添加/删除元素等)。与容器不同,std::tuple 具有固定的大小和类型,并且不支持动态调整大小。
2023-04-09 21:17:30
310
原创 [c++17标准库特性之新增STL特性] --- std::filesystem
C++17 标准库中的文件系统库提供了一些函数和类来处理文件和目录。
2023-04-09 20:04:00
489
原创 [c++17标准库特性之新增STL特性] --- std::string_view
std::string_view 是 C++17 标准库中的一种新类型,它提供了对一个字符序列的非拥有式视图,该序列存储在 std::string 或字符数组中。它是 std::string 的一种轻量级替代方案,旨在避免字符串复制或分配的开销。以下是一些 std::string_view 的重要特性:非拥有式视图:std::string_view 不拥有底层的字符序列,它只是字符序列的引用。这意味着 std::string_view 的构造函数不会复制字符序列,而是指向它。
2023-04-09 20:01:13
408
原创 [c++17标准库特性之新增STL特性] --- std::any
std::any 是 C++17 中引入的一个新特性,它是一个类型安全的容器,可以在其中存储任何类型的值,包括基本类型、自定义类型、指针等。相比于 C++11 中引入的 void* 指针,std::any 更为类型安全,可以避免由于类型转换错误而导致的运行时错误。std::any 的实现基于类型擦除技术,可以存储任何类型的值,但在存储和获取值时需要指定正确的类型,否则会抛出 std::bad_any_cast 异常。
2023-04-09 19:50:51
1057
原创 [c++17标准库特性之新增STL特性] --- std::variant
std::variant 是 C++17 中引入的一个标准库类型,它提供了一种方式来存储不同类型的值,并在运行时根据需要选择其中之一。它类似于联合体(union),但具有更多的功能和类型安全性。
2023-04-09 19:46:27
485
原创 [c++17标准库特性之新增STL特性] --- std::optional
std::optional 是 C++17 中引入的一个标准库类型,它表示一个值或者不存在的情况。它类似于指针,但它可以安全地表示空值,同时还提供了更多的功能和语法糖。std::optional 的使用方式很简单,它可以用来表示函数的返回值、类成员变量、容器元素、函数参数等。当需要表示一个值可能不存在时,可以使用 std::optional 来避免使用指针和裸值时可能遇到的问题。
2023-04-09 19:42:25
475
原创 [c++17新增语言特性] --- 嵌套命名空间定义
其中,inner是嵌套在outer命名空间中的命名空间。在inner命名空间内部,可以定义变量、函数、类等。使用嵌套命名空间时,可以使用作用域解析运算符::来访问其中的变量、函数、类等。
2023-04-09 13:34:53
96
原创 [c++17新增语言特性] --- 折叠表达式
折叠表达式是C++17引入的一个非常有用的特性,它可以帮助我们简化代码,并提高可读性。在实际编程中,我们可以使用折叠表达式来实现各种不同的功能,例如求和、计算平均值、判断参数是否为真、判断参数是否相等、计算最大值等等。
2023-04-09 13:34:13
384
原创 [c++17新增语言特性] --- 内联变量 和 if
C++17中引入了内联变量(inline variables)的概念,它允许我们在头文件中定义全局变量,而不必担心重复定义的问题。与内联函数类似,内联变量也可以在多个编译单元中使用而不会出现链接错误,因为编译器会将它们视为多个实例的同一变量,而不是多个不同的变量。
2023-04-06 22:19:54
571
原创 [c++17新增语言特性] --- 结构化绑定
C++17引入了结构化绑定(Structured Bindings)的特性,它允许将一个结构体或元组的成员绑定到命名的变量上,从而可以方便地访问结构体或元组的成员。这个特性使得代码更加简洁和易读,尤其是在处理复杂的数据结构时。在这里,我们将深入剖析C++17的结构化绑定特性。
2023-04-06 22:07:26
338
原创 [c++17新增语言特性] --- constexpr if
constexpr if是C++17引入的一个重要特性,可以使得编译器在编译时进行条件判断,并根据条件选择不同的代码路径。
2023-04-06 21:59:56
458
原创 [c++17新增语言特性] --- [[nodiscard]]和[[maybe_unused]]
c++17 [nodiscard]]和[[maybe_used]]
2023-04-05 22:48:45
380
原创 [c++17] --- c++17相对于c++11的新增特性
C++11引入了许多现代C++特性,例如lambda表达式、自动类型推导、智能指针、移动语义、constexpr等。这些特性使得C++更加现代化、简洁、高效、安全,而C++17在C++11的基础上继续引入了一些新的特性和改进,例如结构化绑定、if constexpr、内联变量、类模板参数推导、并行算法等,进一步提高了C++的开发效率和代码质量。Note: 本专栏默认读者已了解c++11新特性,通过对比c++11,总结c++17新特性。
2023-04-05 22:38:01
583
原创 [simulink] --- 模型生成嵌入式代码配置
这样,在生成完毕代码后会自动打开报告。最后点击OK即可完成配置。点击左侧的Code Generation,把System target file选为Embedded Coder。这么配置是告诉Simulink要生成生成嵌入式C代码。点击左侧的Solver,右侧Type选为Fixed-step,Solver选为discrete。Ctrl+B生成代码,会在Matlab当前工作路径下生成。代码生成完毕后自动弹出报告,可以通过点击左侧的目录或者c文件/头文件名,查看代码。打开model properties。
2023-03-20 13:45:17
611
原创 [simulink] --- simulink信号
所谓信号,表示一种随着时间而变化的量,在时间轴上的采样时刻都对应有数值。信号在Simulink中是相当重要的组成部分,有线(line)表示,在模型中穿针引线地将各模块联系起来,既能传递数据又可以明确表达模块的输入输出依赖关系,技能给自己命名以示自身的物理意义,又能绑定Simulink.Signal数据对象来表达生成代码中的变量。将Simulink信号线理解为类似网线之类的物理设备其实是不恰当的,它所表达的往往不是物理连接,而是数学上的一种关系或者说逻辑联系。
2023-03-20 13:44:40
839
原创 [simulink] --- 数据字典
简单来说,数据字典的作用就是把一个模型用到的所有数据对象都统一放到一个地方管理起来。Simulink中,数据对象包括信号对象、参数对象、枚举量、常量等。也就是说,数据字典是很多个数据对象的集合。
2023-03-20 13:23:08
2007
原创 [simulink] --- 使用Project对Simulink工程进行管理
什么是Project(Matlab/Simulink工程)?引用MATLAB的帮助文档,解释如下:一个开发内容比较完善的MBD工程结构可能如下面所示,包含了模型文档、模型文件、数据文件、需求文件、实用脚本、测试文件等。将这些文件通过不同的层次结构组织起来,能够帮助高效地进行开发工作。在MATLAB Project产品的帮助下,我们还可以对工程进行更加完善的管理,包括文件依赖性检查、工作环境的配置、版本控制等。接下来就针对Project的几个重要的功能进行介绍。
2023-03-20 13:22:27
675
1
原创 [simulink] --- simulink中stateflow的使用
要管理多级状态复杂性,可以在 Stateflow 图中使用层次结构。借助层次结构,可以表示系统中多个层级的子组件。在下例中,图中显示了三个层级。在一个状态的边界内绘制另一个状态表示内部状态是外部状态(或父状态)的子状态(或子级)。外部状态是内部状态的父级。在本例中,图是状态 Car_done 的父级。状态 Car_done 是 Car_made 和 Car_shipped 状态的父状态。状态 Car_made 也是 Parts_assembled 和 Painted 状态的父状态。
2023-03-20 13:22:05
1357
原创 [simulink] --- simulink模块
用户可以使用M语言或C语言根据Simulink运行原理编写拥有自定义功能的模块。Fcn可输入abs、acso、asin、atan、atan2、ceil、cos、cosh、exp、fabs、floor、hypot、ln、log、log10、pow、power、rem、sgn、sin、sinh、sqrt、tan、tanh组合的函数表达式,输入信号用u表示。当输入信号为多维时,从上到下输入信号的每个维的元素一次用u(1)、u(2)、…表示。
2023-03-20 13:21:24
4078
原创 [simulink] --- simulink基础
Simulink提供了一个动态系统建模、仿真和综合分析的集成环境,是MATLAB最重要的组件之一。
2023-03-12 14:16:23
108
JNI实现java cpp相互调用
2023-07-06
Linux网络编程-网络基础-socket编程-高并发服务器.pdf
2021-09-05
PCB封装库---经过很多次画板检验
2018-09-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人