Linux上input子系统使用

1.简介

  本文档主要记录input子系统使用,我们通过驱动Linux上iic连接的手势识别传感器paj7620来展开。
(于2019年开发瑞芯微平台上使用)涉及到的驱动模块:
DTS设备树input子系统I2C模块workqueue工作队列

2.传感器驱动

2.1 传感器数据结构

构造好传感器的数据结构,涉及到i2c模块,延时工作队列,input_device用来上报消息。

//paj7620传感器
struct gesture_sensor{
    struct i2c_client *client;
    struct delayed_work poll

Read more

Trace32分析Threadx系统

1.简介

本wiki页主要是备份Trace32 分析展讯RTOS(适用展讯UIX8910,展讯W307等平台,操作系统使用ThreadX) dump文件。

 1. 用于系统产生死机dump时,定位系统问题

 2. 用于分析系统在一些场景下,预判系统设定分配资源是否合理

例如当系统处于高负荷状态(视频通话等),此时触发其它操作,例如:定位等,可以通过手动触发dump,来查看,开发中分配的

queue,thread优先级等等,是否合理。

2.Trace32 使用

Trace32 simulator安装完毕后。分析前,请准备好需要分析的dump文件,以及对应的axf文件,如果

是正常发生的dump,

Read more

海外环境下HTTP异常分析

1.背景

使用紫光展锐W307芯片(uws6130e),在海外环境使用海外sim卡(英国网络O2, Three运营商), 在使用使用过程中发现了,HTTP网络请求异常。

2.O2运营商卡

O2运营商卡,http出现的网络现象,socket建立连接后,一旦发送数据,立马会得到对端RST+ACK回复 (也就是无效请求,被拒绝)。其实服务端进行抓包,数据并未到达服务端,由于使用运营商网络 中间节点较多,我们只能从无效请求分析,猜测这个无效请求是由于什么造成的,我们使用python socket 进行尝试模拟这个请求(其实在中国请求正常,在英国这个O2运营商网络上不正常)。 最后锁定了HTTP hea

Read more

yolov5简易测试

1.简介

主要目的就是进行记录安装yolov5的过程,里面包含了简易训练(正负样本图片非常少,不是为了精确度)。

2.安装

安装主要依赖python环境,所以安装好python非常重要

2.1 python安装

建议ptyhon源库设置为清华等国内的源,这个不设置网速慢,或失败!! pip install xxx -i https://pypi.tuna.tsinghua.edu.cn/simple 或者直接pip.ini指定(windows下,用户/pip/pip.ini )

[global]
timeout = 1000
index-url = http://mirrors.aliyun.

Read more

立创EDA使用

1.概述

立创EDA,是嘉立创公司自研推出(当前阶段,对于PCB打样优惠力度大),我们体验主要从 原理图绘制(原理图库使用),PCB设计,打样等方面对比。 对于用户来讲,原理图设计中,封装库等,立创EDA有一个比较完善的封装库(器件多是嘉立创商城的)。 对于DIY阶段是非常方便的。

2.原理图设计阶段

各家软件基本差不多,如果关心封装,这个EDA软件,可以直接看到嘉立创商城里面的器件。

3.PCB设计

主要是布线,各个层的显示、隐藏,各个软件其实差不多,只是看方便性。 圆弧走线,等长,这些性能其实还是不错(对比AD软件,CPU消耗确实友好不少)

4.实物打样

立创EDA的设计,可以直接导

Read more

Wireshark分析HTTPS

1.说明

主要是通过wireshark抓包分析HTTPS通信过程,了解一下HTTPS通信交互流程。 可以较清晰看到TCP的三次握手,四次挥手。

2.实际抓包结果分析

备注:举例的例子,是访问海外服务环境,其实际信号较差,不光可以看到基本握手流程, 也包含了TCP的重传(超时重传、虚假重传)。

2.1 TCP握手流程

上面是TCP的三次握手,1207为客户端,建立的端口,443为服务端HTTPS的端口 1)SYN同步 1207--> 443 2)SYN,ACK 443--> 1207 3)ACK 1207--> 443 连接建立成功 上述过程信号较差(数据连接较不稳定,超时重

Read more

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 HandlerThread的使用

1.简述

HandlerThread继承自Thread的特殊线程,内置有Looper和MessageQueue。 区别于Handler,Handler是消息处理器,用于发送和处理Message和Runable。 HandlerThread是为特定场景(持续性后台任务)优化的线程实现。

2.HandlerThread作用

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

  • 1.Handler 本质是消息处理,非线程,需要显式指定Looper(如:Lo

Read more

卡尔曼Kalman算法使用简述

1.卡尔曼作用简述

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

2.卡尔曼核心步骤

2.1 预测步骤

状态预测 误差协方差预测

2.2 更新步骤

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

3.关键性参数

3.1 初始化状态估计X

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

3.2 初始误差协方差P

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

Read more