自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

林多

糖分!

  • 博客(282)
  • 资源 (6)
  • 收藏
  • 关注

原创 【Qnx 】Qnx IPC通信PPS

Qnx自带PPS服务,PPS全称Persistent Publish/Subscribe Service,就是常见的P/S通信模式。Qnx PPS的通信模式是异步的,Publisher和Subscriber也无需关心对方是否存在。利用Qnx提供的PPS服务,Publisher可以通知多个Subscriber进行某种动作。Qnx 的PPS,是利用文件的方式实现的。所以使用起来,跟文件的读写差不多。该图是QNX官网的PPS示例场景。

2024-05-26 16:26:08 437

原创 【QNX】Qnx IPC通信 Message-passing

QNX提供了多种IPC(Interprocess Communication )通信方式,包括Message-passing、Plus(脉冲)、Event、Signal、共享内存、Pipe,当然还有socket。Message-passing是Qnx IPC的主要形式。Message-passing提供了主从直接同步的双向消息传输,类似于Android 同步Binder。客户端向服务端请求(Request),服务端向客户端(Reply)。

2024-05-26 16:19:53 847

原创 QNX SLM介绍

SLM是Qnx中用来加载Application的组件,它可以监控Application行为(比如异常退出时重新Application拉起)、控制Application间的启动时序。这个时候io-pkt对应的/sbin/io-pkt-v6-hc就执行了。通过slm启动Application,Application配置文件是slm-config-linduo.xml。SLM的配置文件,是xml的格式。关于SLM支持的全部命令的解释,可以参考QNX官网。关于SLM配置文件的具体写法,可以参考QNX官网。

2024-05-13 22:09:59 778

原创 【Android】Android应用性能优化总结

最近大半年的时间里,大部分投在了某国内新能源汽车的某款AndroidApp开发上。由于该App是该款车上,常用+重点应用。所以车厂对应用性能的要求比较高。应用冷启动达到***ms。应用热(温)启动达到***ms应用内画面切换响应达到**ms应用内动效/动画/车模等交互时,画面不能有延迟感等等。应用不能有内存泄露,内存稳定在**MB诸如上面的内容,还有一些,就不详细列出来了。因为之前没有直接做过AndroidApp开发,之前大部分时间在做Framework/System开发。

2024-05-05 20:48:55 935 1

原创 【通信中间件】Fdbus HelloWorld实例

Fdbus 全称(高速分布式总线),提供IPC+RPC功能。LinuxQNXAnroidOSWindowFdbus本质是Socket,IPC基于,RPC基于TCP。使用Google Protobuf进行序列化和反序列化。利用它,可以实现同域间的IPC通信,比如应用和OS间。也可以实现跨域、跨设备间通信,比如不同设备间数据传输,比如host/gust间的数据传输。Fdbus的一些特点支持多种通信模式,比如点对点、注册/发布、广播等等。支持服务动态发现。

2024-05-02 16:46:23 1112 4

原创 【Android12】Bugreport实现原理

Android Bugreport是一个用于记录和收集 Android设备上系统信息、日志和调试信息的工具。系统发生某些问题时,可以通过bugreport把系统当前时刻点(运行BugRepot的时刻)的系统相关的状态和信息都抓到一个zip中。通过bugreport可以帮忙开发人员分析和解决问题。Bugreport其实就是一系列的信息的汇总,包括日志、内存状态、进程信息、崩溃信息、服务状态等等。用一个大而近乎全的现场,来帮忙更好的分析问题。

2024-04-22 22:18:00 735 3

原创 【Android】App通信基础架构相关类源码解析

应用通信基础架构相关类源码解析这里主要对Android App开发时,常用到的一些通信基础类进行一下源码的简单分析,包括:Handler、looper、runnable、Messagequeue、Thread。

2024-04-05 18:02:58 699

原创 【C++】std::set_new_handler使用场景

C++的STL提供了**std::set_new_handler**,new操作分配内存失败时,会先调用这个Handler。默认的new_handler行为是,抛出std::bad_alloc异常。

2024-03-31 14:38:38 827

原创 【C++】智能指针shared_ptrs对于内存管理的陷阱

std::shared_ptr 是一种通过指针保持对象共享所有权的智能指针。内存管理是C++一个永远的话题,C++加入了std::shared_ptr帮助开发者更灵活的管理内存。但shared_ptrs对于内存管理,并非万能的。某些情况下的错误使用,会导致程序因为内存异常而崩溃。在gcc13上,支持给shared_ptrs设置为数组类型。因为std::shared_ptr销毁时,会自动释放指向的内容。那么如果用智能指针管理动态分配的数组,就会导致程序异常问题。

2024-03-24 20:18:20 404

原创 【Android12】Android性能调优工具SystemServerTiming日志

SystemServerTiming是Android原生系统中一个日志标签,也就是tag为SystemServerTiming的日志,这类日志信息会输出到Logd和Trace系统中。可以通过Android logcat 或者 抓取Systrace的方式取得。

2024-03-03 19:03:00 568

原创 【Android12】Monkey压力测试源码执行流程分析

Monkey是Android提供的用于应用程序自动化测试、压力测试的测试工具。通过Monkey,可以模拟用户的Touch(单指、多指、手势)、按键(key)事件等,检测应用程序发生的ANR、Crash事件,并收集相关Debug信息等。

2024-02-25 18:27:45 905

原创 【Java】Java类动态替换Class

基于上面的几个方法,可以实现动态替换Class对象。可以在代码中,利用上面的方式,将FunctionA动态替换为FunctionB。Java提供的ClassLoader可用于动态加载的Java类,可以通过多种形式获取ClassLoader。通过这个方法,可以获取类中所有声明的构造函数。要创建类对象的话,需要知道Class的构造函数,以及构造函数的各个参数。Method类提供的newInstance,可以用于创建并返回指定类的实例。通过Java的Class对象,可以实现动态替换Class。

2024-01-27 19:13:38 339

原创 【Android12】Android Framework系列---Adb和PMS安装apk源码流程

通过adb install安装apk,大概流程是 adb(client)端通过socke命令给adbd(service),然后adbd通过ServiceManager以Binder方式将命令发送给PackageManagerService。PackageManagerService解析命令,复制APK及相关资源到指定路径,并更新系统中APK相关配置信息。

2024-01-21 17:51:16 1534

原创 【Android12】Android Framework系列---tombstone墓碑生成机制

墓碑初始化及生成流程中,可以通过属性控制是否注册墓碑、是否生成墓碑,以及墓碑文件的数量等功能。同时,也可以根据业务需求,在墓碑中加入自定义内容,比如给墓碑文件的名字追加特殊的时间戳、追加一些自定义日志到墓碑中等等。

2023-12-30 21:44:02 2064 1

原创 【Android12】WindowManagerService架构分析

WindowManagerService(以下简称WMS) 是Android的核心服务。WMS管理所有应用程序窗口(Window)的Create、Display、Update、Destory。因为Android系统中只有一个WMS(运行在SystemServer进程),可以称其为全局的WMS。其主要的任务有两个:

2023-12-16 19:21:37 1404

原创 【Android12】Android Framework系列--AMS启动Activity分析

通过ActivityManagerService(AMS)提供的方法,可以启动指定的Activity。比如Launcher中点击应用图标后,调用AMS的startActivity函数启动应用。AMS提供的服务通过IActivityManager.aidl文件定义。

2023-12-10 18:18:54 1221

原创 【Android】Android Framework系列--Launcher3桌面图标加载流程

Android Launcher3(简称Launcher)启动后会加载桌面。基于Android12代码,分析一下桌面加载的流程。Launcher被Android AMS拉起后,进入自己的生命流程。Launcher.java 中的onCreate函数被调用,准备开始加载桌面。

2023-12-02 21:37:18 1527

原创 【Gstreamer】自定义Plugin及调用Plugin

Gstreamer支持开发者自己创建Plugin,创建后的Plugin可以通过工具查看,并在代码中调用自定义的plugin。Gstreamer 官网中给出了Plugin创建教程,但实际上如果按照教程一步步走,最后会因编译失败的问题无法编译出Plugin的lib库(至少目前在Ubuntu20.04是这样)自定义Gstreamer Plugin通过工具(gst-inspect-1.0)查看自定义Plugin信息调用自定义的Plugin系统:UbuntuGstream版本:1.0。

2023-12-02 18:49:31 1559

原创 【Yocto】yocto编译系统Image优化笔记

使用yocto编译出来的Image文件(比如ext4格式)有时候根据业务需求,是要进行剪裁以缩小Image的Size。比如系统有OTA需求,系统预留的OTA分析大小是500M。但是Image(ext4格式)是1G大小。即使使用压缩文件,也未达到500M。这种情况下,可能就需要进行剪裁了。

2023-11-26 17:30:06 1660 2

原创 【Android】Android Framework系列--Launcher3各启动场景源码分析

Launcher3的启动场景主要包括:开机后启动:开机时,android ams服务拉起Launcher按键启动:比如短压home键,android wms中的PhoneWindowManager拉起Launcher异常崩溃后启动:Launcher异常崩溃后,android ams再次拉起Launcher

2023-11-26 13:54:39 1640

原创 【Android】Android Framework系列--CarUsbHandler源码分析

CarUsbHandler是Android Car提供的服务之一,其用车载USB连接的场景。车载USB有其特殊应用场景,比如AndroidAuto、CarLife等。而Android的做法是在其原有的USB服务上,扩展了专门针对CarUSB的Service。

2023-11-19 14:19:58 825

原创 【Git】Merge/Rebase/Cherriy-Pick的区别

Git merge、Git Rebase、Git Cherry-pick是Git 常用的三个命令,可以用于分支合并、纳入提交等。那么它们三个的区别以及共同点是什么?了解这些可以帮我们更好理解Git的工作原理,进而学习它的一些设计思想。

2023-11-11 18:43:09 335

原创 【Android】Android Framework系列---CarPower深度睡眠STR

Android进入Deep Sleep后,关闭屏幕、关闭CPU的电源,保持RAM的电源(激活状态)。深度睡眠会进行Suspend-to-RAM挂起到内存(做车载的经常会听到的STR)。当然深度睡眠,还一种是挂起到硬盘(Suspend-to-Disk),不过目前主要用的是STR。所以STR是深度睡眠时的状态,但STR不等于深度睡眠。

2023-11-05 13:18:33 1377

原创 【Android】Android Framework系列---CarPower电源管理

Vehicle HAL的电源状态一般来讲是来自于MCU的(can通信 或者以太网通信,具体形式由Vehicle HAL和相关供应商决定)。智能座舱通常包括中控系统、仪表系统、IVI系统 、后排娱乐、HUD、车联网等。由于汽车自身的特殊供电环境(相比手机方便的充电环境,汽车的蓄电池如果没有电是需要专业人士操作的),其电源状态会比较复杂,既要满足车内的座舱系统启动足够快,又要保证汽车蓄电池的可考性,所以出了开机(on)、关机(off)外,会多出来一些电源状态(Suspend、STR、SLEEP等等)

2023-10-29 19:24:51 785 1

原创 【Android】Android Framework系列---输入法服务

车载项目需要定制输入法,也有一些POC演示的项目使用原生比如LatinIME(源码路径为/packages/inputmethods/LatinIME),关于输入法可能会遇到以下一些问题输入法进程启动崩溃输入法画面被其他应用遮挡输入法输入内容显示到错误的编辑框内多屏情况下输入法显示异常输入法未弹出或输入法未隐藏定制多屏多客户端输入法上面举了一些常见例子,实际开发过程中也会有定制输入法服务这类需求。

2023-10-21 18:09:47 840

原创 【Wifi】Wifi架构介绍

本文基于Android介绍其Wifi架构。Wifi是许多操作系统提供的重要功能之一,特别是越来越多的车载系统wifi是其必备功能。为啥wifi是必备功能?一方面是传统的上网(现在有些车载使用DCM模块管理网络),另一方面就是AP功能了(是自身成为热点),因为无线Carplay和无线AndroidAuto是需要借助蓝牙协议+AP实现无线认证及数据传输,而Carplay、AndroidAuto是车载系统的主要业务功能之一。

2023-10-15 15:32:22 1304 2

原创 【Android】VirtualDisplay创建流程及原理

【代码】【Android】VirtualDisplay创建流程及原理。

2023-10-15 14:34:40 4942

原创 【Audio】正弦波生成原理及C++代码

诊断系统(Diag)会通过播放一段指定频率、采样率、时长及振幅的正弦音,以此对Audio测试。

2023-10-06 15:47:09 941

原创 【QT】Qt Application Manager启动应用源码分析

QTAM作为一款应用管理程序,适用于嵌入式端(如车载)应用。利用QT开发的应用程序只需要简单适配一下QTAM的规范,可以大幅度减少开发一套应用管理程序的成本。同时QTAM支持QML方式。应用管理最基本的功能,是应用的启动。从上述代码中,可以看出QTAM多进程模式下,是通过QProcess创建了子进程来加载AppMan(可以理解为Applauncher),根据入参(应用的QML文件)启动了应用。并且监听了QProcess的状态 ,用来设置对应的应用状态。其实很多应用管理模块,启用应用的大概思路也是这样的。

2023-10-04 21:36:37 511

原创 【Hilog】鸿蒙系统日志源码分析

Hilog采用C/S结构,Hilogd作为服务端提供日志功能。Client端通过API调用(最终通过socket通讯)与HiLogd打交道。

2023-08-11 11:18:42 2696

原创 Android NTP时间同步源码分析

Android系统设置自动时间后,如果连接了可用的网络。会同步网络时间。这个处理是 NetworkTimeUpdateService完成的

2023-07-09 19:35:44 1091

原创 【QT】Qt ApplicationManager Compositor源码分析

根据Qt ApplicationManager官网介绍,它基于Wayland协议实现了Compositor功能。下述为官网介绍。实际上,QtApplicationManager是使用了QtWayland模块来实现Compositor的。Wayland是一套旨在替代XWindow的 Compositor标准,感兴趣的可自行了解。

2023-06-04 20:55:40 856

原创 Yocto常用术语

Yocto是一套开源、专为嵌入式定制的编译系统,它提供了toolset和开发环境,开发人员可以利用Yocto定制基于Linux的系统。了解这些术语可以加深对Yocto的认识。

2023-01-26 15:12:19 1282 1

原创 车载以太网简介

车载以太网属于局域网,它用来连接汽车内的电子元件(ECU/MCU)。速率:100Mbit ~ 1Gbit 每秒车载以太网满足汽车行业的 低延时、低功耗、高可靠性、实时性、低电磁辐射。

2023-01-25 16:21:23 4295

原创 【Linux】Pid Namespace简介及其引发的问题

Pid Namespace简介及其引发的问题这六种命名空间,用来隔离某种资源。通过命名空间,linux可以支持容器的实现。这里只关注PID Namspace。

2023-01-15 19:39:56 1076

原创 【Shell】mksh运行分析

shell,壳子,即操作系统的壳子。这层壳子套在操作系统上,为用户提供与操作系统的交互手段。操作系统的交互方式一般有,图形化交互(GUI)和命令行交付(CLI,command-line interface)。Android系统中使用了一款叫mksh的shell程序,用于交互式的命令解释器。

2023-01-08 20:40:53 1723

原创 【Wayland】QtWayland启动流程分析

QtWayland启动分析,QtWayland启动入口类是QWaylandCompositor,该类创建了全局Display对象、socket,并且开启了EventLoop。

2023-01-02 16:08:41 1761

原创 【Wayland】QtWayland框架分析

QtWayland是Qt官方基于Wayland开发的一款Toolbox,根据其官网介绍基于Qt/QtQuick,使用QtWayland可以写出一套 Compositor(Wayland Compositor)Qt应用可以作为Wayland的Client端运行。下图摘自Qt官网,对于Qt与Wayland关系的介绍。如何运行QtWayland?Qtwayland是基于Qt编译的,可以参考QtWayland官网提供的编译手顺。

2022-11-20 21:12:34 3823

原创 Android12启动崩溃 no namespace called

Android使用了基于命名空间的动态连接器,用来解决生态碎片及安全问题(关于这部分的可以自行搜索,下图为android官网给出的命名空间隔离图示)。Android12系统开机启动后,系统卡在开机界面,无法进去home。adb终端查看后,发现zyogte64启动崩溃。这个问题就是zyogte64这个进程在加载apex时,找不到com_android_art这个命名空间。代码定位(art/libnativeloader/native_loader.cpp)

2022-09-25 17:49:12 1512

原创 【C++11】promise和future介绍

【C++11】promise和future介绍C++11提供了std::promise和std::future两个模板类,通过这两个模板类可以实现异步存储值并获取值的功能。std::promiseThe class template std::promise provides a facility to store a value or an exception that is later acquired asynchronously via a std::future object crea

2022-05-16 21:54:47 1187 1

k-近邻算法

k-近邻算法(Python版)包括代码和样本集

2016-11-21

Windows下caffe训练实例

windows下,caffe训练实例,包含训练数据,以及配置文件。一定将配置文件里面的路径,改为自己电脑上的路径,才可以正确运行。

2016-08-13

matconvnet1.0-beta20

matconvnet,深度学习工具包,Matlab版。

2016-07-29

DCT水印算法实现MATLAB

基于DCT的水印算法实现,MATLAB版。附带实验图片,可以直接运行。

2015-10-26

移动目标检测MATLAB版

利用MATLAB,基于帧间差分法来检查移动目标。可直接运行。

2015-10-01

PC运行的linux模拟器

非常好用的linux系统模拟器,无需安装,直接运行即可。

2015-06-23

空空如也

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

TA关注的人

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