自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 资源 (2)
  • 收藏
  • 关注

原创 BiLSTM介绍及代码实现

转载至机器之心https://www.jiqizhixin.com/articles/2018-10-24-13

2019-11-11 09:59:30 1553

原创 朴素贝叶斯理论推导与三种常见模型

https://blog.csdn.net/u012162613/article/details/48323777上面博客讲解详细,可参考:多项式模型,高斯模型,伯努利模型

2019-11-09 17:54:23 177

原创 AdaBoost与gbdt理解

AdaBoost原理原始的AdaBoost算法是在算法开始的时候,为每一个样本赋上一个权重值,初始的时候,大家都是一样重要的。在每一步训练中得到的模型,会使得数据点的估计有对有错,我们就在每一步结束后,增加分错的点的权重,减少分对的点的权重,这样使得某些点如果老是被分错,那么就会被“重点关注”,也就被赋上一个很高的权重。然后等进行了N次迭代(由用户指定),将会得到N个简单的分类器(basic ...

2019-10-24 10:49:54 363

转载 FASTER R-CNN

文章《Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks》是为了改进Fast R-CNN而提出来的。因为在Fast R-CNN文章中的测试时间是不包括search selective时间的,而在测试时很大的一部分时间要耗费在候选区域的提取上。(对于Fast R-CNN的详细知识,请查看Fast...

2019-09-11 14:47:13 152

原创 android系统中input驱动整体框架分析

编写app,1:完成对触摸屏和按键事件的捕捉2:检测输入设备的插入和拔出(热插拔) 需要用到的activity类中的方法:booleanonKeyDown(int keyCode,KeyEvent event) 按键boolean onTouchEvent(MotionEvent event)   触摸屏   第二课框架层分析:

2016-12-24 21:21:23 554

原创 android系统中alarm驱动框架分析

专题一alarm第一课、1、 功能:一般用作闹钟2、 工作流程:App->获取系统服务(alarm service)->返回特定类型的对象(Alarm Manager)->启动闹钟->定时时间到后通过广播通知app(也可以通过activity或service通知)->广播接收器(broadcast receiver)->进行处理二、分析Alarm Manag

2016-12-22 15:24:59 2693 1

原创 linux下tty子系统框架分析(linux3.4.2)

这里以S3C2440为例说明内核里面的串口驱动结构,这里也是用的虚拟总线,一边设备,一边驱动,两个名字匹配上就调用probe 函数。另外一个uart是tty设备的一种,注册一个uart就是注册一个tty,而一个平台往往对uart有统一抽象的操作,所以uart的驱动都统一了,这里的是uart_ops结构体;所以重点关心tty设备,注册uart设备通过uart_add_one_port 函数。下面看下

2016-11-04 14:42:15 1283

转载 I/O多路复用select、poll、epoll的区别使用

文章参考自:http://blog.csdn.net/tennysonsky/article/details/45745887(秋叶原 — Mike VS 麦克《Linux系统编程——I/O多路复用select、poll、epoll的区别使用》)在上一篇中,我简单学习了 IO多路复用的基本概念,这里我将初学其三种实现手段:select,poll,epoll。

2016-10-10 19:22:55 472

转载 多线程与多进程的介绍和区别

关于多线程与多进程的介绍和区别,可以参见http://blog.csdn.net/luoweifu/article/details/46595285(阳光日志《编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程》),这篇博文讲的非常不错,通俗易懂。由于老师项目的原因,多线程会用的多一些,多进程只在小的demo中使用过,对外声称自己会多线程多进程编程,可是在腾讯电面

2016-10-10 18:42:09 316

原创 volatile关键字的作用

volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。下面举例说明。在DSP开发中,经常需要等待某个事件的触发,所以经常会写出这样的程序:short flag;vo

2016-10-10 17:28:17 478

原创 linux设备中的阻塞与非阻塞io

1:阻塞与非阻塞io阻塞操作:执行设备操作时若不能获得资源则挂起进程(进程进入休眠状态,将cpu资源让给其他进程),知道满足条件后在执行!唤醒睡眠的进程的地方最大可能发生在中断中,因为硬件资源的获得一般伴随着一个中断。非阻塞:进程不能进行设备操作时并不挂起,它或者放弃,如果用户要获取设备资源,只能不停的轮训查询,直到可以操作位置(消耗cpu资源)。2:等待队列

2016-09-07 21:59:20 402

原创 linux中的互斥途径

一:中断屏蔽(不推荐使用)可以使进程与进程间的并发不在发生二:自旋锁:1自旋锁,2读写自旋锁,3顺序锁,4rcu1:自旋锁实际是忙等待,当锁不可用时,cpu一直循环执行,测试并设置锁直到可用而取得锁,在忙等是不可以做任何事,仅仅是等待,所以只有在占用锁的时间极短的情况下使用才合理。2:自旋锁可能导致系统锁死:原因:1,递归使用一个自旋锁,即如果一个已经拥有该锁的cpu想第二次获得这

2016-09-07 19:41:36 629

转载 linux NAND驱动之五:NAND驱动中probe和nand_chip结构体

在基于MTD 的NAND driver 的probe 函数中,主要可以分为两部分内容,其一是与很多外设driver 类似的一些工作,如申请地址,中断,DMA 等资源,kzalloc 及初始化一些结构体,分配DMA 用的内存等等;其二就是与MTD 相关的一些特定的工作,在这里我们将只描述第二部分内容。(1)probe 函数中与MTD 相关的结构体      在probe 函数中,我们需要

2016-09-06 21:49:20 357

转载 linux NAND驱动之六:NAND驱动的probe流程

由前面的说明可知,我们在要对NAND 芯片进行实际操作前已经为struct mtd_info 、struct mtd_partition 和struct nand_chip 这三个结构体分配好了内存,接下来就要为它们做一些初始化工作。 其中,我们需要为struct mtd_info 所做的初始化工作并不多,因为MTD Core 会在稍后为它做很多初始化工作(这些工作在nand_scan_tai

2016-09-06 21:48:24 404

转载 linux NAND驱动之四:6410上的NAND读写流程

MTD对NAND芯片的读写主要分三部分:                  NAND驱动之四:6410上的NAND读写流程" style="margin:0px; padding:0px; border:0px; list-style:none">    A、struct mtd_info中的读写函数,如read,write_oob等,这是MTD原始设备层与FLASH硬件层之间的接口;

2016-09-06 21:47:26 529

转载 linux NAND驱动之三:6410平台上的NAND驱动加载

1,platform_driver 的定义和注册      在s3c_nand.c中,static struct platform_driver s3c6410_nand_driver = {                .probe  = s3c6410_nand_probe,                .remove  = s3c_nand_remove,  

2016-09-06 21:46:31 263

转载 linux NAND驱动之二:NAND存储原理

在我们开始NAND 驱动编写之前,至少应该知道:数据在NAND 中是怎样存储的,以及以怎样的方式从NAND 中读写数据的。                             NAND驱动之二:NAND存储原理" style="margin:0px; padding:0px; border:0px; list-style:none">1,NAND 的存储结构和操作方式     

2016-09-06 21:45:45 504

转载 linux NAND驱动之一:内核中的NAND代码布局

在Linux 内核中,MTD 源代码放在/driver/mtd 目录中,该目录中包含chips 、devices 、maps 、nand 、onenand 和ubi 六个子目录。其中只有nand 和onenand 目录中的代码才与NAND 驱动相关,不过nand 目录中的代码比较通用,而onenand 目录中的代码相对于nand 中的代码而言则简化了很多,它是针对三星公司开发的另一类Flash

2016-09-06 21:44:02 413

原创 spi中的write和read的数据传输过程

从示意图中,我们可以很清除看到函数的调用过程:先调用spi设备驱动层,随后调用bitbang中间层,最后调用了master驱动层来完成数据的传输。read方法和write方法基本差不多,关键的区别在于其发送的数据为0,而在s3c24xx_spi_txrx中断服务程序中将读取数据寄存器。下面仅仅给出函数调用示意图。

2016-09-01 21:11:14 6090

原创 usb

usb设备逻辑结构:1.设备2.配置3.接口4.端点usb数据通信1.传输 2.事物 3包 4 域

2016-08-31 19:40:17 229

转载 USB子系统

http://blog.csdn.net/leesagacious/article/details/50890858usb_debugfs_initbus_registerbus_register_notifier内核通知链U盘驱动usb_debugfs_init/** 这个函数主要做了一下事情: 在de

2016-08-31 18:43:41 294

转载 "阻塞--中断"驱动模型在i2c在子系统、uart驱动、spi子系统中的实现

最近总结了这个kernel中的这个模型,下面我们 开始欣赏吧。先看i2c中的实现阻塞的过程唤醒的过程实验验证UART中的实现实验验证spi中的实现实验验证我们需要明白的是 : 1. 进程为什么要阻塞 2. 阻塞后又是 在什么时候被唤醒的? 3. 从阻塞到唤醒 这中间的过程 是怎么样的 ? 先上一符图 阻

2016-08-31 18:37:44 319

原创 spi/i2c调用框架

1.板级信息中通过 spi_register_board_info来添加设备drivers/spi/spi.c:    spi_register_board_info        /* 对于每一个spi_master,调用spi_match_master_to_boardinfo */        list_for_each_entry(master, &spi_master_

2016-08-31 14:26:31 388

原创 spi子系统调用流程

spi驱动:1.注册platform_device在arch/arm/mach-s3c2440/smdk2440.c 中注册platform_device ,其中s3c2410_spi_info 作为platform_device.private_data. platform_device.name 为"s3c2410-spi".2:在arch/arm/mach-s3c

2016-08-30 20:31:49 683

转载 module_platform_driver的作用

该函数实际是一个宏,它在include/linux/platform_device.h中定义如下:[cpp] view plain copy  /* module_platform_driver() - Helper macro for drivers that don't do  * anything special in 

2016-08-30 20:27:49 1203

转载 spi驱动

转载地址:http://www.embedu.org/Column/Column367.htm作者:刘洪涛,华清远见嵌入式学院讲师。一、概述基于子系统去开发驱动程序已经是linux内核中普遍的做法了。前面写过基于I2C子系统的驱动开发。本文介绍另外一种常用总线SPI的开发方法。SPI子系统的开发和I2C有很多的相似性,大家可以对比学习。本主题分为两个部分叙述,第一部分介绍基

2016-08-28 18:15:24 382

转载 应用:线程同步

正式开始之前先简单的解释捋捋几对概念同步/异步: 打电话和发短信阻塞/非阻塞:它们是程序在等待消息(无所谓同步或者异步)时的状态.A. 阻塞阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回有人也许会把阻塞调用和同步调用等同起来,实际上他是不同的。对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回而已。

2016-08-28 10:21:25 294

转载 互斥和同步

为什么要用到互斥,是由于cpu调度引起来的,任何一个进程或线程随时都有可能被终止, 运行另一个进程和线程,假如两个进程同时操作一个共享资源(全局变量),就可能引起问题.     驱动里的互斥主要有两种方法:   信号量 和 自旋锁    信号量: (休眠了)        void sema_init (struct semaphore *sem, int val);

2016-08-28 10:10:28 342

原创 字符设备驱动

字符设备驱动内核提供三种注册方法:    *2.6以前老版本注册方式        register_chrdev (unsigned int major, const  char *name, struct file_operations*fops);//他只分配主设备号。从设备号在mknod的时候指定            register_chrdev函数的major参数

2016-08-28 10:02:00 314

转载 lcd驱动

LCD是Liquid  Crystal  Display的简称,也就是经常所说的液晶显示器LCD能够支持彩色图像的显示和视频的播放,是一种非常重要的输出设备 Framebuffer 是Linux系统为显示设备提供的一个接口,它将显示缓冲区抽象,屏蔽图像硬件的底层差异,允许上层应用程序在图形模式下直接对显示缓冲区进行操作 Framebuffer又叫帧缓冲,是L

2016-08-27 21:07:36 436

原创 input输入子系统

输入子系统由驱动层、输入子系统核心、事件处理层三部分组成。一个输入事件,如鼠标移动、键盘按下等通过Driver->Inputcore->Event handler->userspace的顺序到达用户控件的应用程序。    驱动层:将底层的硬件输入转化为统一事件形式,想输入核心(Input Core)汇报。输入子系统核心:承上启下。

2016-08-25 14:13:30 266

原创 字符设备驱动访问原理

1.字符驱动的访问都有一个统一的入口,位于arch/arm/kernel/entry_common.S的207行(我使用的linux-3.4.2)ENTRY(vector_swi)                                                                                   //入口sub sp, sp, #S_FRAM

2016-08-22 16:45:07 264

转载 字符驱动访问过程

1.字符驱动的访问都有一个统一的入口,位于arch/arm/kernel/entry_common.S的207行(我使用的linux-3.4.2)ENTRY(vector_swi)             //入口subsp, sp, #S_FRAME_SIZEstmia sp, {r0 - r12}@ Calling r0 - r12 ARM( add r8, sp,

2016-08-22 16:38:40 206

原创 epoll机制

什么是epollepoll是什么?按照man手册的说法:是为处理大批量句柄而作了改进的poll。当然,这不是2.6内核才有的,它是在2.5.44内核中被引进的(epoll(4) is a new API introduced in Linux kernel 2.5.44),它几乎具备了之前所说的一切优点,被公认为Linux2.6下性能最好的多路I/O就绪通知方法。epoll的接

2016-08-19 21:46:39 340

原创 线程池技术

1:初始化线程池void pool_init (int max_thread_num) 1.1:创建线程池pthread_create (&(pool->threadid[i]), NULL, (void *)thread_routine, NULL); 1.2:执行线程函数void * thread_routine (void *arg) //线程池初始化void pool_in

2016-08-19 18:05:39 220

原创 对 void *(* func)(void *) 的理解

对 void *(* func)(void *) 的理解func是一个 指向 形参为 void* 返回值为 void* 的函数的指针.

2016-08-19 16:18:57 2485 1

原创 sizeof和strlen的区别

sizeof()用来计算内存的strlen用来计算字符长度的。来个具体点的,一看就知道了。char a[] = "hello";sizeof(a) = 6;strlen(a) = 5;sizeof会计算字符结尾的\0strlen 不会计算\0sizeof操作符返回占的空间;而对于一个数组,sizeof返回这个数组所有元素占的总空间。而strlen不区分是数组还是

2016-08-19 10:32:49 235

转载 函数指针与指针函数的区别

一、在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义:1、指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针     类型标识符    *函数名(参数表)      int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个地址值。函

2016-08-16 14:32:52 210

转载 快速实现ARM和DSP的通信和协同工作(转)

快速实现ARM和DSP的通信和协同工作(转) (2012-05-29 14:42:45)转载▼标签: dsp 达芬奇开发流程 it分类: 达芬奇平台DSP快速实现ARM和DSP的通信和协同工作  2010-09-29 21:13:53|  分类: DSP |字号 订阅

2016-06-27 21:32:34 1032

转载 TQ2440 PWM驱动程序设计(内核2.6.30.4)

PWM驱动程序设计(内核2.6.30.4)   原文出自http://blog.chinaunix.net/uid-25577798-id-1761435.html下面是以TQ2440开发板为基础的硬件电路图:  在驱动程序里面首先初始化该PWM所对应的管脚的功能,然后初始化定时器设置对PWM的定时,最后启动PWM功能。由硬件图可知蜂鸣器是由TOUT0(GPB0)控

2016-06-27 15:47:09 526

基于深度学习的文本相似度计算模型和代码

基于深度学习的文本相似度计算模型和代码,亲自跑过可以直接使用,对nlp领域的学习非常有借鉴意义,在智能问答系统上经常会用到。

2020-03-30

基于深度学习的故障诊断模型代码和数据

基于深度学习的故障诊断模型代码和数据,有数据,有源码,可以直接跑通! 亲测可以直接使用,对深度学习和故障诊断应用有一定的借鉴意义,代码注释全面

2020-03-30

空空如也

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

TA关注的人

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