C++多继承内存模型

1.说明

C++允许多继承(区别于java,不能多继承,需要使用接口),但是C++的多继承也带来了 用户层面理解盲区(例如:内存布局等)

2.代码测试

实现一个基础的继承

class A{
public:
    int a;
    int b;
    virtual void function1()
    {
        cout<<"this is class A ,function1 !"<<endl;
    }
};

class B{
public:
    int a;
    int b;
    virtual void 

Read more

Makefile语法

1.make讲解

make命令执行时,需要一个Makefile文件,Makefile文件告诉make命令需要怎么样编译和 链接程序。Makefile文件指引make工具执行。

2.makefile常见模板

###########  target name
# compile all .c file in $(PWD)
SRCS:=$(wildcard ./*.c)   #通配符会自动展开,获取目录下所有c文件列表
#OBJS := $(SRCS:.c=.o) #?????
OBJS = $(patsubst %.c, %.o, $(SRCS)) #替换通配符
OUT := bpool
OUT_

Read more

Android上子线程处理UI更新内容方案

1.简述

子线程里面进行逻辑运算,较耗时(里面有数据采集、滤波、计算等),需要在结果完毕 后通知UI线程进行更新数据,展示给用户看。(实例demo:后台计算GPS测量跑步距离,UI上 显示跑步距离和提醒用户GPS的一些状态)

2.方案简述

新增加一个interface,这个interface里面进行,定义一个状态变更函数接口。 在业务处理里面,进行处理,也就是何时触发,何种操作,UI线程里面,进行刷新 展示内容。

2.1 接口定义
public interface GPSCalculateStatusListener {
    /**
     * 状态变更,通知处理(key value--

Read more

Android HandlerThread的使用

1.简述

HandlerThread继承自Thread的特殊线程,内置有Looper和MessageQueue。 区别于Handler,Handler是消息处理器,用于发送和处理Message和Runable。 HandlerThread是为特定场景(持续性后台任务)优化的线程实现。[备注:普通 线程如new Thread(),创建的线程,没有默认的Looper和MessageQueue,适合一次性 处理任务,无法直接处理消息循环]

2.HandlerThread作用

提供了一个独立的后台线程,专门用于处理耗时任务(如文件读写、网络请求)。 有效避免主线程执行耗时操作导致ANR(Applica

Read more

卡尔曼Kalman算法使用简述

1.卡尔曼作用简述

卡尔曼滤波是一种递归的最优状态估计算法,用于传感器数据融合、导航系统和机器人 领域,核心思想,通过预测-更新循环,结合系统动态模型和当前测量值,对系统状态 做出最优估计。

2.卡尔曼核心步骤

2.1 预测步骤

状态预测 误差协方差预测

2.2 更新步骤

卡尔曼增益计算 状态更新 误差协方差更新

3.关键性参数

3.1 初始化状态估计X

系统初始状态的给定值(猜测),对于心率之类的,例如给定一个正常值。 若不准确,较大的初始化误差协方差,可使滤波器快速收敛。

3.2 初始误差协方差P

初始话状态估计的不确定性,值越大越不确定。 如果是初始化状态已经很明确,可以设置较小值,如果

Read more

Linux上设备类属性

1.设备类属性

在Linux上,设备类属性(sysfs)是一种用于访问和修改设备属性的机制,sysfs提供了 一个虚拟文件系统,它代表了内核中的设备树,通过这个文件系统,可以查看和修改设备 及其属性状态,在硬件调试阶段非常实用。 再简化理解: class_attribute是一种用于向用户空间暴露设备类(class)属性的机制, 它允许内核驱动将设备类的特定信息,导出到/sys/class/目录下,供用户空间程序读取或修改。 文件系统类接口,备注:

1.1 sysfs

内核设备模型的核心文件系统/sysfs, 驱动通过class_create , device_create, sysfs_cr

Read more

Android Handler的使用

1.描述

本文主要是快速记录一下Handler的使用,大体了解一下Handler类,使用该类监听来自其它线程的消息。 通过这种方式,实现类间的线程安全通信,尤其适合需要跨线程更新UI或者执行异步任务的场景。

2.流程

主要使用流程,创建Handler类,重写,调用。详细:

2.1 定义Handler类

在类中创建Handler实例,重写handleMessage方法

2.2 发送消息

其它线程通过该Handler发送消息

2.3 处理消息

Handler在其绑定的线程中调用handleMessage处理消息。

3.注意事项

在类中创建Handler本身不创建新线程,它只是用于在已有线程中处理消

Read more

Linux上probe流程理解

1.简介

  在实际开发中,我们通过配置设备树里面的compatible属性,在将这个platform_driver注册到系统platform总线上时, 通过compatible属性匹配时,就会自动调用probe函数,进行platform_driver的初始化工作。在probe之前,其实有一些操作过程已经默认被执行了, 其整体流程如下:

2.platform_device生成时机

  platform_device是自动在早期生成的。

2.1) 设备树解析时机

内核启动早期

  • bootloader传递dtb给内核
  • 内核入口->setup_arch-

Read more

Android8.1上Sensor传感器驱动--HAL层

1.简述

  基于展锐W377平台上进行,HAL层主要作用是将Linux内核层的数据,翻译成可供Framwork层识别的数据。 比如:将Gsensor传感器的三轴加速度,翻译成sensors_event_t结构体。 核心总结:

  • 1.1 内核驱动做input上报
  • 1.2 vendor HAL读input节点,翻译成sensors_event_t
  • 1.3 SensorService 只接收 sensors_event_t
  • 1.4 APP层只能拿到SensorService分发的数据

理解:   vendor里面,将Linux驱动里面的input devi

Read more

Fatfs相关内容科普

1. FATFS简介

Fatfs是嵌入式上常间的文件系统, 其源文件结构上如下图所示: 该文件系统模块,支持FAT12/FAT16/FAT32。通常配置FATFS时, 需要设置簇大小(cluster size)。 fatfs文件系统上布局

2. Fatfs特性

2.1 复制文件访问

Fatfs模块默认不支持对复制文件的共享控制,仅当文件的打开方式为只读模式,才允许共享控制, 禁止以写入模式对文件进行复制打开,而且打开的文件不允许被重命名和删除,否则会破坏卷的FAT 结构。

2.2 可重入性

不同卷的文件操作是可以重入的,并且可以同时工作,同一个卷是不可重入的,但是可以利用 _FS_REEN

Read more