自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

QtHalcon

在计算机视觉路上努力前行

  • 博客(41)
  • 资源 (18)
  • 收藏
  • 关注

原创 USB驱动

1 概述   ######1.1 USB总线拓扑结构USB设备的连接如图19.1所示,对于每个PC来说,都有一个或者多个称为主机(Host)控制器的设备,该主机控制器和一个根集线器(Hub)作为一个整体。这个根Hub下可以接多级的Hub,每个子Hub又可以接子Hub,每个USB设备作为一个结点接在不同级别的Hub上1  USB主机控制器(Host Control)USB Hos...

2018-10-31 20:07:50 1300 1

原创 并发与竞态

并发(Concurrency)指的是多个执行单元同时、并行被执行,而并发的执行单元对共享资源(硬件资源和软件上的全局变量、静态变量等)的访问则很容易导致竞态(RaceConditions)。例如,对于globalmem设备,假设一个执行单元A对其写入3000个字符“a”,而另一个执行单元B对其写入4000个“b”,第三个执行单元C读取globalmem的所有字符。如果执行单元A、 B的写操作按...

2018-10-31 16:03:53 671

原创 记忆搜索

算法导论学习-动态规划之记忆化搜索一. 动态规划动态规划(dynamic programming),与“分治思想”有些相似,都是利用将问题分 为子问题,并通过合并子问题的解来获得整个问题的解。于“分治”的不同之处在 于,对于一个相同的子问题动态规划算法不会计算第二次,其实现原理是将每一个计算过的子问题的值保存在一个表中。二. 记忆化搜索我们常见的动态规划问题,比如流水线调度问题,矩...

2018-10-30 22:57:24 376

原创 分配内存

1 kmalloc()static __always_inline void *kmalloc(size_t size, gfp_t flags)falgs:kzalloc()同kmalloc一样,只是分配的内存预先被清零2 vmalloc()void *vmalloc(unsigned long size)可以分配到很大的的虚拟内存,但是不是连续的内存...

2018-10-27 19:55:19 327

原创 等待队列

在Linux驱动程序中,阻塞进程可以使用等待队列(Wait Queue)来实现。由于等待队列很有用,在Linux 2.0的时代,就已经引入了等待队列机制。等待队列的基本数据结构是一个双向链表,这个链表存储睡眠的进程。等待队列也与进程调度机制紧密结合,能够用于实现内核中异步事件通知机制。等待队列可以用来同步对系统资源的访问。例如,当完成一项工作之后,才允许完成另一项工作。在内核中,等待队列是有很...

2018-10-27 16:55:23 2726

原创 Linux的原子变量

原子变量的操作是一种不可以被打断的操作,原子操作需要硬件支持,因此是架构相关。类似于汇编的一条汇编指令,不可以被分割。两种原子变量:原子整型操作 原子位操作1 原子整型操作有时候需要共享的资源可能只是一个简单的整型数值。例如在驱动程序中,需要对包含一个count的计数器。这个计数器表示有多少个应用程序打开了设备所对应的设备文件。通常在设备驱动程序的open()函数中,将co...

2018-10-27 15:17:45 4319

原创 11.网络设备驱动

网络设备驱动概述与字符设备和块设备不同,网络设备并不对应于/dev目录下的文件,应用程序最终使用套接字完成与网络设备的接口。因而在网络设备身上并不能体现出“一切都是文件”的思想。网络设备驱动4个层次:网络协议接口层 网络设备接口层 提供实际功能的设备驱动功能层 网络设备与媒介层 1 Linux网络设备驱动的结构   ##########1)网络协议接口层向网络层协...

2018-10-25 19:04:32 590

原创 10.块设备驱动

1.正确理解块设备驱动的概念 ###############1.1、块设备和字符设备的差异 @@@@@@(1)块和字符是两种不同的访问设备的策略(2)同一个设备可以同时支持块和字符两种访问策略(3)设备本身的物理特性决定了哪一种访问策略更适合(4)块设备本身驱动层支持缓冲区,而字符设备驱动层没有缓冲(5)块设备驱动最适合存储设备1.2、块设备驱动的特点    @@@@@@@@...

2018-10-24 19:12:46 261

原创 Linux中的IDR机制

IDR机制在Linux内核中指的就是整数ID管理机制。从实质上来讲,这就是一种将一个整数ID号和一个指针关联在一起的机制。1  IDR机制原理  ------------IDR机制适用在那些需要把某个整数和特定指针关联在一起的地方。例如,在1IC总线中,每个设备都有自己的地址,要想在总线上找到特定的设备,就必须要先发送该设备的地址。当适配器要访问总线上的IIC设备时,首先要知道它们的ID号...

2018-10-24 13:37:15 2013

原创 Linux常用C函数

可以参考这个:http://net.pku.edu.cn/~yhf/linux_c//第三章   文件IO******************************************/#define STDIN_FILENO 0#define STDOUT_FILENO 1#define STDERR_FILENO 2函数: fpathconf或pathconf ——   ...

2018-10-23 08:30:58 763 1

原创 如何在500w个单词中统计特定前缀的单词有多少个?

参考这个:https://mp.weixin.qq.com/s?__biz=MjM5NTY1MjY0MQ==&mid=2650743528&idx=3&sn=ae59dce7a06faaf6c335ba4abe7348b5&chksm=befeb7a689893eb0883892f8f82c1d2cf92e090c2ee10b99809164fb94cf7934...

2018-10-22 08:32:31 352

原创 9.2 Linux I2C核心、总线与设备驱动

I2C总线仅仅使用SCL、 SDA这两根信号线就实现了设备之间的数据交互,极大地简化了对硬件资源和PCB板布线空间的占用。因此, I2C总线非常广泛地应用在EEPROM、实时钟、小型LCD等设备与CPU的接口中I2C子系统详解###########################I2C总线汇总概览(1)三根通信线:SCL、SDA、GND(2)同步、串行、电平、低速、近距离(3)总线式...

2018-10-21 16:20:41 5236 1

原创 Linux中断,时钟和延时

1 概述   ###############由于中断服务程序的执行并不存在于进程上下文中,所以要求中断服务程序的时间要尽量短。因此, Linux在中断处理中引入了顶半部和底半部分离的机制。另外,内核对时钟的处理也采用中断方式,而内核软件定时器最终依赖于时钟中断。 根据中断的来源,中断可分为内部中断和外部中断内部中断的中断源来自CPU内部(软件中断指令、溢出、除法错误等,例如,操作系...

2018-10-21 08:59:59 2276 1

原创 9.触摸屏驱动移植实战

1.触摸屏驱动概览##########################1.1、常用的2种触摸屏(1)电阻触摸屏。驱动一般分2种:一种是SoC内置触摸屏控制器,一种是外置的专门触摸屏控制芯片,通过I2C接口和SoC通信。(2)电容触摸屏。驱动只有一种,外接专用的电容式触摸屏控制芯片,I2C接口和SoC通信。1.2、X210使用的触摸屏(1)X210V3使用的触摸屏:ft5x06(2)X...

2018-10-20 19:30:23 1837

原创 在驱动中利用中断

1.利用中断号产生中断通过执行中断函数来达到利用中断注册中断:request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev);irq:中断号handler:中断函数flags:中断类型#define IRQF_TR...

2018-10-20 15:48:29 397

原创 驱动开发误用指针错误:Unable to handle kernel NULL pointer dereference at virtual address

今天弄驱动时,出现这个问题,检查了好久,才发现问题所在地方Unable to handle kernel NULL pointer dereference at virtual address 00000000原因:因为我用到了中断,在中断函数中断我调用了一全局指针P,这个指针在定义时为NULL。由于系统子注册玩中断后会马上检验中断函数,即使当前函数还没执行完。这就带来了一个问...

2018-10-20 15:47:28 5693

原创 8.input子系统基础之按键

1.什么是input子系统1.1、何为输入设备1.2、linux中输入设备的编程模型(1)命令行界面的输入类设备应用接口(2)GUI界面带来的麻烦、不同的输入类设备也会带来麻烦(3)struct input_event1.3、input子系统简介(1)linux的input子系统解决了什么问题(2)input子系统分4个部分:应用层 + input event + input c...

2018-10-17 21:03:33 963

原创 Linux完成量源码解析

一:概述:在驱动程序开发中,一种常见的情况是:一个线程需要等待另一个线程执行完某个操咋后,才能继续执行。前面讲的信号量其实也能够完成这种工作,但其效率比Linux中专门针对这种情况的完成量机制要差些。 Linux中提供了一种机制,实现一个线程发送一个信号通知另一个线程开始完成某个任务,这种机制就是完成量。完成量的目的是告诉一个线程某个事件已经发生,可以在此事件基础上做你想做的另...

2018-10-17 20:54:52 348

原创 图片的属性

首先我们先来理解下位深度与色深这两个概念。 1、位深度指的是存储每个像素所用的位数,主要用于存储 2、色深指的是每一个像素点用多少bit存储颜色,属于图片自身的一种属性Android Bitmap中的Config参数其实指的就是色深Bitmap.Config ARGB_4444:每个像素占四位,即A=4,R=4,G=4,B=4,那么一个像素点占4+4+4+4=16位  Bitmap...

2018-10-17 17:02:31 4010

原创 深入理解函数指针

指针型函数:函数类型 *函数名(形参定义表)int *fun(int x, int y)函数指针:函数类型 (*函数指针名)(形参表)int (*fun) (int x, int y)函数指针数组:函数类型 (*函数指针名[数组元素个数])(形参表)int (*fun [10]) (int x, int y)上面是定义了一个指针数组,数组元素为函数...

2018-10-16 18:13:26 3705

原创 7.framebuffer驱动详解

1.framebuffer介绍1.1、什么是framebuffer(1)裸机中如何操作LCD(2)OS下操作LCD的难点(3)framebuffer帧缓冲(简称fb)是linux内核中虚拟出的一个设备(4)framebuffer向应用层提供一个统一标准接口的显示设备(5)从驱动来看,fb是一个典型的字符设备,而且创建了一个类/sys/class/graphics1.2、frameb...

2018-10-14 19:09:38 2581

原创 Linux的自旋锁spin源码解析

1. 概述——————————————————————在Linux中提供了一些锁机制来避免竞争条件,最简单的一种就是自旋锁。引入锁的机制,是因为单独的原子操作不能满足复杂的内核设计需要。例如,当一个临界区域要在,多个函数之间来回运行时,原子操作就显得无能为力了。Linux中一般可以认为有两种锁,一种是自旋锁,另一种是信号量。这两种锁是为了解决内核中遇到的不同问题开发的。自旋锁的作...

2018-10-14 18:50:18 1253

原创 Linux(内核)信号量源码解析(非系统调用)

1.信号量概述------------------------------------------------Linux中提供了两种信号量,一种用于内核程序中,一种用于应用程序中。由于这里讲解的是内核编程的知识,所以只对内核中的信号量进行详细讲述。自旋锁和信号量的区别:自旋锁:会一直检测是否可以上锁,因此当有锁可用时,自旋锁的反应快速信号量:没有锁后会进行休眠,直到有锁后被...

2018-10-14 17:15:00 1035

原创 s3c的gpio控制接口

经常会遇到这四个,来进行gpio的操作gpio_request(S5PV210_GPD0(2), "GPD0");                               //申请gpio,这里会对该gpio进行上锁s3c_gpio_setpull(S5PV210_GPD0(2), S3C_GPIO_PULL_UP);    //设置为上升s3c_gpio_cfgpin(S5PV21...

2018-10-14 15:39:02 901

原创 Linux的位图

可以参考:https://www.cnblogs.com/zpcdbky/p/5825849.html 重要宏定义:#define DYNAMIC_MINORS 64 /* like dynamic majors */#define DECLARE_BITMAP(name,bits) \ unsigned long name[BITS_TO_LONGS(bits)]#de...

2018-10-14 10:50:45 763

原创 6.misc类设备与蜂鸣器驱动

1.板载蜂鸣器驱动测试1.1、驱动部分(1)移植内核已经提供了蜂鸣器驱动源码(2)make menuconfig(3)bug排查。修改Makefile中的宏名,最终可以在系统中看到 /dev/buzzer1.2、应用部分(1)应用编写:打开文件+ioctl(2)测试实践2.misc类设备介绍由于Linux驱动倾向于分层设计,所以各个具体的设备都可以找到它归属的类型,从而套...

2018-10-13 19:35:48 456

原创 x210-led.c 解析

   #include <linux/module.h>#include <linux/init.h>#include <linux/kernel.h>#include <linux/sched.h>#include <linux/delay.h>#include <linux/platform_device...

2018-10-13 16:01:47 343

转载 DEVICE_ATTR的使用

转载:https://blog.csdn.net/njuitjf/article/details/16849333DEVICE_ATTR的使用使用DEVICE_ATTR,可以在sys fs中添加“文件”,通过修改该文件内容,可以实现在运行过程中动态控制device的目的。类似的还有DRIVER_ATTR,BUS_ATTR,CLASS_ATTR。这几个东东的区别就是,DEVICE_AT...

2018-10-13 15:39:13 155

原创 5.linux设备驱动模型

1.linux设备驱动模型简介1.1、什么是设备驱动模型(1)类class、总线bus、设备device、驱动driver(2)kobject和对象生命周期(3)sysfs(4)udev1.2、为什么需要设备驱动模型(1)早期内核(2.4之前)没有统一的设备驱动模型,但照样可以用(2)2.6版本中正式引入设备驱动模型,目的是在设备越来越多,功耗要求等新特性要求的情况下让驱动...

2018-10-10 10:19:43 20014 2

原创 数组指针和指针数组

指针数组:int *a[5];数组指针:int (*a)[5];指针数组的元素都是int *类型数组指针的类型都是int 类型数组指针的正确用法:int a[2][3]; //二维数组int (*p)[3]; //列元素为3个的数组指针p = a;问1:为啥数组指针要指定列大小问2:能否把 二维数组名 赋值 给二维指针int a[2][3];int *...

2018-10-08 16:23:18 377

原创 linux内核的gpiolib学习

mach-s5pv210\mach-smdkc110.c/* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */.phys_io    = S3C_PA_UART & 0xfff00000,.io_pg_offst    = (((u32)S3C_VA_UART) >> 18) & 0xfffc,....

2018-10-08 08:45:56 683

原创 Linux内核中的常用宏container_of

Container_of在Linux内核中是一个常用的宏,用于从包含在某个结构中的指针获得结构本身的指针,通俗地讲就是通过结构体变量中某个成员的首地址进而获得整个结构体变量的首地址。    Container_of的定义如下: #define container_of(ptr, type, member) ({            \                 const ty...

2018-10-07 19:01:13 244

原创 4.驱动框架入门之LED

 1.何谓驱动框架1.1、驱动是谁写的(1)驱动开发工程师(2)内核维护者1.2、驱动编程协作要求(1)接口标准化(2)尽量降低驱动开发者难度1.3、到底什么是驱动框架(1)内核中驱动部分维护者针对每个种类的驱动设计一套成熟的、标准的、典型的驱动实现,然后把不同厂家的同类硬件驱动中相同的部分抽出来自己实现好,再把不同部分留出接口给具体的驱动开发工程师来实现,这就叫驱动框架...

2018-10-05 20:11:07 597

原创 关于【error: expected identifier before ‘(’ token】错误的检查

今天编译一个文件时老是出错,把源头定位到一个结构体中是这样typedef struct GPJ0{ volatile unsigned int GPJ0CON; volatile unsigned int GPJ0DAT;}gpio_reg_r;错误就是:error: expected identifier before '(' token最后在网上找了一下,发现是GPJ...

2018-10-05 18:49:40 27934 1

原创 3.字符设备驱动高级

参考:https://blog.csdn.net/zqixiao_09/article/details/50839042static struct cdev my_cdev;  //设备属性结构体static dev_t dev_from;           //设备号static struct class *test_class = NULL;test_class =...

2018-10-04 15:17:35 801

原创 GNU C 与 ANSI C 的一些差别

Linux 上可用的 C 编译器是 GNU C 编译器,它建立在自由软件基金会的编程许可证的基础上,因此可以自由发布。 GNU C 对标准 C 进行一系列扩展,以增强标准 C 的功能。1. 零长度和变量长度数组 一般不这样用GNU C 允许使用零长度数组,在定义变长对象的头结构时,这个特性非常有用。例如:struct var_data { int len; char data[0...

2018-10-03 09:53:29 6170

原创 linux下解压命令大全

.tar解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)———————————————.gz解压1:gunzip FileName.gz解压2:gzip -d FileName.gz压缩:gzip FileName.tar.gz 和 .tgz解压:tar zxvf FileName.t...

2018-10-02 10:47:22 177

原创 windows未指定字符数组大小的BUG

 #include <stdio.h>intmain(void){ char a[] = "123456789"; char b[] = "123"; printf("&a = [%ld] , &b = [%ld]\n", a, b); strcpy(b, a); printf("&a = [%ld] , &b = [%ld

2018-10-02 09:23:26 242

原创 2.字符设备驱动基础

1.开启驱动开发之路1.1、驱动开发的准备工作(1)正常运行linux系统的开发板。要求开发板中的linux的zImage必须是自己编译的,不能是别人编译的。(2)内核源码树,其实就是一个经过了配置编译之后的内核源码。(3)nfs挂载的rootfs,主机ubuntu中必须搭建一个nfs服务器。1.2、驱动开发的步骤(1)驱动源码编写、Makefile编写、编译(2)insmo...

2018-10-01 20:44:26 912 1

原创 1.驱动应该怎么学

 1.什么是驱动?驱动就是硬件和应用软件之间的纽带1.1、理解驱动的概念驱动字面意思:驱使硬件设备行动1.  无操作系统时的设备驱动    并不是任何一个计算机系统都一定要有操作系统,在许多情况下,操作系统都不必存在。对于功能比较单一、控制并不复杂的系统,譬如 ASIC 内部、公交车的刷卡机、电冰箱、微波炉、简单的手机和小灵通等,并不需要多任务调度、文件系统、内存管理等复...

2018-10-01 20:26:18 1009

PaddleOCR2.7+Qt5

PaddleOCR2.7+Qt5,字符识别,GPU

2024-05-29

opencv编译需要的.cash包

opencv ffmpeg ippicv wechat_qrcode的依赖包

2023-12-23

光度立体技术字符识别和缺陷检测

在工业领域,表面检测是一个非常广泛的应用领域。在halcon中,使用增强的光度立体视觉方法,三维表面检测被加强。利用阴影可方便快速的检测物体表面的缺口或凹痕。 使用光度立体视觉方法可在复杂图像中轻松找到表面缺陷 。

2022-07-30

QT6源码编译所需要的工具

现在QT在线安装只有QT6.2以上的版本和QT5.15,其他版本就需要自己编译,本文讲解在vs2019环境下编译qt6.1.3源码。

2022-06-18

PCL1.12+VTK9.1+QT6编译部署

PCL1.12+VTK9.1+QT6编译部署

2022-06-10

QT6+CloudCompare显示3D点云

CloudCompare是一个三维点云(网格)编辑和处理软件。最初,它被设计用来对稠密的三维点云进行直接比较。它依赖于一种特定的八叉树结构,在进行点云对比这类任务时具有出色的性能。此外,由于大多数点云都是由地面激光扫描仪采集的,CloudCompare的目的是在一台标准笔记本电脑上处理大规模的点云——通常超过1000万个点云。在2005年后,cloudcompare就实现了点云和三角形网格之间的比较。随后,许多其他点云处理算法(配准、重采样、颜色/法线向量/尺度、统计计算、传感器管理、交互式或自动分割等)以及显示增强工具(自定义颜色渐变、颜色和法向量处理,校准图像处理、OpenGL着色器、插件等)

2022-04-27

Test12_16.zip

Test12_16.zip

2021-12-16

yolotest.zip

车辆检测

2021-10-22

halcon二维码识别.zip

基于dym做一个二维码识别的软件

2021-10-05

libtest.zip

把C++当脚本写,基于QT6,适合做一些比较复杂的脚本

2021-09-14

OCR_Demo3.zip

最近在学习PaddlePaddle开源算法平台,发现PaddlePaddle里面的PaddleOCR可以应用到很多场景,识别率很高,而且兼容很多平台。本文建讲解一下PaddleOCR安装部署和让QT使用PaddleOCR。

2021-09-04

Qt开发MQTT测试源码

Qt开发MQTT,测试源码,QMQTT,外加一个辅助测试软件

2021-06-22

logtest.zip

使用Log4Qt构建自己的日志系统,同时重定向到窗口显示。

2021-05-23

QtPluginDemo.zip

一个大型的软件,架构相当复杂,如果有新的开发工程师进入团队,并参与到软件的功能扩展中,如果没有插件,那整个系统需要应该新功能而重新重新,并且新成员熟悉整个软件系统的成本也非常高

2021-03-21

Qt6SerialPort.zip

在QT6中实现串口模块Qt6SerialPort,文章链接https://blog.csdn.net/qq_40732350/article/details/113634422

2021-02-04

Qt实现二维码的编解码

Qt实现二维码的编解码,能够通过字符串生成二维码,qrcode库和QZXing库,博客地址https://blog.csdn.net/qq_40732350/article/details/109550957

2020-11-07

halcon19可用dll.zip

HALCON是德国MVtec公司开发的一套完善的标准的机器视觉算法包,拥有应用广泛的机器视觉集成开发环境。它节约了产品成本,缩短了软件开发周期——HALCON灵活的架构便于机器视觉,医学图像和图像分析应用的快速开发。在欧洲以及日本的工业界已经是公认具有最佳效能的Machine Vision软件。

2020-08-03

qthalcon3d.zip

QT+Halcon的资料很少,而3D资料就更少下面是我实现的QT+Halcon3D图像显示 QT+Halcon的资料很少,而3D资料就更少下面是我实现的QT+Halcon3D图像显示

2020-07-04

draw_qwidget.zip

由于项目要涉及芯片检测的功能,需要选择特定区域,所以制作了个区域选择框,在QWidget上绘制区域框,可以放大缩小移动,可以是矩形,也可以是椭圆,注释非常完整。 需要详细介绍的可以参考我的博客https://blog.csdn.net/qq_40732350/article/details/103538593

2019-12-14

Linux基本用到的函数

本书源自日均阅读量近万次火爆的线上同名课程,口碑与影响 力俱佳,旨在打造简单易学且实用性强的轻量级 Linux 入门教程。

2018-09-30

空空如也

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

TA关注的人

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