自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 内存泄漏 定位方法

如果你点进这篇文章,那么要么你是一个C\C++程序员,要么你曾经或多或少被内存泄漏问题所困扰。嗯,作为一个Linux嵌入式程序员,我自然是两者兼具。在工作中,总是会遇到内存泄漏的问题,对于那些记性不太好的程序员,本人在此强烈建议如果你有手动分配内存的话,请一一记录,否则很多时候你的差记性,可能会对他人造成莫大的困扰。建议大家都能严格要求自己吧。好吧前面是一些牢骚呢,下面我们来正式地聊一聊,面对内存泄漏和内存碎片,我们到底有些什么手段去检测吧。

2023-03-25 17:59:51 2165 1

原创 spinlock、mutex的使用与休眠

最近在工作中遇到了一些关于锁的问题,遇到了一些困扰,记录一下spinlock 自旋锁,会一直阻塞,直到能够获取到锁位置。mutex 互斥量,如果拿不到锁,就会进行休眠,引起进程调度。但是我们在做内核驱动的时候,总会遇到在某些场景下,不能使用某些锁的情况,总结如下:1、不能使用休眠锁的场景中断上下文中,我们不能有睡眠,包括休眠函数以及会引发休眠的函数。而mutex互斥量,会引起休眠,一旦在中断中使用,便可能会引起内核崩溃2、spinlock不适用的函数:会引起进程调度的函数

2022-03-22 08:17:44 1662

原创 Linux文件系统与设备文件

打开int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);

2021-06-16 20:06:04 442

原创 Linux内核模块

模块(Module)Linux内核的整体架构本就非常庞大, 其包含的组件也非常多。 而我们怎样把需要的部分都包含在内核中呢?一种方法是把所有需要的功能都编译到Linux内核中。 这会导致两个问题:一是生成的内核会很大,二是如果我们要在现有的内核中新增或删除功能, 将不得不重新编译内核。有没有另一种机制可使得编译出的内核本身并不需要包含所有功能, 而在这些功能需要被使用的时候, 其对应的代码被动态地加载到内核中呢?...

2021-06-16 19:38:40 423

原创 Linux异步通知

异步通知作用:一旦设备就绪, 则主动通知应用程序, 这样应用程序根本就不需要查询设备状态, 这一点非常类似于硬件上“中断”的概念, 比较准确的称谓是“信号驱动的异步I/O”。

2021-06-16 19:02:13 404

原创 Linux 内存与I/O访问

内存空间与I/O空间

2021-06-16 18:14:13 572

原创 Linux定时器

软件意义上的定时器最终依赖硬件定时器来实现内核在时钟中断发生后检测各定时器是否到期, 到期后的定时器处理函数将作为软中断在底半部执行。

2021-06-16 14:36:51 414

原创 Linux中断

由于中断服务程序的执行并不存在于进程上下文中, 所以要求中断服务程序的时间要尽量短。 因此, Linux在中断处理中引入了顶半部和底半部分离的机制。中断软中断

2021-06-16 13:32:05 277

原创 Linux的并发控制

访问共享资源的代码区域称为临界区(Critical Sections)中断屏蔽原子操作自旋锁信号量互斥体

2021-06-16 09:10:55 607

原创 解决conda install时出现 failed with initial frozen solve. Retrying with flexible solve 的问题

现象:使用conda install命令安装python包时,一直出现如下的报错信息failed with initial frozen solve. Retrying with flexible solve.原因分析:其实我并没有找到确切原因,但是结果资料搜查,主要有一下两个可能性: 1、Conda版本问题,如果conda版本超过4.8,就可能会出现这个问题 2、非root用户解决方法有两个:1、降级conda,命令如下con...

2021-04-19 14:36:48 77564 5

原创 ISP--Black Level Correction(黑电平矫正)

在上一篇文章中,我们已经知道了Sensor的构造,Sensor的成像原理。但是从光信号转换为图像,其中还有许多的工作,OBC就是其中之一。在之前的文章中,我们已经知道了,每一个像素点都是由一个光电二极管控制的,由二极管将电信号,转换为数字信号。那么,我们知道了,图像的像素值是与电信号强度相关的。但是,我们得知道,每一个光电二极管要想工作,都得有一定的电压。这就是的,即使在外部没有光线照射的时候,Sensor也会有一定的电压。那这不就会在成像时叠加到电信号中,影响成像了吗?这可不兴加啊,宝友!

2021-04-18 22:02:20 8903 2

原创 Android 应用权限问题 -- 路径正确,bitmap无法读取文件

在调用文件管理器获取文件的时候,已经解析出了文件的路径,但是用bitmap来读取的时候,死活都读不出来,一直返回null对象。于是进行了检查,1、返回路径是正确的2、加入了读写的权限<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE

2021-03-17 11:09:56 551

原创 Camera CMOS Sensor成像原理

时至今日,手机相机已经是我们几乎无法离开的最重要工具之一。而且每次手机发布,手机的相机也是我们除了处理器之外最为关键的卖点之一。但是你真的知道它是怎么运转的吗?看到这里,就有人要问了,大哥,我用相机,我还需要知道它的原理吗?我不知道怎么造汽车,这影响我单手开法拉利?呃,你说的没错,确实没啥必要知道。但是我就是要写,因为我这周摸鱼就干了这个的总结。☺首先,都是大家很熟悉的相机类型啦。喜欢摄影的大兄弟一定都懂,就分两种嘛:1、CCD Sensor2...

2021-02-28 10:24:41 5929 1

原创 BM3D 算法原理详细解析 按过程步骤讲解(附C++实现代码)

BM3D是2007年提出的算法了,至今已经有一些年头了,但是仍然不妨碍它基本上还是最强的去噪算法。在初步了解了BM3D的算法后,会发现,BM3D有种堆叠怪的嫌疑。有很多不同的算法的影子在里面,比如Non-Local Means、Wavelet shrinkage等。我感觉思想更像是暴力出奇迹吧。但是架不住效果好。就类似现在的神经网络,一层不行我就来两层。但是相比简单的堆叠,BM3D还是比其他的算法的细节保留上要好一些。好了,不废话了,下面直接来看BM3D的算法原理吧。BM3D算法原理:

2021-02-20 17:43:48 11048 7

原创 HEAP CORRUPTION DETECTED:after Normal block错误的方法解决与分析

先说现象,这个问题的表现现象主要是:在malloc(new(new[]))之后,内存使用正常,但是在free(delete(delete[]))时,就会出错了。结论:出现这个问题的主要原因是:分配的内存少于实际使用的内测。比如:char* data = malloc(sizeof(char)*3) data[4];最快的检测方法:直接先加大自己分配的内存大小,然后看是否还会报错。如果不会报错了,那说明就是这个问题。 ...

2021-02-20 14:09:18 3725 5

原创 gerrit 将代码从一个分支合并到另外一个分支 Cherry Pick的使用

最近公司项目里从项目主线分支master拉了一个量产的分支,搞得在修完bug之后,必须得两个分支都提交修改代码。第一天拉完分支后,我给整忘了,只提交了主线的代码。然后挨批了。但是我发现我也不是很熟悉想另外一个分支提交代码的流程。研究了一下,这里记录一下第一种方法:1、repo sync #同步服务器上的远程代码,这样回将分支信息也进行同步2、git branch -a #查看分支信息,确保有所需的分支3、git checkout [分支名] #切换到对应

2021-02-03 13:57:38 8496

原创 git在工程中的操作 - patch stash status checkout reset log

最近接触了大量的git操作并且遇到了很多的问题,这里记录一下,并且方便以后查阅。也希望能够帮到其他的人。1、删除文件及其上传在工作空间手动删除文件 会显示$ git status On branch master Changes not staged for commit: (use "git add/rm <file>..." to update what will be committed) (use "git checkout -- <fil

2020-12-27 00:06:28 336

原创 git提交错误 [remote rejected] HEAD -> refs/xxx 原因以及解决方法

今天向gerrit提交代码时,发生了一下的错误:error: unpack failed: error Missing tree be99d2d528be3ef6b4354fb88dd72059ee7f71eefatal: Unpack error, check server logTo ssh://gerrit.blackshark.com:29418/git/android/platform/vendor/qcom-proprietary/chi-cdk! [remote rejected].

2020-11-26 10:54:28 37134 3

原创 LeetCode解题总结--双指针

双指针解题多用于链表、数组等问题当中。双指针的难度在于: 1、一开始可能很难想到 2、变式很多 3、指针并不是具体指的函数中的“指针”,而是一种思想。例如设置两个不同的可动标志位,也是”双指针“下面以具体的LeetCode题目补充解释:题目汇总: 26. 删除排序数组中的重复项 80. 删除排序数组中的重复项 II 86. 分隔链表 141. 环形链表 (经典题,引...

2020-11-02 14:54:16 374

原创 C++ istream_iterator的源码与使用方法分析

最近在看C++ STL的源码,看的主要是gnu2.9版本的源码。其中看到了istream_iterator的实现源码,源码如下:template <class T, class Distance = ptrdiff_t> class istream_iterator { friend bool operator== __STL_NULL_TMPL_ARGS (const istream_iterator<T, Distance>& x,

2020-08-19 13:42:49 1008 1

原创 手机root后无法向system写入文件,提示/system is read-only的解决方法

今天在用ADB操作手机时,使用adb push 命令想将文件写入到/system 和 /vendor文件夹中,但是提示了这两个文件夹是read-only的。在遇到这个问题之后我第一时间查看了我adb的权限,使用adb root 但是得到的提示是:说明adb的权限是没有问题的,已经是在root权限下了。然后上网查了一下,都说是重新挂载一下之后就好了,所以我就使用一下命令对system和vendor进行重挂载 mount -o remount rw /system mount

2020-08-15 10:52:57 15753 4

原创 NML(Non-Local Mean)非局部平均算法 完全解析与积分图加速 (附代码)

最近开始学习在Denoise方面的内容,在这方面比较重要的传统算法当然是BM3D这种到目前比较

2020-07-28 14:36:55 6116 3

转载 camera tuning的常用缩写

CC, color conversion,色彩转换CC, color correction,色彩矫正CE, chroma enhancement,色度增强SNR,signal-to-noise ratio,信噪比SNR, skin noise reduce,肤色降噪STD, standard deviation,标准差OIS, optical image stabilization 光学稳像PDAF,phase detection auto focus,相位对焦CPP: ca

2020-06-06 15:33:47 5091

原创 Android NDK学习笔记(一)

一、构建系统(一)Android.mkLOCAL_PATH: Android.mk文档必须以LOCAL_PATH变量的定义开头CLEAR_VARS: 设置为clear-vars.mk片段的位置。包含Makefile片段可以清楚除了LOCAL_PATH以外的LOCAL _< NAME>变量,例如 LOCAL_MODULE与LOCAL_SRC_FILES等; 因为在单次...

2020-02-10 21:20:02 570

原创 设计模式之三:单例模式 Singleton

在实际工作中,我们很多时候在对类对象的管理和使用上,希望自己定义的类只有一个实例化对象,这样才能保证,在整个流程中使用的都是同一个实例对象,从而保证流程的正确性,那么,我们要怎么样才能,让自己定义的对象只被声明一次呢?我们不能简单地说,那我告诉,类的使用者,让他只实例化一次不就好了吗?但是,我们要说,在一套好的代码里,这是类定义者该做的事情,而不是类的使用者的责任下面,我们来介绍,单例...

2020-02-01 10:20:33 218

原创 Linux 下 C++ 遍历文件夹下的文件名

在C++中,我们一般学的时候都很少学到相关的文件夹方面的操作,相对来说,C++的文件夹操作也比较麻烦。而不像Python有OS模块,在操作文件夹方面简单易于上手。下面我们直接看一下,C++遍历文件夹的代码吧:#include <string>#include <dirent.h>#include <stdio.h>#include &lt...

2019-12-16 14:20:40 5392 1

原创 Fseek()与Ftell()函数的作用

Fseek()fseek函数功能是将文件指针移动到指定的地方,因此可以通过fseek重置文件指针的位置。函数原型:int fseek(FILE *stream, long offset, int origin);参数说明:stream : 待移动的FILE型指针变量offset:偏移量,每次移动多少个字节origin: 指针开始的位置返回值: 如果fseek (...

2019-12-11 15:59:04 6336

原创 C++ 多线程--STL库 总结版 (详细)

最近在看C++ STL库的多线程部分,基本上看完了,现在就来做一下总结吧。一、高级接口 1、多线程启动函数:std::async() 2、线程返回结果:std::future 3、共享变量:std::shared_future二、低级接口 1、多线程启动函数:Class std::thread ...

2019-11-05 14:42:18 5584

原创 图像解析力算法—SFR(Spatial Frequency Response)源码分析(二)--完

在上一篇图像解析力算法—SFR(Spatial Frequency Response)源码分析(一)中介绍了SFR的几个重要函数,接下来我们看一下主流程和其他函数。4、sfrProc作用:计算SFR数值的主流程函数short sfrProc (double **freq, double **sfr, int *len, double *farea, ...

2019-09-11 09:16:44 6621 7

原创 图像解析力算法—SFR(Spatial Frequency Response)源码分析(一)

在前面的文章中,我们已经分析了SFR的算法原理与步骤,下面我们直接来分析源码,源码中主要的函数主要分为一下几个:1、locate_centroids作用:定位每一行像素的矩心位置unsigned short locate_centroids(double *farea, double *temp, double *shifts,unsigned short size_x, unsigne...

2019-09-04 11:35:26 6936 7

原创 图像处理之细化算法(Thinning Algorithm)C++实现

最近在实验室里遇到了一个问题,就是在有一张轮廓二值图的情况下,如何才能将轮廓进行细化,得到轮廓的骨架。效果如图:可以看到,右边图中的数字变瘦了,这就是细化算法的作用下面我们来讲一下,Thining-Algorithm的算法原理。一、八领域我们先来介绍一下,八领域这一个概念p9 p2 p3 p8 p1 p4 p7 p6 p5 ...

2019-09-02 16:41:09 6768 5

原创 图像解析力算法—SFR(Spatial Frequency Response)原理分析(二)

在图像解析力算法—SFR(Spatial Frequency Response)原理分析(一)中,我们已经分析了SFR的前四个步骤,接下来,我们继续讨论以下的五个步骤4、重新定位ROI,获得ESF5、对获得的ESF进行四倍超采样6、通过差分运算获得LSF7、对LSF应用汉明窗8、进行DFT运算4、重新定位ROI,获得ESF这一步其实比较复杂,我也不确定在我的讲述之...

2019-08-24 21:40:03 11421 16

原创 图像解析力算法—SFR(Spatial Frequency Response)原理分析(一)

在图像解析力算法—SFR(Spatial Frequency Response)概念理解一文中,我们已经讲解了在阅读SFR源码前必须了解的概念,下面我们来讲解一下,SFR算法的计算具体流程,然后结合源码进行分析, 获取计算公式。先来看图,直观感受一下吧:可以看到,SFR的具体步骤就是上面的九大步骤,箭头中对应的是每一步执行前后对应的输入和输出。总结如下:0、获取垂直斜边的ROI...

2019-08-22 23:52:30 23165 6

原创 图像解析力算法—SFR(Spatial Frequency Response)概念理解

最近这一个月在搞SFR算法--(空间频域响应),终于也算是搞出来了,网上关于SFR计算MTF的资料和博客也是比较少,现在就是总结一下,也算是方便后人,篇幅估计会比较长,会分篇慢慢写。讲到SFR和MTF,刚入门的小伙伴,肯定会觉得一脸懵逼,我们先来解释一下这些基础概念成像系统的解析力: 摄像头最关键的指标之一。所有用户拿到一张照片的时候首选看到的是照片清楚不清楚,这...

2019-08-21 15:04:11 49304 17

原创 RGB转换NV21(YUV的一种储存格式)(代码实现)

实习的第二个任务是,将RGB图片转换成NV21(YUV的一种储存格式,也是在Android手机中最常见的图片 raw储存格式)我们先来看看NV21 以及其他相似的存储格式吧~NV21(YUV420)介绍NV12和NV21属于YUV420格式(每2x2四个Y,共用一组uv),是一种two-plane模式,即Y和UV分为两个Plane,但是UV(CbCr)为交错存储,而不是分为三个pl...

2019-08-05 17:02:09 8310 1

原创 黑鲨科技图像处理实习生---面试题目总结

今天去黑鲨科技面试图像处理实习生,本来是说不用做题的,但是还是拿了一份校招的题目来给我做。。。这里记录一下我不会的题目。。1、RAW图像数据 和 MIPI图像数据的转换大概题目意思就是:RAW的数据通常为10bit,存储RAW需要两个Byte,其中有4个bit位是空着的,这样就会浪费储存空间,MINI RAW数据充分利用了这个特性,采用五个Byte,一共40bit来储存4个RAW数据。...

2019-07-18 22:49:24 1028 2

原创 TX2安装caffe(从头开始,最全教程)

(大二时记录在有道云笔记的记录,现在开始搬运)准备工作:1.刷机。第一次使用TX2,那是需要刷机的。由于TX2自带的ubuntu系统比较老,不适合我们接下来的工作,所以我们需要升级TX2的系统。笔者使用的是ubuntu16.04。简单地说,就是用网线将TX2与一台ubuntu电脑连接,然后下载一大堆更新包。网上刷机的教程很多,这里就不详细说明。附刷机连接:https://www.jian...

2019-07-17 17:30:20 1191 1

原创 使用YOLO(You only look once) 对灰度图(单通道)进行训练和识别

最近,实验室的比赛在识别上用到了灰度图,因为官方对颜色进行了修改,我们在没有官方数据的情况下,只能使用灰度图进行训练识别,以期望可以排除颜色的影响。但是在使用yolo训练单通道灰度图的时候出现了一些问题,在修改cfg配置文件后进行训练,一直出现,segmentation fault的错误。在百度上也没有找到类似的问题,最后在GitHubcomments上找到了答案,以下记录一下,方便后人。...

2019-07-12 22:47:19 15727 27

原创 Tensorflow导入训练模型进行识别(附代码)

最近在做李宏毅的深度学习的作业,导入模型的时候,发现,我在导入模型进行预测时,需要重新手动构建网络进行检测,这样显得十分不“智能”。之前在比赛中一直是使用这种方法,但是由于当初比较忙,并没有深究这个问题。现在,学习了一下,发现使用Tensorflow可以用两种方法进行预测。首先,我们来讲一下,如何将如何加载模型:在TensorFlow中,加载模型的方法:with tf.Ses...

2019-06-23 20:51:25 6780 1

原创 ImportError: libcudnn.so.7: cannot open shared object file: No such file or directory

在安装cudnn的时候,安装完成之后,importTensorFlow会出现如题中的错误,这个报错要么是环境变量配置问题,要么是CUDNN连接建立问题。1.环境变量在~/.bashrc 的最后添加export PATH=/usr/local/cuda/bin${PATH:+:${PATH}}export LD_LIBRARY_PATH=/usr/local/cuda/lib64...

2019-06-10 14:14:14 9432

空空如也

空空如也

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

TA关注的人

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